Как перенести реквизит в Конвертации данных 2.1, если его нет в списке метаданных

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

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

Проблема использования ЗначениеВСтрокуВнутр

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

Способ 1: Ручное добавление реквизита в справочник метаданных КД

Мало кто помнит, что метаданные в конфигурации «Конвертация данных» — это не жесткая системная таблица, а обычные элементы справочников. Мы можем отредактировать их вручную, не прибегая к обработке «Выгрузка описания конфигурации». Рассмотрим этот процесс по шагам:

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

Теперь, когда мы вернемся в настройку правил обмена (ПКО), этот реквизит появится в списке доступных для выбора в ПКС. Это самый «чистый» способ, так как он позволяет использовать стандартные механизмы сопоставления ссылок.

Способ 2: Создание ПКС с пустым источником

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

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


// В обработчике ПКС "Перед выгрузкой"
// Источник - это ссылка на объект в базе 1С
Значение = Источник.АналитикаХозяйственнойОперации;

В этом случае платформа при выгрузке обратится к реальному объекту Источник. Даже если КД «не знает» о существовании реквизита, встроенный язык 1С позволит получить его значение, если оно физически есть в базе данных. Это значение будет упаковано в XML и передано в приемник согласно правилам для данного типа данных.

Способ 3: Использование параметров объекта

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

  1. В ПКО создаем ПКС.
  2. Устанавливаем флаг Передавать в параметр.
  3. Имя параметра задаем произвольно, например, П_АналитикаХозяйственнойОперации.
  4. В обработчике Перед выгрузкой пишем код:

Значение = Источник.АналитикаХозяйственнойОперации;

На стороне приемника эти данные не запишутся в реквизит документа автоматически. Нам нужно будет «поймать» их. Для этого проанализируем обработчик После загрузки в ПКО:


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

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

Способ 4: Прямое редактирование XML-файла правил

Для опытных разработчиков существует еще один путь — прямое вмешательство в XML-код правил обмена. Это бывает быстрее, чем открывать тяжелую базу КД. Посмотрим, как это сделать:

Выгрузим правила в файл. Откроем его в текстовом редакторе (лучше использовать Notepad++ или аналоги с подсветкой синтаксиса). Найдем узел нужного ПКО по имени или коду. Внутри тега Свойства добавим блок:


<ПравилоКонвертацииСвойства>
    <Источник>АналитикаХозяйственнойОперации</Источник>
    <Приемник>АналитикаХозяйственнойОперации</Приемник>
    <Код>1</Код>
</ПравилоКонвертацииСвойства>

Если тип реквизита ссылочный, необходимо убедиться, что для этого типа (например, справочник АналитикаХозяйственнойОперации) уже создано свое Правило Конвертации Объекта. В противном случае система не поймет, как сопоставить ссылку. После внесения изменений сохраним файл и загрузим его обратно в КД или сразу в обработку обмена.

Резюме и рекомендации

Мы проанализировали четыре способа решения задачи. Выясним, какой из них лучше выбрать. Если вы планируете долго поддерживать эти правила, первый способ (ручное добавление в метаданные КД) является наиболее предпочтительным, так как он сохраняет прозрачность структуры. Если же задача разовая — использование ПКС с пустым источником или передача через параметры позволит решить вопрос максимально быстро.

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

← На главную