При настройке правил обмена в Конвертации данных 2.1 часто возникают ситуации, когда структуры баз-источника и приемника различаются. Одной из наиболее частых задач является принудительная установка фиксированного значения (например, типа склада или ставки НДС) в базе-приемнике, даже если в источнике такое поле отсутствует или содержит иные данные.
Рассмотрим случай, когда нам нужно передать значение перечисления или предопределенный элемент справочника. Самый надежный и простой способ сделать это — использовать обработчик «При выгрузке» в правиле конвертации свойств. Нам не нужно настраивать сложные правила конвертации для самих перечислений; достаточно передать строковое имя предопределенного значения.
Для реализации задачи присвоим переменной Значение строковое представление имени элемента. Механизм обмена 1С самостоятельно найдет нужный объект в базе-приемнике.
Разберем пример с установкой ставки НДС в зависимости от числового значения в базе-источнике:
Если Источник.СтавкаНДС = 20 Тогда
Значение = "НДС20_120";
ИначеЕсли Источник.СтавкаНДС = 10 Тогда
Значение = "НДС10_110";
Иначе
Значение = "НДС18_118";
КонецЕсли;
Важно помнить, что передаваемая строка должна в точности совпадать с именем (идентификатором) предопределенного элемента в конфигурации базы-приемника. Этот подход работает универсально для любых предопределенных данных.
При загрузке правил обмена или выполнении конвертации вы можете столкнуться с системной ошибкой, указывающей на метод НайтиПоКоду. Эта проблема обычно возникает из-за некорректных настроек в Правилах конвертации объектов (ПКО).
Разберем по шагам, как проанализировать и исправить эту ситуацию:
Код, но в базе-приемнике у этого объекта поиск по коду не предусмотрен или код не является уникальным, система выдаст ошибку.Код, если он не является критически важным для идентификации объекта. Замените его на Наименование или Уникальный идентификатор, если это применимо.Чтобы избежать подобных сложностей в будущем, придерживайтесь следующих правил:
1. Использование обработчиков: Не старайтесь перегрузить правило сложными конструкциями. Для простых задач (как в нашем примере с НДС) кода в событии При выгрузке более чем достаточно. Система 1С сама корректно интерпретирует строковое имя и подставит нужное значение.
2. Выбор полей поиска: Всегда проверяйте, что именно система использует для идентификации объекта в базе-приемнике. Использование поиска по Код оправдано только в том случае, если коды в обеих базах жестко синхронизированы и уникальны.
3. Предопределенные данные: Если вы создаете новые элементы в конвертации, убедитесь, что их синонимы или имена в базе-источнике соответствуют тому, что ожидает получить база-приемник. Если они не предопределенные, лучше использовать поиск по уникальному строковому реквизиту.
Проанализировав эти аспекты, вы сможете гибко настраивать обмены между любыми конфигурациями, даже если их структура данных сильно отличается. Применяя описанные методы в обработчиках При выгрузке, вы избавите себя от необходимости создавать лишние правила конвертации и упростите поддержку обменов в будущем.