Как программно создать документ ОперацияБух и сформировать проводки в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В практике программирования 1С часто возникает задача переноса данных или корректировки учета, например, когда требуется переход с УСН на ОСН, включая массовое создание ручных операций. В случаях, когда необходимо программно создать ручную операцию (аналог документа "Операция, введенная вручную"), что особенно актуально для группового создания корректировки долга и автоматизации взаимозачетов, в 1С:Бухгалтерии используется документ ОперацияБух. Однако, в отличие от обычных документов, запись данных здесь происходит напрямую в регистр бухгалтерии, что требует особого подхода.

Разберем подробно, как правильно создать этот документ, заполнить его реквизиты и, самое главное, сформировать бухгалтерские проводки. Подобные алгоритмы лежат в основе инструментов, выполняющих перенос остатков между счетами в БП 3.0.

Создание и заполнение шапки документа

В первую очередь нам необходимо создать новый экземпляр документа. Для этого обратимся к менеджеру документов ОперацияБух. Рассмотрим базовый алгоритм инициализации.

Мы должны заполнить обязательные реквизиты: Организацию, Дату и Сумму операции. Обратите внимание, что сумма операции в шапке часто носит информативный характер, но её заполнение считается правилом хорошего тона для корректного отображения в списках.


НоваяОперация = Документы.ОперацияБух.СоздатьДокумент();
НоваяОперация.Дата = ТекущаяДата();
НоваяОперация.Организация = Справочники.Организации.НайтиПоКоду("000000001");
НоваяОперация.Содержание = "Корректировка долга (программно)";
НоваяОперация.СуммаОперации = 1000;

Формирование проводок (Движений)

Самый важный этап — формирование движений. Документ ОперацияБух специфичен тем, что он управляет записями в регистре бухгалтерии Хозрасчетный. В некоторых сценариях разработчику также может потребоваться программное включение или отключение активности бухгалтерских проводок уже существующих документов. Нам нужно обратиться к коллекции движений создаваемого документа и добавить новые строки.

Проанализируем порядок действий:

  1. Обращаемся к коллекции движений по имени регистра: Движения.Хозрасчетный.
  2. Используем метод Добавить() для создания новой проводки.
  3. Заполняем Счет Дебета и Счет Кредита, используя работу с планом счетов Хозрасчетный программными средствами.
  4. Обязательно заполняем Субконто, если счета их требуют. Это крайне важно, например, когда выполняется корректировка движений операции по начислению материальной помощи физическим лицам, где точность заполнения субконто определяет корректность учета.

Посмотрим на пример кода, где мы формируем проводку Дт 62.01 - Кт 91.01:


// Получаем коллекцию движений
ДвиженияНУ = НоваяОперация.Движения.Хозрасчетный;

// Добавляем новую проводку
Проводка = ДвиженияНУ.Добавить();
Проводка.Период = НоваяОперация.Дата;
Проводка.Организация = НоваяОперация.Организация;

// Заполняем Дебет
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями; // 62.01
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию("Клиент А"));
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Договоры", Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной"));

// Заполняем Кредит
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеДоходы; // 91.01
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "ПрочиеДоходыИРасходы", Справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Списание долга"));

// Сумма
Проводка.Сумма = 1000;

Здесь мы использовали вспомогательный метод или стандартный подход — подробнее об этом читайте в материале про программную установку субконто в 1С 8.3. Если вы пишете без общих модулей, установка субконто выглядит так:


Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = ИскомыйКонтрагент;

Запись документа

Финальный шаг — запись документа в базу данных. Для документа ОперацияБух важно установить режим записи. Поскольку мы программно сформировали движения, нам необходимо записать документ с проведением, хотя технически для "Операции" это означает запись набора записей регистра.

Также важно явно установить свойство Записывать для коллекции движений в значение Истина, иначе проводки не сохранятся. О том, почему не записываются движения и как работает свойство «Записывать», полезно знать для избежания типичных ошибок.


// Указываем, что движения нужно записать
НоваяОперация.Движения.Хозрасчетный.Записывать = Истина;

// Записываем сам документ
НоваяОперация.Записать(РежимЗаписиДокумента.Запись);

Важные нюансы при работе с налоговым учетом

Если ваша конфигурация подразумевает ведение налогового учета (НУ, ПР, ВР) на отдельных счетах или ресурсах (например, ПР и ВР) при программном формировании проводок, не забудьте заполнить соответствующие поля в проводке. Это часто требуется, когда необходимо выполнить выравнивание остатков БУ и НУ для 1С:Бухгалтерии для устранения расхождений.

Разберем пример заполнения сумм НУ:


Проводка.СуммаНУДт = 1000;
Проводка.СуммаНУКт = 1000;

Используя этот подход, вы сможете автоматизировать создание любых бухгалтерских справок и корректировок в 1С, сохраняя целостность данных и корректность учета.

← На главную