1C:Конвертация данных 2. Использование исходящих и входящих данных. Свойство "Получить из входящих данных"

Специалист нашей компании Илья пару лет назад разместил свою статью на профильном информационном ресурсе, насущность темы и актуальность информации не уменьшились за это время, решили эту тему затронуть и в своём блоге. 

1. Теория конвертации данных 2 . Использование исходящих и входящих данных. Свойство "Получить из входящих данных"

В штатной справке по Конвертации данных об этих параметрах написано следующее:

ВходящиеДанные - Произвольный - произвольные вспомогательные данные, переданные правилу конвертации из других правил (например из правила выгрузки данных или правила конвертации свойств). Значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта приемника. Таким образом, при конвертации свойств (в правиле конвертации свойств), конвертируемые данные (или часть данных) могут быть получены из этого параметра.

ИсходящиеДанные - Произвольный - произвольные вспомогательные данные. Данные передаются по следующим правилам:

1) ПВД.ИсходящиеДанные → ПКО.ВходящиеДанные

2) ПКО.ВходящиеДанные → ПКС.ВходящиеДанные

3) ПКС.ИсходящиеДанные → ПКО.ВходящиеДанные

Попробуем разобраться подробнее, как передаются данные параметры.

Шаг 1. ПВД (Правило выгрузки данных)

В правилах выгрузки данных создаем параметр ИсходящиеДанные и помещаем в него некоторое значение.

Шаг 2. ПКО (Правило конвертации объектов)

После выполнения ПВД, параметр передается в ПКО-приемник уже как ВходящиеДанные. К этому параметру можно обратиться в коде, например, поместив еще один элемент в структуру.


Если будет установлено хотя бы одно поле, получаемое из входящих данных, в ПКО добавится вкладка "Параметры, получаемые из входящих данных", где будет отображаться список соответствующих полей. Также отобразится кнопка "Структура запрашиваемых данных", которая позволит посмотреть, какую структуру входящих данных нужно передать в ПКО.

Шаг 3. ПКС (Правило конвертации свойств)

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


Для того, чтобы свойству было присвоено значение из входящих данных, выставляем галку "Получить из входящих данных". Поле Источник очистится, т.к. оно уже потеряло свой смысл.

При совпадении наименовании ключа структуры входящих данных, поля будут заполнятся автоматически из входящих данных. Если наименование в структуре различаются, значение необходимо переназначить в ПКС вручную.

Шаг 4. Снова ПКО

Если поле имеет не примитивный тип данных, то система продолжит конвертацию объекта по правилу. Параметр ИсходящиеДанные, заданный в ПКС, будет передан в ПКО как ВходящиеДанные.

2. Практика конвертации данных 2

Задача: Необходимо настроить передачу документа (для примера будем использовать документ ПоступлениеТоваровУслуг) из базы Источника(1С:ERP Управление предприятием 2) в базу Приемник(Управление производственным предприятием 1.3) через регистр сведений "Сопоставление номенклатуры". У документа есть табличная часть Товары, в которой имеется поле "Номенклатура.

Номенклатура базы Источника должна заменяться на номенклатуру базы Приемника на основании найденного сопоставления, т.к. это эквивалентные номенклатуры, только хранящиеся в разных базах и имеющих разные наименования. В случае, если сопоставление не найдено - отказ в выгрузке всего документа.

Все передаваемые объекты, содержащие в себе поле Номенклатура, должны выгружаться через регистр сопоставлений.

Регистр хранится в базе Источнике.


Решение:

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

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

 
Код:

Правила обмена почти готовы. Теперь необходимо установить галку для Свойства "Получить из входящих данных" для табличной части Товары.


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


Связана эта ситуация с тем, что свойство ЕдиницаИзмерения привязана к номенклатуре-владельцу. Следовательно, нужно передать из ПКС единиц измерения номенклатуру-владельца в ПКО ЕдиницыИзмерения.



Добавим в обработчик события Перед выгрузкой для ПКС ЕдиницаИзмерения следующий код:
 
Код:

То, что указываем в ПКС как ИсходящиеДанные, в ПКО будет уже ВходящиеДанные.

В ПКО ЕдиницыИзмерения установим Галку "Получить из входящих данных" для Поля "Владелец".

Также не забудем дописать в ПКО ПриобретениеТоваровУслуг строку кода для выгрузки единиц измерений в ТЧ

 
 Исправленный код ПКО ПриобретениеТоваровУслуг для Единиц измерения

Как видим на рисунке ниже, табличная часть выгрузилась и загрузилась корректно.


Послесловие

Исходящие и Входящие данные — неотъемлемый функционал КД2. Без него невозможно представить сложных обменов. К сожалению, на Инфостарте я не нашел статьи, в которой бы разбирались эти моменты, потому решил написать самостоятельно.

Для ситуации, если регистр сопоставления расположен в базе-приемнике, а не источнике, рекомендую прочесть эту статью.

Правила обмена разрабатывались в системе Конвертация данных, редакция 2.1 (2.1.8.2) для конфигураций 1С:ERP Управление предприятием 2 (2.4.10.62) и Управление производственным предприятием, редакция 1.3 (1.3.86.3). Справочник НоменклатураУПП и регистр сведений СопоставлениеНоменклатурыУППERP являются самостоятельно добавленными объектами и отсутствуют в типовой версии 1С:ERP Управление предприятием 2.

UPD.

За два с лишним месяца, прошедших с написания статьи, правила обмена были переосмыслены и переписаны с нуля несколько раз. Во многом благодаря комментариям к посту.

Внесенные изменения и оптимизации:

1) Общая оптимизация (не нужно выгружать результат запроса в таблицу значений, обращаться через точку к переменным ссылочного типа и проч.);

2) В случаях, когда входящих и исходящих данных может быть несколько, либо вы дорабатываете уже существующие правила, неплохо бы делать такую вот проверку:

 
Проверка:

Чтобы случайно не "обнулить" уже существующие данные в переменной.

3) Реализована подмена номенклатуры на сопоставленную на уровне запроса, а не его пост-обработкой в таблице значений;

4) "Сообщить()" везде заменено на "ОбщегоНазначения.СообщитьПользователю()";

5) Реализовано разделение табличной части Товары на две табличных части Товары и Услуги в зависимости от типа номенклатуры. (т.к. в УПП две табличных части, а не одна).

 
Отредактированный пример кода:





Читайте также:

В марте 2021 года фирма «1С» опубликовала очередной релиз решения «1С:ERP Управление предприятием» 2.5.7, в который внесла ряд концептуальных изменений. Основные доработки коснулись функциональности по резервированию товарных запасов. Также получили развитие функциональность ремонтов, учет ТМЦ в эксплуатации при применении ФСБУ 5, учет дополнительных расходов по товарам и другие блоки. В нашей статье мы расскажем об основных новациях данного релиза.

Остались вопросы?

ФИО*
E-mail*
Телефон*
Введите ваш вопрос
Наверх