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