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