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