При программной разработке обработок загрузки данных в ОперацияБух часто возникают ситуации, когда проводки не отражаются в отчетах или в них отсутствуют суммы налогового учета (СуммаНУДт, СуммаНУКт). Давайте разберем по шагам, как правильно работать с этим документом, чтобы избежать ошибок и обеспечить целостность данных.
Если после выполнения кода проводки не попадают в оборотно-сальдовую ведомость или колонки сумм остаются пустыми, обратите внимание на следующие критические аспекты:
ОперацияБух является объектом, ведущим учет в разрезе организаций. Если реквизит Организация не заполнен, проводки считаются «бесхозными» и игнорируются стандартными отчетами. Убедитесь, что Организация установлена как в самом документе, так и (при необходимости) в каждой проводке.ОбменДанными.Загрузка = Истина может помочь, но применять его стоит с осторожностью, так как это отключает все проверки и подписки на события.Рассмотрим алгоритм формирования документа. Сначала создаем документ, заполняем реквизиты, записываем его, а затем формируем набор записей регистра Хозрасчетный.
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = НужнаяОрганизация; // Обязательный реквизит!
НовыйДокумент.Содержание = "Загрузка проводок из Excel";
НовыйДокумент.Записать();
// Создаем набор записей
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка);
Для Каждого Стр Из ТаблицаДанных Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Регистратор = НовыйДокумент.Ссылка;
НоваяЗапись.Период = НовыйДокумент.Дата;
НоваяЗапись.СчетДт = Стр.СчетДт;
НоваяЗапись.СчетКт = Стр.СчетКт;
НоваяЗапись.Сумма = Стр.Сумма;
// Установка сумм налогового учета
НоваяЗапись.СуммаНУДт = Стр.СуммаНУ;
НоваяЗапись.СуммаНУКт = Стр.СуммаНУ;
// Работа с субконто
БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетДт, НоваяЗапись.СубконтоДт, "Контрагенты", Стр.Контрагент);
КонецЦикла;
НаборЗаписей.Записать(); // Записываем весь набор разом
Для корректного заполнения субконто используйте метод БухгалтерскийУчет.УстановитьСубконто. Важно помнить, что передаваемое значение должно соответствовать типу, ожидаемому планом счетов для конкретного вида субконто. Если субконто не заполняется, проверьте наличие значения в переменной и соответствие настроек счета.
Чтобы итоговая сумма документа ОперацияБух (реквизит СуммаОперации) соответствовала действительности, не забудьте после записи набора записей рассчитать итог. Это можно сделать через выгрузку набора записей в таблицу значений:
ТаблицаПроводок = НаборЗаписей.Выгрузить();
НовыйДокумент.СуммаОперации = ТаблицаПроводок.Итог("Сумма");
НовыйДокумент.Записать(); // Обновляем документ с итоговой суммой
Если вы столкнулись с тем, что записи при создании в цикле заменяют друг друга, убедитесь, что вы используете НаборЗаписей.Добавить() для каждой новой строки и вызываете НаборЗаписей.Записать() только один раз после завершения цикла. Это предотвратит перезапись и обеспечит корректное добавление всех проводок в документ.
Следуя этим рекомендациям, вы сможете программно создавать документы с проводками любой сложности, избегая типичных ошибок, связанных с организацией, режимом загрузки и структурой регистра бухгалтерии.