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