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