Синхронизация данных между конфигурациями «1С:Бухгалтерия предприятия 3.0» (БП) и «1С:Зарплата и управление персоналом 3.1» (ЗУП) — стандартный и автоматизированный процесс. Однако на практике системные администраторы и бухгалтеры часто сталкиваются с неприятной ситуацией: после очередного сеанса обмена часть физических лиц в информационной базе БП задваивается. Попытки исправить это «в лоб» через ручное удаление записей в регистрах или простое объединение дублей часто приводят к еще более тяжелым последствиям — появлению в документах битых ссылок с надписью «🚩 <Объект не найден...>».
В этой статье мы подробно разберем, почему возникает эта проблема, как устроена техническая модель синхронизации и сопоставления объектов, а также предоставим пошаговую инструкцию по безопасному устранению дублей и восстановлению корректного обмена данными.
Для того чтобы решить проблему раз и навсегда, проанализируем внутренние механизмы платформы «1С:Предприятие 8.3». Синхронизация данных в современных конфигурациях строится на базе технологии EnterpriseData (КД3). Сопоставление объектов происходит по определенному алгоритму:
СоответствияОбъектовИнформационныхБаз.Для справочника ФизическиеЛица ключевыми полями сопоставления являются: ФИО (Наименование), Дата рождения, ИНН и СНИЛС. Если хотя бы один из этих параметров различается или не заполнен в одной из баз, система считает этих людей разными физическими лицами и создает новый элемент в базе-приемнике. Рассмотрим основные технические причины, приводящие к этому сбою:
НаименованиеСлужебное. Этот служебный реквизит справочника физических лиц формируется платформой автоматически при записи элемента. При переносе данных из устаревших конфигураций (например, из «1С:ЗиК 7.7» в ЗУП 3.1) это поле иногда остается пустым. При последующей синхронизации механизмы поиска спотыкаются об этот незаполненный реквизит, из-за чего сопоставление дает сбой и создаются дубли.Рассмотрим типичную ошибку администратора базы данных. Обнаружив дубли, пользователь открывает обработку «Поиск и удаление дублей» в БП, заменяет ссылки на «правильное» физлицо, удаляет «неправильный» дубликат, а затем очищает регистр СоответствияОбъектовИнформационныхБаз в обеих базах, надеясь начать сопоставление с чистого листа.
В результате при следующем обмене документами (например, ведомостями на выплату зарплаты или отражением зарплаты в бухучете) из ЗУП передаются ссылки на физических лиц, содержащие старые GUID. БП пытается найти эти объекты по идентификаторам, не находит их в справочнике (так как дубликаты были физически удалены), не находит связей в регистре соответствия и выводит в проводках и документах битые ссылки 🚩 <Объект не найден...>. Чтобы этого не происходило, необходимо четко следовать правильной технологии исправления.
Выполним процедуру исправления последовательно. Перед началом любых массовых корректировок данных обязательно создайте резервные копии (выгрузки .dt) обеих баз данных (БП и ЗУП)!
Поскольку нам потребуется переписать ссылки на физических лиц в уже проведенных документах (возможно, за прошлые месяцы), в обеих базах необходимо временно отключить дату запрета изменения данных. Перейдите в раздел Администрирование — Настройки пользователей и прав — Даты запрета изменения и временно снимите флажок или сдвиньте дату назад.
Чтобы исключить проблему с незаполненными служебными полями, проанализируем справочник физических лиц. Рекомендуется принудительно перезаписать элементы справочника ФизическиеЛица в обеих базах. Это можно сделать с помощью группового изменения реквизитов или написав простую обработку. Рассмотрим пример кода на встроенном языке 1С для перезаписи объектов:
Выборка = Справочники.ФизическиеЛица.Выбрать();
Пока Выборка.Следующий() Цикл
Если НЕ Выборка.ЭтоГруппа Тогда
ОбъектФизЛицо = Выборка.ПолучитьОбъект();
Попытка
// Метод Записать() принудительно рассчитывает поля "НаименованиеСлужебное", "ФИО" и др.
ОбъектФизЛицо.Записать();
Исключение
Сообщить("Ошибка записи объекта " + Выборка.Ссылка + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
После выполнения данного кода скрытые служебные поля гарантированно заполнятся корректными значениями, что облегчит дальнейшее сопоставление.
Теперь перейдем к непосредственному схлопыванию дублей в базе БП 3.0:
После удаления дубликатов GUID удаленного физического лица в БП исчез. Но в ЗУП этот сотрудник все еще связан со старым (удаленным) идентификатором. Нам необходимо привязать верный GUID «оригинала» из БП к карточке физического лица в ЗУП. Сделаем это через регистр сведений СоответствияОбъектовИнформационныхБаз.
Выясним правильный GUID оригинального физлица в БП. Для этого можно воспользоваться любой консолью запросов или стандартной функцией получения навигационной ссылки:
e1cib/data/Справочник.ФизическиеЛица?ref=810c00155d04010111e1bf88f1ab212a.ref= — это и есть уникальный шестнадцатеричный идентификатор (GUID) объекта в БП.Соответствия объектов информационных баз.Если записей в регистре соответствий слишком много или вы хотите автоматизировать процесс, можно воспользоваться встроенным механизмом предупреждений при синхронизации:
Чтобы зафиксировать изменения и убедиться, что при следующем обмене базы не создадут новые дубли, выполним следующие действия:
Физические лица, нажмите правой кнопкой мыши и выберите «Зарегистрировать к отправке» (можно зарегистрировать конкретных измененных сотрудников).🚩 <Объект не найден...> и без появления новых дублирующихся строк.Для предотвращения подобных инцидентов в будущем рекомендуем внедрить несколько простых правил работы с базами данных:
Применяя описанную методику работы с регистрами соответствий и штатным инструментом слияния дублей, вы сможете быстро и без потерь восстановить целостность информационных баз 1С, сохранив все исторические проводки и исключив появление битых ссылок.