Как в 1С:Конвертации данных перенести документ в проводки документа «Операция»?

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

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

Разберем по шагам, как правильно настроить правила конвертации данных (КД 2.1) для трансформации документа источника в операцию с проводками в приемнике.

1. Общая концепция настройки ПКО

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

Для реализации обмена нам понадобятся:

  1. Правило конвертации объекта (ПКО) документа: в качестве источника указываем наш исходный документ, в качестве приемника — документ ОперацияБух (или ОперацияУпр).
  2. Правило конвертации свойств (ПКС) набора записей: свойство-приемник настраивается на коллекцию движений регистра (группу свойств), где источником выступает либо табличная часть, либо сформированная таблица значений.
  3. Правило конвертации объекта (ПКО) записей регистра: описывает сопоставление полей отдельной проводки (счета, суммы, субконто, валюты и аналитики).

2. Способы формирования коллекции проводок в ПКС

Рассмотрим два основных варианта подготовки данных для набора записей регистра бухгалтерии.

Вариант А: Программное формирование таблицы проводок в обработчике ПКС

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


КоллекцияОбъектов = Новый ТаблицаЗначений;
КоллекцияОбъектов.Колонки.Добавить("Период");
КоллекцияОбъектов.Колонки.Добавить("СчетДт");
КоллекцияОбъектов.Колонки.Добавить("СчетКт");
КоллекцияОбъектов.Колонки.Добавить("Сумма");
КоллекцияОбъектов.Колонки.Добавить("Содержание");

// Обходим табличную часть документа-источника или готовые движения
Для Каждого СтрТЧ Из Источник.Товары Цикл
    НовСтр = КоллекцияОбъектов.Добавить();
    НовСтр.Период = Источник.Дата;
    НовСтр.СчетДт = "41.01"; // Либо передаем ссылку на счет
    НовСтр.СчетКт = "60.01";
    НовСтр.Сумма = СтрТЧ.Сумма;
    НовСтр.Содержание = "Поступление: " + СокрЛП(СтрТЧ.Номенклатура);
КонецЦикла;

Вариант Б: Передача через ВходящиеДанные

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


ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("ТаблицаПроводок", ТаблицаСформированныхПроводок);

В соответствующем ПКС для набора движений достаточно установить флаг «Получить из входящих данных» и указать имя ключа ТаблицаПроводок.

3. Перенос счетов и субконто

Обратим внимание на работу с субконто: в регистрах бухгалтерии субконто не являются фиксированными колонками таблицы, а представляют собой коллекцию видов характеристик и их значений.

Выясним, как их корректно передавать:

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

// Пример заполнения субконто в строке набора записей
СтрокаДвижения.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = НайденныйКонтрагент;
СтрокаДвижения.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = НайденныйДоговор;

4. Запись документа «Операция» в базе-приемнике

Посмотрим на особенности записи документа Операция при загрузке. Чтобы проводки корректно отображались в интерфейсе конфигурации и не затирались стандартными механизмами, необходимо учесть следующие нюансы:

  1. Режим записи: Документ записывается исключительно в режиме РежимЗаписиДокумента.Запись, так как проведение для ручных операций не предусмотрено.
  2. Флаги ручной корректировки: В типовых конфигурациях (например, в «1С:Бухгалтерии предприятия») у документа или его движений взводится признак РучнаяКорректировка = Истина или СодержитПроводки = Истина.
  3. Флаг записи движений: В обработчике «После загрузки» ПКО документа следует убедиться, что для набора движений выставлен флаг записи:

Объект.Движения.Хозрасчетный.Записывать = Истина;
// Либо явная запись набора движений:
Объект.Движения.Хозрасчетный.Записать(Истина);

5. Идентификация и сопоставление объектов

Чтобы избежать появления дублирующих операций при повторной выгрузке одного и того же документа-источника, в ПКО необходимо настроить поля поиска:

  1. Установить флаг «Искать объект приемника по внутреннему идентификатору» (по GUID документа-источника).
  2. Либо сопоставлять операцию по ключевым реквизитам: Организация, Дата и Номер.

При повторной загрузке существующий документ Операция будет перезаписан, а его набор проводок полностью заменится актуальными данными из выгрузки.

← На главную