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