Как в Конвертации данных 2.1 настроить перенос субконто при изменении типа из справочника в планы видов расчета

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

При разработке правил обмена в конфигурации «Конвертация данных 2.1» (КД 2.1) нередко возникает задача трансформации типов данных. Типичный сложный сценарий: в конфигурации-источнике субконто проводки заполнено ссылкой на промежуточный справочник, хранящий внутри себя ссылку на один из двух планов видов расчета (ПВР). В конфигурации-приемнике такого справочника нет — там субконто имеет составной тип и напрямую принимает ссылки на эти планы видов расчета.

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

Особенности обработки субконто в Конвертации данных 2.1

Проанализируем механику работы КД 2.1 с реквизитами СубконтоДт и СубконтоКт. При выгрузке движений регистра бухгалтерии платформа не требует от разработчика вручную организовывать цикл по всем видам субконто строки проводки внутри ПКС. Обработчики событий для свойства субконто вызываются платформой неявно для каждого субконто в отдельности.

Это означает, что внутри обработчиков ПКС (например, ПередВыгрузкой или ПриВыгрузке) мы работаем с контекстом конкретного субконто так, будто это обычный одиночный реквизит. В этих обработчиках доступны ключевые переменные:

  1. Значение — текущее значение выгружаемого субконто (в источнике — ссылка на промежуточный справочник).
  2. ИмяПКО — строковое имя правила конвертации объекта, по которому должно быть выгружено значение субконто.
  3. ВидСубконто — ссылка на план видов характеристик текущего субконто.
  4. ИмяПКОВидСубконто — имя правила конвертации для самого вида субконто (если ПВХ видов субконто в источнике и приемнике также различаются).

Пошаговая настройка переноса через обработчик ПКС

Разберем по шагам реализацию динамического переопределения правил и значений в ПКС для СубконтоДт и СубконтоКт.

Шаг 1. Создание ПКО для целевых объектов

В правилах конвертации объектов должны быть созданы отдельные ПКО для каждого из конечных планов видов расчета (например, ПВР_ОсновныеНачисления и ПВР_ДополнительныеНачисления).

Шаг 2. Переопределение значения и ИмяПКО в обработчике ПКС

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

  1. Проверить тип текущего субконто.
  2. «Разыменовать» реквизит и перезаписать переменную Значение прямой ссылкой на ПВР.
  3. В зависимости от типа полученного вида расчета присвоить нужное имя правила переменной ИмяПКО.
  4. При необходимости указать правило для вида субконто в ИмяПКОВидСубконто.

Посмотрим на пример кода в обработчике ПередВыгрузкой ПКС для СубконтоКт:


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

Возможные проблемы при загрузке субконто и способы их решения

Если после настройки обработчиков вид расчета выгружается, но в проводках приемника поле субконто остается пустым, выясним причину такого поведения платформы:

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

Использование встроенного механизма переопределения ИмяПКО и Значение непосредственно в ПКС субконто является наиболее простым и надежным способом трансформации сложных типов данных при выгрузке проводок в КД 2.1.

← На главную