Как заменить одну номенклатуру на другую при обмене данными в «Конвертации данных 2.0»?

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

При настройке обменов между базами 1С с помощью Конвертации данных 2.0 часто возникает задача сопоставления объектов, которые имеют разные идентификаторы в базе-источнике и базе-приемнике. В частности, это касается номенклатуры: когда нужно «подменить» одну позицию на другую, существующую в целевой базе, при этом корректно связав их во всех документах и справочниках, где эта номенклатура встречается.

Разберем детально, какими способами можно реализовать такую замену, избегая необходимости переписывать логику выгрузки для каждого отдельного документа.

Способ №1: Настройка полей поиска в ПКО

Это наиболее «чистый» с точки зрения архитектуры способ. Вместо того чтобы пытаться подменить объект после его загрузки, мы должны научить систему находить нужный объект в приемнике по специфическим критериям.

  1. Откройте Правила конвертации объектов (ПКО) для Справочник.Номенклатура.
  2. Перейдите в обработчик Поля поиска.
  3. В этом обработчике программно укажите параметры, по которым 1С должна искать соответствие. Например, вы можете искать номенклатуру по Артикул или Код, которые заранее согласованы между базами.

Важно: обязательно убедитесь, что в настройках ПКО установлены флаги Искать по полям поиска и Не создавать новый, если не найден. Это позволит системе принудительно «подцепить» существующую в приемнике номенклатуру, а не создавать новую с похожими данными.

Способ №2: Подмена данных на этапе выгрузки

Если поиск по реквизитам не подходит, мы можем вмешаться в процесс формирования данных до того, как они попадут в XML-файл. Рассмотрим реализацию через параметры конвертации.

  1. В обработчике Перед загрузкой правил обмена или Перед началом выгрузки создайте структуру соответствий, где ключом будет ссылка из источника, а значением — ссылка из приемника (или код/артикул).
  2. В Правилах конвертации свойств (ПКС) для номенклатуры в обработчике Перед выгрузкой используйте этот список соответствий для подмены значения.

Пример программной реализации:


// В обработчике Перед началом выгрузки
Параметры.Вставить(\"ТаблицаЗамен\", Новый Соответствие);
Параметры.ТаблицаЗамен.Вставить(ИсточникДляЗамены, НоменклатураПриемник);

// В ПКС перед выгрузкой свойства
Если Параметры.ТаблицаЗамен.Свойство(Источник.Номенклатура, Замена) Тогда
    ИсходящиеДанные = Замена;
КонецЕсли;

Способ №3: Подмена через идентификаторы (GUID)

Этот метод считается более радикальным, но эффективным при массовых заменах. Суть заключается в том, чтобы передать при выгрузке не ссылку на «старую» номенклатуру, а УникальныйИдентификатор той номенклатуры, которую мы хотим видеть в приемнике.

Однако будьте осторожны: если вы подменяете GUID, убедитесь, что в базе-приемнике этот идентификатор действительно принадлежит нужному объекту. Также помните, что при использовании этого метода может потребоваться отключение Быстрого поиска (по УникальныйИдентификатор) в ПКО, если он препятствует нормальной работе алгоритмов поиска.

Важные замечания и рекомендации

При выполнении подмены номенклатуры не забывайте о следующих моментах:

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

← На главную