В практике программирования 1С часто возникает задача переноса данных или корректировки учета, например, когда требуется переход с УСН на ОСН, включая массовое создание ручных операций. В случаях, когда необходимо программно создать ручную операцию (аналог документа "Операция, введенная вручную"), что особенно актуально для группового создания корректировки долга и автоматизации взаимозачетов, в 1С:Бухгалтерии используется документ ОперацияБух. Однако, в отличие от обычных документов, запись данных здесь происходит напрямую в регистр бухгалтерии, что требует особого подхода.
Разберем подробно, как правильно создать этот документ, заполнить его реквизиты и, самое главное, сформировать бухгалтерские проводки. Подобные алгоритмы лежат в основе инструментов, выполняющих перенос остатков между счетами в БП 3.0.
В первую очередь нам необходимо создать новый экземпляр документа. Для этого обратимся к менеджеру документов ОперацияБух. Рассмотрим базовый алгоритм инициализации.
Мы должны заполнить обязательные реквизиты: Организацию, Дату и Сумму операции. Обратите внимание, что сумма операции в шапке часто носит информативный характер, но её заполнение считается правилом хорошего тона для корректного отображения в списках.
НоваяОперация = Документы.ОперацияБух.СоздатьДокумент();
НоваяОперация.Дата = ТекущаяДата();
НоваяОперация.Организация = Справочники.Организации.НайтиПоКоду("000000001");
НоваяОперация.Содержание = "Корректировка долга (программно)";
НоваяОперация.СуммаОперации = 1000;
Самый важный этап — формирование движений. Документ ОперацияБух специфичен тем, что он управляет записями в регистре бухгалтерии Хозрасчетный. В некоторых сценариях разработчику также может потребоваться программное включение или отключение активности бухгалтерских проводок уже существующих документов. Нам нужно обратиться к коллекции движений создаваемого документа и добавить новые строки.
Проанализируем порядок действий:
Движения.Хозрасчетный.Добавить() для создания новой проводки.Посмотрим на пример кода, где мы формируем проводку Дт 62.01 - Кт 91.01:
// Получаем коллекцию движений
ДвиженияНУ = НоваяОперация.Движения.Хозрасчетный;
// Добавляем новую проводку
Проводка = ДвиженияНУ.Добавить();
Проводка.Период = НоваяОперация.Дата;
Проводка.Организация = НоваяОперация.Организация;
// Заполняем Дебет
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями; // 62.01
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию("Клиент А"));
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Договоры", Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной"));
// Заполняем Кредит
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеДоходы; // 91.01
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "ПрочиеДоходыИРасходы", Справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Списание долга"));
// Сумма
Проводка.Сумма = 1000;
Здесь мы использовали вспомогательный метод или стандартный подход — подробнее об этом читайте в материале про программную установку субконто в 1С 8.3. Если вы пишете без общих модулей, установка субконто выглядит так:
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = ИскомыйКонтрагент;
Финальный шаг — запись документа в базу данных. Для документа ОперацияБух важно установить режим записи. Поскольку мы программно сформировали движения, нам необходимо записать документ с проведением, хотя технически для "Операции" это означает запись набора записей регистра.
Также важно явно установить свойство Записывать для коллекции движений в значение Истина, иначе проводки не сохранятся. О том, почему не записываются движения и как работает свойство «Записывать», полезно знать для избежания типичных ошибок.
// Указываем, что движения нужно записать
НоваяОперация.Движения.Хозрасчетный.Записывать = Истина;
// Записываем сам документ
НоваяОперация.Записать(РежимЗаписиДокумента.Запись);
Если ваша конфигурация подразумевает ведение налогового учета (НУ, ПР, ВР) на отдельных счетах или ресурсах (например, ПР и ВР) при программном формировании проводок, не забудьте заполнить соответствующие поля в проводке. Это часто требуется, когда необходимо выполнить выравнивание остатков БУ и НУ для 1С:Бухгалтерии для устранения расхождений.
СуммаНУДт и СуммаНУКт — для сумм налогового учета.СуммаПРДт, СуммаПРКт — для постоянных разниц.СуммаВРДт, СуммаВРКт — для временных разниц.Разберем пример заполнения сумм НУ:
Проводка.СуммаНУДт = 1000;
Проводка.СуммаНУКт = 1000;
Используя этот подход, вы сможете автоматизировать создание любых бухгалтерских справок и корректировок в 1С, сохраняя целостность данных и корректность учета.