Как в Конвертации данных 2.0 настроить поиск валюты по коду и избежать задвоения?

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

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

Причины появления дублей валют при синхронизации

Проанализируем механику работы правил обмена. По умолчанию в правилах конвертации объектов (ПКО) часто включен поиск по внутреннему идентификатору (UUID). Если справочник Валюты в базе-источнике и базе-приемнике создавался независимо (вводился вручную или загружался из Общероссийского классификатора валют), их уникальные идентификаторы в информационных базах гарантированно различаются. В этом случае поиск по GUID завершается неудачей, и платформа создает новый элемент.

Кроме того, если синхронизация выполняется через Библиотеку стандартных подсистем (БСП), созданная связь однажды записывается в регистр сведений СоответствияОбъектовИнформационныхБаз. Даже при корректировке правил база будет продолжать подставлять неверный элемент до тех пор, пока запись в регистре не будет очищена.

Также важно помнить о расхождении классификации рублей: в одной конфигурации может использоваться исторический код 810 (RUR), а в другой — актуальный код 643 (RUB), либо реквизит Код может содержать незначащие пробелы и различную длину строки.

Настройка идентификации по коду в правиле конвертации объектов (ПКО)

Рассмотрим стандартный способ исправления идентификации непосредственно в конфигурации «Конвертация данных 2.0»:

  1. Откроем правила обмена и перейдем на вкладку Правила конвертации объектов.
  2. Найдем правило для справочника Валюты и откроем его форму редактирования.
  3. На основной вкладке параметров ПКО снимем флажок Искать объект по внутреннему идентификатору. Если этот флаг активен, платформа всегда в первую очередь пытается сопоставить объекты по их GUID.
  4. Перейдем к табличной части Правила конвертации свойств (ПКС) для данного объекта.
  5. Найдем строку со свойством Код и установим в колонке Поиск соответствующий флажок.
  6. Если справочник является иерархическим, также рекомендуется отметить флажком поиска свойство ЭтоГруппа, чтобы исключить попытки сопоставить группу с элементом.
  7. Сохраним настройки правила и заново выгрузим файл правил конвертации.

Использование обработчика событий «ПоляПоиска»

Если коды валют в базах различаются (например, 810 и 643) или стандартный поиск по полному совпадению строки не срабатывает, настроим гибкий программный поиск. Разберем реализацию в обработчике события ПоляПоиска правила конвертации справочника Валюты.

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


ИскомыйКод = СокрЛП(СвойстваПоиска["Код"]);
НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду(ИскомыйКод);

Если Не ЗначениеЗаполнено(НайденнаяВалюта) Тогда
    // Обработка несовпадения кодов 643 и 810 для рублей
    Если ИскомыйКод = "643" Тогда
        НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду("810");
    ИначеЕсли ИскомыйКод = "810" Тогда
        НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду("643");
    КонецЕсли;
КонецЕсли;

Если ЗначениеЗаполнено(НайденнаяВалюта) Тогда
    СсылкаНаОбъект = НайденнаяВалюта;
    ПрекратитьПоиск = Истина;
КонецЕсли;

Такой подход гарантирует сопоставление элементов независимо от различий в кодировках классификатора между базами источника и приемника.

Альтернативный вариант: подстановка валюты регламентированного учета

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

Значение = Константы.ВалютаРегламентированногоУчета.Получить();

Обязательные действия в базах после изменения правил

После того как правила исправлены и загружены в информационные базы, выполним заключительные действия для очистки уже возникших ошибок:

  1. Очистим регистр соответствий: откроем через функции для технического специалиста регистр сведений СоответствияОбъектовИнформационныхБаз в базе-приемнике. Найдем записи, где в качестве приемника указана дублирующая валюта, и удалим их, чтобы снять жесткую привязку по идентификатору.
  2. Объединим дубликаты: воспользуемся типовой обработкой Поиск и удаление дублей. Выберем справочник Валюты, укажем правильный исходный рубль в качестве эталона и выполним замену ссылок во всех документах и регистрах с последующим удалением созданного дубля.
← На главную