Почему не удаляется номенклатура и выдаются ссылки на документы, в которых нет этого товара?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

При очистке справочников и выполнении стандартной процедуры Удаление помеченных объектов в 1С:ERP Управление предприятием администраторы и разработчики часто сталкиваются с ситуацией: система сообщает о наличии неразрывных ссылок в документах (например, в документе Заказ клиента), однако при открытии документа или даже при проверке его табличной части запросом удаляемый товар там полностью отсутствует.

Разберем детально, почему возникает такое поведение платформы, как устроен механизм поиска ссылок и как обнаружить скрытые зависимости.

Особенность работы платформы: почему ссылка указывает на документ, а не на регистр?

Главная причина видимого расхождения заключается в логике работы платформы 1С:Предприятие при проверке ссылочной целостности (встроенная функция НайтиПоСсылкам). Если ссылка на удаляемый элемент справочника Номенклатура находится внутри движений — в регистре накопления, регистре бухгалтерии или подчиненном регистре сведений — платформа возвращает в качестве места использования не саму строку или набор записей регистра, а документ-регистратор.

Поэтому стандартная обработка удаления объектов выводит список документов, даже если ссылка «зависла» исключительно в регистрах этих документов, а в табличной части самого объекта номенклатуры уже нет.

Основные причины появления скрытых ссылок в 1C:ERP

Проанализируем основные сценарии, из-за которых документ удерживает ссылку на товар:

  1. Рассинхронизация движений и табличной части: документ мог быть отредактирован программно без перезаписи движений, либо строки были удалены интерактивно в режиме, когда движения не переформировались (например, при отмене проведения или прямой записи объекта). В итоге в таблицах движений по складам, резервам или расчетам остался старый набор записей.
  2. Использование служебных ключей аналитики: в архитектуре ERP движения по учету затрат, себестоимости и складским запасам часто формируются не напрямую по номенклатуре, а через вспомогательные справочники (например, Ключи аналитики учета номенклатуры, Ключи аналитики заказов). Если ключ аналитики уже создан и хранит ссылку на товар, то документ, использующий этот ключ в движениях, будет блокировать удаление.
  3. Косвенные (транзитивные) связи: механизм удаления анализирует цепочки подчиненных объектов. Документ может ссылаться не на саму номенклатуру, а на ее подчиненные элементы:
    • характеристики номенклатуры (ХарактеристикиНоменклатуры);
    • индивидуальные упаковки и единицы измерения (УпаковкиЕдиницыИзмерения);
    • серии номенклатуры (СерииНоменклатуры);
    • присоединенные файлы и изображения.
  4. Дополнительные реквизиты и сведения: ссылка на номенклатуру может храниться в табличной части ДополнительныеРеквизиты самого документа или в регистре сведений Дополнительные сведения, где объектом является документ, а значением — номенклатура.

Пошаговая диагностика: как найти точное место использования ссылки

Для того чтобы точно выяснить, какой именно реквизит или регистр удерживает объект, воспользуемся программным вызовом метода НайтиПоСсылкам через консоль кода или внешнюю обработку. В отличие от типовой обработки удаления, данный метод в свойстве Данные возвращает описание метаданных, в которых найдено значение.

Рассмотрим пример кода для детального поиска мест использования:


МассивСсылок = Новый Массив;
МассивСсылок.Добавить(УдаляемаяНоменклатура);

ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);

Для Каждого Стр Из ТаблицаСсылок Цикл
    // Стр.Данные содержит имя метаданного (например, РегистрНакопления.ЗаказыКлиентов)
    // Стр.Ссылка содержит конкретный объект или регистратор
    Сообщить("Место использования: " + Строка(Стр.Данные) + " | Объект: " + Строка(Стр.Ссылка));
КонецЦикла;

Способы устранения ссылок и очистки базы

После того как характер ссылки определен, применим соответствующий способ очистки:

  1. Перепроведение или перезапись документа: если проблема вызвана старыми «хвостами» в регистрах, достаточно отменить проведение проблемного документа и провести его заново. Если документ не должен быть проведен — отмените проведение и перезапишите его, чтобы наборы записей очистились.
  2. Очистка зависимых справочников: перед удалением позиции номенклатуры обязательно пометьте на удаление все ее подчиненные элементы (характеристики, упаковки, штрихкоды, индивидуальные варианты комплектации).
  3. Очистка неиспользуемых ключей аналитики: если ссылка осталась в справочниках аналитики учета, необходимо найти неиспользуемые элементы справочника КлючиАналитикиУчетаНоменклатуры, ссылающиеся на удаляемую позицию, и пометить их на удаление вместе с номенклатурой.
← На главную