Как найти источник данных и алгоритмы формирования субконто в правилах «Конвертации данных 2.0»?

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

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

Где формируются нестандартные колонки табличной части

Рассмотрим типовой сценарий: в обработчике Перед выгрузкой для документа ОтражениеЗарплатыВРеглУчете анализируется коллекция строк:


Соответствие = Новый Соответствие;
Для каждого Строка ИЗ Источник.ОтражениеВУчете Цикл
    Для Сч = 1 по 3 Цикл
        ИмяКолонки = "СубконтоДт" + Сч + "Физлицо";
        Если ТипЗнч(Строка[ИмяКолонки]) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
            Соответствие.Вставить(Строка[ИмяКолонки]);    
        Конецесли;
        ИмяКолонки = "СубконтоКт" + Сч + "Физлицо";
        Если ТипЗнч(Строка[ИмяКолонки]) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
            Соответствие.Вставить(Строка[ИмяКолонки]);    
        Конецесли;
    КонецЦикла;
КонецЦикла;

В типовой структуре метаданных документа аналитика субконто хранится в универсальных реквизитах составного типа СубконтоДт1, СубконтоДт2, а колонок с постфиксом Физлицо физически не существует. Выясним причину их появления:

  1. Произвольный алгоритм в Правиле выгрузки данных (ПВД): если для объекта в ПВД выбран способ выборки «Произвольный алгоритм», объект Источник формируется вручную через программный запрос или заполнение промежуточной таблицы значений.
  2. Разворачивание субконто в запросе: разработчики правил часто выполняют явное приведение типов субконто в тексте запроса с помощью конструкции ВЫРАЗИТЬ(ТЧ.СубконтоДт1 КАК Справочник.ФизическиеЛица) КАК СубконтоДт1Физлицо, создавая виртуальные колонки в результирующей таблице.
  3. Где искать текст запроса: в конфигурации «Конвертация данных» перейдем в меню Справочники → Запросы или на закладку Алгоритмы и запросы. Именно там объявляются запросы, к которым обращаются по имени (например, Запросы.ОтражениеЗарплатыВРеглУчете).

Безопасное обращение к виртуальным колонкам

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


Если Источник.ОтражениеВУчете.Колонки.Найти(ИмяКолонки) <> Неопределено Тогда
    Если ТипЗнч(Строка[ИмяКолонки]) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
        Соответствие.Вставить(Строка[ИмяКолонки]);    
    КонецЕсли;
КонецЕсли;

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

Оптимизация выборки данных и использование памяти платформы

Проанализируем фрагмент выборки данных в ПВД:

ВыборкаДанных = Запросы.ОтражениеЗарплатыВРеглУчете.Выполнить().Выгрузить();

Вызов метода Выгрузить() полностью загружает результат запроса в оперативную память. Для документов отражения зарплаты за длительный период таблица может содержать десятки тысяч строк сложной аналитики. Это часто приводит к критическому переполнению памяти платформы и аварийному завершению сеанса. Рекомендуется использовать последовательный обход через Выборка = Запрос.Выполнить().Выбрать() с порционной передачей данных в обработчик.

Управление проведением и кэшированием объектов

Рассмотрим другие важные параметры, используемые в обработчике:

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

Обозначения пиктограмм и подсветка строк в интерфейсе КД

При настройке ПКО и Правил конвертации свойств (ПКС) интерфейс конфигуратора правил использует цветовую индикацию и специальные значки:

  1. Значки «Лупа» и «Лупа с плюсом»: показывают настройки поиска объекта в базе-приемнике. Обычная лупа указывает на поиск по уникальному идентификатору (GUID), а лупа с плюсом свидетельствует о включенной опции «Продолжить поиск по полям поиска, если по идентификатору объект не найден».
  2. Желтый цвет строк: строка в таблице конвертации свойств подсвечивается желтым, если имя свойства источника не совпадает с именем свойства приемника, либо если приемник заполняется из входящих данных. Это визуальное предупреждение разработчику о необходимости ручного контроля сопоставления.
  3. Голубой цвет строк: указывает на то, что для свойства настроено собственное правило конвертации значений или сопоставление сложных типов.

Риски загрузки правил обмена в пустую базу «Конвертации данных»

При импорте XML-файла правил обмена в чистую информационную базу КД 2.0 без предварительной загрузки метаданных конфигураций создаются упрощенные фиктивные описания объектов. При последующей обратной выгрузке правил в новый XML могут возникнуть критические расхождения:

  1. Теряется детальная информация о составных типах реквизитов (например, субконто или дополнительных реквизитов), что нарушает автоматическое сопоставление типов в приемнике.
  2. Сбрасываются сопоставления предопределенных элементов и значений перечислений.
  3. Синтаксический контроль кода и контекстный автоподбор реквизитов становятся недоступны.

Поэтому перед загрузкой XML-правил всегда следует выгружать актуальные структуры метаданных из рабочих конфигураций источника и приемника с помощью штатной обработки MD82Exp.epf (или MD83Exp.epf) и загружать их в КД в первую очередь.

← На главную