Работа с обработкой «Поиск и удаление дублей» требует предельной осторожности. Типичная ситуация: в базе накопилось несколько договоров с названием «Основной договор» для одного контрагента, и пользователь решает навести порядок. Однако при неправильной настройке фильтров программа может объединить договоры, принадлежащие совершенно разным юридическим лицам. В результате документы Контрагента «А» внезапно начинают ссылаться на договор Контрагента «Б», а «родной» договор Контрагента «А» исчезает из справочника. Разберем подробно, почему это происходит и как восстановить учет без потери данных.
Проанализируем техническую сторону вопроса. Справочник ДоговорыКонтрагентов является подчиненным справочнику Контрагенты. Это означает, что у каждого договора есть обязательный реквизит Владелец. Проблема заключается в том, что стандартная обработка по умолчанию ищет совпадения по наименованию. Если мы не укажем программе, что поиск должен вестись с учетом владельца, она воспримет все «Основные договоры» в базе как один и тот же объект, подлежащий объединению.
Когда вы нажимаете кнопку «Объединить», 1С выбирает один «эталонный» договор, а во всех остальных документах заменяет ссылки на него. После этого «лишние» договоры либо помечаются на удаление, либо удаляются физически. В итоге получается абсурдная ситуация: в ОСВ по одному контрагенту мы видим договор, владельцем которого является другой контрагент.
Часто пользователи сталкиваются с тем, что договор отображается в Оборотно-сальдовой ведомости, но его невозможно найти в карточке контрагента. Разберем, почему так происходит. При открытии списка договоров из карточки конкретного контрагента, система автоматически устанавливает фильтр по полю Владелец. Поскольку текущий договор в документах теперь «чужой», он просто не попадает в этот фильтр.
Чтобы найти такой договор, выполним следующие действия:
Договоры контрагентов.Это самый быстрый способ исправить ситуацию, если объектов много. Рассмотрим пошагово, как вернуть документы «правильному» владельцу:
Сначала создадим в карточке пострадавшего контрагента новый договор взамен удаленного. Теперь нам нужно массово заменить «чужой» договор на этот новый «правильный» во всех документах. Для этого:
Поступление (акты, накладные, УПД), Списание с расчетного счета).Контрагент (равно вашему контрагенту) и поле Договор (равно тому «чужому» договору, который подставился по ошибке).Договор выбираем только что созданный нами верный договор.Важный нюанс: Чтобы увидеть скрытые реквизиты в этой обработке, нажмите «Дополнительные параметры» и установите галочку «Показывать служебные реквизиты».
Если у вас есть доступ к внешним обработкам или инструментам разработчика, можно воспользоваться классической обработкой ПоискИЗаменаЗначений.epf. Она работает точечно:
Если договор был удален физически, и вместо него в документах вы видите надпись «Объект не найден» с длинным набором цифр (GUID), проанализируем возможность восстановления через штатные средства:
После завершения процедуры система создаст пустую карточку договора с тем же внутренним идентификатором. Вам останется только найти эту пустую карточку в справочнике и заполнить в ней наименование и правильного владельца. Ссылки в документах при этом восстановятся автоматически.
Если вы опытный пользователь или администратор, можно восстановить объект программно, зная его уникальный идентификатор из журнала регистрации. Посмотрим на пример кода, который создает объект с конкретным GUID:
// Пример восстановления договора по известному GUID
УникальныйИдентификатор = Новый УникальныйИдентификатор("здесь-ваш-guid-из-журнала-регистрации");
НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйДоговор.УстановитьСсылкуНового(Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(УникальныйИдентификатор));
НовыйДоговор.Наименование = "Восстановленный договор";
НовыйДоговор.Владелец = СсылкаНаНужногоКонтрагента;
НовыйДоговор.Записать();
Этот метод позволяет «вернуть из небытия» именно тот объект, на который продолжают ссылаться записи в регистрах, что исключает появление расхождений в учете.
После того как мы перепривязали договоры, обязательно нужно выполнить перепроведение документов. Проанализируем, почему это критично. В 1С данные хранятся не только в документах, но и в регистрах накопления (например, РасчетыСПоставщиками). Если просто заменить договор в шапке документа, движения по регистрам могут остаться «висеть» на старом объекте.
Рекомендуем следующий алгоритм проверки:
Чтобы в будущем обработка «Поиск и удаление дублей» не преподносила сюрпризов, при настройке поиска всегда добавляйте правило соответствия по владельцу. В окне настройки правил выберите поле Владелец и установите режим «Совпадает». В этом случае программа будет считать дублями только те договоры, которые принадлежат одному и тому же контрагенту, даже если у них одинаковые названия.