Перенос движений регистра бухгалтерии — одна из типовых задач при интеграции или переносе данных между конфигурациями 1С. Однако начинающие разработчики часто сталкиваются с трудностями при выгрузке аналитики по дебету и кредиту (СубконтоДт и СубконтоКт). Выясним причину возникающих ошибок и разберем по шагам доступные способы переноса субконто.
В большинстве случаев платформа и конфигурация 1С:Конвертация данных обрабатывают коллекцию субконто в автоматическом режиме. Если планы счетов и виды субконто в источнике и приемнике идентичны по структуре, дополнительный программный код писать не требуется.
Проанализируем обязательные условия для корректной работы штатного механизма:
СправочникСсылка.Контрагенты, СправочникСсылка.ДоговорыКонтрагентов, СправочникСсылка.Номенклатура), должно быть создано и настроено собственное правило конвертации объекта (ПКО).ИмяПредопределенныхДанных, а не по коду или наименованию, так как системные имена предопределенных элементов чаще совпадают между типовыми конфигурациями.СчетДт и СчетКт обязательно должны иметь меньший номер порядка, чем СубконтоДт и СубконтоКт. Коллекция субконто в платформе жестко привязана к счету проводки. Если счет загружается позже субконто, платформа автоматически очистит ранее заполненную аналитику.Рассмотрим ситуацию, когда необходимо динамически переопределить правило конвертации, вид субконто или само передаваемое значение. Для ПКС свойств СубконтоДт и СубконтоКт доступны специальные параметры обработчиков:
ИмяПКОВидСубконто — имя правила конвертации для типа субконто (элемента плана видов характеристик).ВидСубконто — конкретный вид субконто, для которого передается значение.Субконто — само выгружаемое значение аналитики.Используя эти параметры в обработчиках ПередВыгрузкой или ПриВыгрузке, можно точечно вмешиваться в процесс сериализации каждого субконто проводки.
Если состав субконто на счетах источника и приемника не совпадает (например, на счете источника три субконто, а в приемнике аналитика перенесена на другие субконто или сокращена), стандартное сопоставление вызовет ошибку. Платформа 1С не позволяет записать субконто, отсутствующее в табличной части ВидыСубконто выбранного счета.
Разберем вариант выгрузки через ручное формирование таблицы значений в обработчике ПередВыгрузкой свойства СубконтоДт (или СубконтоКт):
// Отключаем стандартную обработку выгрузки свойства
Отказ = Истина;
// Создаем и заполняем структуру субконто для приемника
ТаблицаСубконто = Новый ТаблицаЗначений;
ТаблицаСубконто.Колонки.Добавить("ВидСубконто");
ТаблицаСубконто.Колонки.Добавить("Значение");
СтрокаСубконто = ТаблицаСубконто.Добавить();
СтрокаСубконто.ВидСубконто = Источник.СубконтоДт.Владелец; // или конкретный вид ПВХ
СтрокаСубконто.Значение = Источник.СубконтоДт.Контрагент;
Значение = ТаблицаСубконто;
Еще один распространенный и надежный способ — отказаться от прямой выгрузки реквизитов СубконтоДт и СубконтоКт в ПКС и выполнить заполнение субконто на стороне приемника в обработчике ПослеЗагрузки набора записей или строки движения.
Посмотрим на пример установки субконто в строке набора записей:
// СтрокаЗаписи — текущая строка регистра бухгалтерии
// ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные — коллекция видов аналитики приемника
ВидСубконтоКонтрагенты = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты;
СтрокаЗаписи.СубконтоДт.Вставить(ВидСубконтоКонтрагенты, ОбъектыКоллекции.Контрагент);
Метод Вставить объекта коллекции субконто проверяет, доступен ли указанный вид субконто для текущего счета проводки, и безопасно помещает значение в нужный слот аналитики.
Рассмотрим альтернативный архитектурный подход: если задача заключается в переносе самих документов-регистраторов, часто нет необходимости переносить записи регистра бухгалтерии напрямую. Гораздо надежнее исключить регистр бухгалтерии из правил выгрузки, а в целевой информационной базе включить признак проведения перенесенных документов. При вызове метода Записать(РежимЗаписиДокумента.Проведение) документ сам сформирует корректные проводки и заполнит субконто по алгоритмам конфигурации-приемника.