При переносе документов и справочников из одной конфигурации в другую часто возникает ситуация: в базе-приемнике уже существуют нужные объекты (например, документы реализации или элементы справочников), созданные вручную. Однако при переносе связанных документов (например, платежных поручений) обработка выгрузки не сопоставляет существующие объекты, а заводит дубликаты.
Рассмотрим, почему возникает эта проблема при автоматической генерации правил и как правильно настроить поиск объектов в конфигурации «Конвертация Данных 2.0».
Выясним причину такого поведения системы. Когда правила обмена создаются автоматически для двух одинаковых конфигураций, конфигурация «Конвертация Данных» по умолчанию устанавливает у всех элементов поиск по внутреннему идентификатору (УИД / GUID).
Если элемент справочника или документ был создан непосредственно вручную в базе-приемнике, у него формируется собственный уникальный идентификатор, отличающийся от аналогичного объекта в базе-источнике. В результате стандартный поиск по УИД возвращает ложь, и обработка загрузки создает новый документ-двойник.
Разберем по шагам, как настроить правила конвертации объектов (ПКО), чтобы система находила существующие элементы по их реквизитам (например, по комбинации даты, номера и организации):
ДокументСсылка.РеализацияТоваровУслуг).Дата, Номер и Организация.Важно: При автоматическом создании правил настройки поиска устанавливаются отдельно для каждого ПКО. Если платежное поручение ссылается на документ реализации, настройки сопоставления нужно задавать именно в ПКО для документа реализации, а не только в самом платежном поручении.
Проанализируем возможные нюансы, которые могут помешать успешному поиску даже при включенных галочках поиска:
Дата сравнивает значение с точностью до секунды. Если документ в источнике создан в 10:00:00, а в приемнике вручную — в 14:30:00, поиск по дате не сработает. Чтобы обойти это, при выгрузке даты можно приводить ее к началу дня с помощью функции НачалоДня().Поля поиска.Если стандартного поиска по реквизитам недостаточно или требуется сложная логика сопоставления, воспользуемся обработчиком событий «Поля поиска» в ПКО.
Код в этом обработчике выполняется уже на стороне базы-приемника. Поэтому обращаться к метаданным и менеджеру объектов следует напрямую, без каких-либо дополнительных префиксов вроде Приемник.:
// Пример программного доиска документа в обработчике "Поля поиска"
Если СвойстваПоиска["Номер"] <> Неопределено Тогда
// Удаляем префиксы или модифицируем номер при необходимости
ОчищенныйНомер = СокрЛП(СвойстваПоиска["Номер"]);
// Выполняем поиск по базе-приемнику
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТекДок.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК ТекДок
|ГДЕ
| ТекДок.Номер ПОДОБНО %Номер";
Запрос.УстановитьПараметр("Номер", "%" + ОчищенныйНомер);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
// Заполняем результирующую ссылку
СсылкаНаОбъект = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
Если переменная СсылкаНаОбъект заполнена в обработчике, КД 2.0 прекращает стандартный поиск и сразу подставляет найденный объект в загружаемый документ, что предотвратит создание дубликата.