Как правильно выгрузить документ «Операция» и его проводки при обмене данными в 1С?

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

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

Понимание природы документа «Операция»

Для начала проанализируем ситуацию: документ Операция — это специализированный объект. Когда вы в пользовательском режиме видите проводки в форме документа, 1С в этот момент выполняет запрос к регистру бухгалтерии, фильтруя записи по текущему документу. При автоматическом обмене через ПланыОбмена стандартный механизм может не «видеть» проводки, так как они не входят в состав самого объекта документа, а являются его движениями.

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

Решение 1: Явное получение данных через запросы

Посмотрим на пример работы с данными. Вместо использования методов типа ВыбратьПоРегистратору, которые могут быть нестабильны в контексте обмена, рекомендуется использовать явные запросы. Под капотом системы любой метод выбора все равно сводится к запросу, поэтому лучше контролировать его самостоятельно.

Рассмотрим логику работы: перед тем как выгрузить документ, нам нужно собрать все данные по его движениям в структуру или XML-пакет. Мы можем использовать такой подход:


// Пример логики запроса для получения движений
ВЫБРАТЬ
    Регистр.Период,
    Регистр.СчетДт,
    Регистр.СубконтоДт,
    Регистр.СчетКт,
    Регистр.СубконтоКт,
    Регистр.Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный КАК Регистр
ГДЕ
    Регистр.Регистратор = &СсылкаНаДокумент

При использовании этого метода вы получаете полный набор записей, который можете передать в сообщении обмена вместе с реквизитом ПерекинутьВДругуюБазу.

Решение 2: Программная запись движений в базе-приемнике

Разберем самый надежный алгоритм переноса. Суть заключается в последовательной передаче данных: сначала вы передаете «шапку» документа, затем его движения.

  1. Выгрузка: В обработчике ПередВыгрузкой для документа Операция считываем все записи из регистра бухгалтерии, которые соответствуют данному Регистратор. Упаковываем их в структуру или таблицу значений, которую прикрепляем к выгружаемому объекту.
  2. Загрузка: В базе-приемнике сначала записываем сам документ. После того как документ успешно записан и мы получили его новую ссылку, мы обращаемся к НаборЗаписей соответствующего регистра бухгалтерии.

Посмотрим на пример кода, который необходимо выполнить в базе-приемнике после записи документа:


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

// Заполняем набор данными, полученными из сообщения
Для Каждого СтрокаДвижений Из ПолученныеДанныеПроводок Цикл
    Запись = НаборЗаписей.Добавить();
    ЗаполнитьЗначенияСвойств(Запись, СтрокаДвижений);
КонецЦикла;

// Записываем движения
НаборЗаписей.Записать();

Как передать дополнительные реквизиты

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

Проанализируем шаги настройки:

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

← На главную