Как программно перенести остатки между счетами в 1С с помощью документа ОперацияБух

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

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

Особенности архитектуры документа ОперацияБух

Приступая к разработке обработки для создания бухгалтерских операций, многие начинающие программисты сталкиваются с тем, что у объекта ДокументОбъект.ОперацияБух отсутствует табличная часть. Это не ошибка платформы, а архитектурная особенность. В отличие от большинства документов («Поступление товаров и услуг», «Реализация»), которые хранят данные в своих табличных частях и формируют движения только при проведении, ОперацияБух является «документом-оболочкой».

Данные о проводках в этом документе записываются напрямую в набор записей регистра бухгалтерии Хозрасчетный (или другой, в зависимости от конфигурации) в момент записи самого документа. Таблица, которую пользователь видит в интерфейсе, является визуальным отображением движений этого документа по регистру.

Пошаговый алгоритм программного создания операции

Рассмотрим по шагам, как правильно реализовать программное создание проводки для переноса остатков. Проанализируем основные этапы: от создания объекта до заполнения аналитики (субконто).

  1. Создание объекта документа. Нам необходимо создать новый документ, заполнить его основные реквизиты (организация, дата, содержание).
  2. Запись документа. Перед заполнением проводок документ необходимо записать. Это нужно для того, чтобы у него появилась ссылка (Уникальный Идентификатор), к которой будут привязаны записи регистра.
  3. Работа с движениями. Мы обращаемся к коллекции движений документа по регистру бухгалтерии и добавляем новые записи.
  4. Заполнение аналитики. Субконто заполняются через специальную коллекцию, где ключом выступает вид субконто.
  5. Установка флага записи. Чтобы движения сохранились в базе данных, необходимо явно указать регистру, что его нужно записать.

Пример программного кода

Разберем пример кода, который создает операцию по переносу суммы со счета 44.01 на 41.01. Обратите внимание на работу с коллекцией СубконтоДт и СубконтоКт.


// Создаем новый объект документа
НоваяОперация = Документы.ОперацияБух.СоздатьДокумент();
НоваяОперация.Дата = ТекущаяДата();
НоваяОперация.Организация = СсылкаНаОрганизацию;
НоваяОперация.Содержание = "Перенос издержек на себестоимость товаров";
НоваяОперация.Записать();

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

// Создаем новую проводку
Проводка = ДвиженияХозрасчетный.Добавить();
Проводка.Период = НоваяОперация.Дата;
Проводка.Организация = НоваяОперация.Организация;
Проводка.Активность = Истина;

// Заполняем дебет (41.01 - Товары)
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СсылкаНаТовар;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СсылкаНаСклад;

// Заполняем кредит (44.01 - Издержки обращения)
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ИздержкиОбращения;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиЗатрат] = СсылкаНаСтатьюЗатрат;

// Указываем сумму операции
Проводка.Сумма = СуммаПереноса;

// Важный момент: устанавливаем флаг записи набора движений
ДвиженияХозрасчетный.Записывать = Истина;
НоваяОперация.Записать();

Методологические нюансы: почему именно 44 и 41?

Проанализируем ситуацию, описанную в теме. Перенос остатков со счета 44 на 41 часто связан с необходимостью капитализации транспортно-заготовительных расходов (ТЗР). Согласно учетной политике многих предприятий и нормам бухгалтерского учета (ФСБУ 5/2019), затраты на доставку товаров должны включаться в их фактическую себестоимость, а не списываться сразу на расходы периода.

Однако стоит помнить о следующих рисках при использовании ручных операций:

Рекомендации по автоматизации

Выясним, есть ли альтернативы ручной операции. Если ваша задача — включить транспортные расходы в стоимость товара, рассмотрите использование типового документа «Поступление доп. расходов». Он позволяет распределить сумму затрат на список товаров пропорционально их стоимости или количеству, автоматически формируя корректные проводки и записи в регистрах накопления для партионного учета.

Если же стоит задача разовой корректировки, и вы используете программный метод через ОперацияБух, обязательно проверяйте корректность заполнения всех видов субконто, предусмотренных на счетах. Для счета 44.01 это обычно «Статьи затрат», а для счета 41.01 — «Номенклатура», «Склады» и, в ряде случаев, «Партии».

Резюмируя: программная работа с операциями в 1С требует понимания того, что проводки — это не часть документа, а записи регистра. Правильное использование метода Добавить() для набора записей и установка свойства Записывать = Истина — залог успешного решения задачи.

← На главную