При настройке правил обмена в конфигурации Конвертация данных (ред. 2.1) часто возникает необходимость сопоставить реквизит типа СправочникСсылка из конфигурации-источника с реквизитом типа ПеречислениеСсылка в конфигурации-приемнике. Например, в документе поступления товаров ставка НДС в источнике хранится в справочнике, а в приемнике — в перечислении.
Стандартный механизм Правил конвертации значений (ПКЗ) рассчитан на сопоставление предопределенных элементов справочников или значений перечислений. Если у справочника нет предопределенных элементов, сопоставить их через стандартную таблицу значений не удастся. Рассмотрим подробно, как решить эту задачу разными способами.
Если создать отдельное Правило конвертации объектов (ПКО) для справочника и выгрузить его по умолчанию, платформа попытается выгрузить структуру справочника (ссылку, код, наименование) в XML-файл обмена. При загрузке в реквизит документа приемника, ожидающий ссылку на перечисление, возникнет ошибка типа данных.
Проанализируем три практических способа корректного преобразования справочника в перечисление.
Это наиболее чистый и рекомендуемый подход, не требующий создания лишних правил конвертации объектов.
СтавкаНДС).Значение имя значения перечисления базы-приемника:
Если Источник.СтавкаНДС.Наименование = "10%" Тогда
Значение = "НДС10";
ИначеЕсли Источник.СтавкаНДС.Наименование = "18%" Тогда
Значение = "НДС18";
КонецЕсли;
Также можно использовать переменную Выражение, указав код, который выполнится в базе-приемнике при загрузке:
Если Источник.СтавкаНДС.Наименование = "10%" Тогда
Выражение = "Перечисления.СтавкиНДС.НДС10";
ИначеЕсли Источник.СтавкаНДС.Наименование = "18%" Тогда
Выражение = "Перечисления.СтавкиНДС.НДС18";
КонецЕсли;
Рассмотрим вариант с созданием отдельного ПКО для справочника, если выгрузку необходимо переопределить на уровне самого правила объекта.
СтавкиНДС).
Приемник = Источник;
Если Источник.Наименование = "10%" Тогда
УзелСсылки = "НДС10";
ИначеЕсли Источник.Наименование = "18%" Тогда
УзелСсылки = "НДС18";
КонецЕсли;
Отказ = ИСТИНА;
Благодаря этому вместо структуры справочника в XML запишется только текстовый идентификатор перечисления, а переменная Отказ = ИСТИНА предотвратит выгрузку ненужных реквизитов.
Посмотрим на ещё один способ, при котором в файл передается строковое значение, а поиск перечисления происходит в базе-приемнике.
Значение = Перечисления.СтавкиНДС[Значение];
Этот вариант подходит в случаях, когда имя значения перечисления в приемнике совпадает со строковым представлением элемента справочника в источнике.