При проведении процедур регламентного обслуживания информационных баз 1С в режиме «Тестирование и исправление» (ТиИ) специалисты часто сталкиваются с сообщениями о нарушении ссылочной целостности. К наиболее распространенным относятся ошибки вида «Неверная ссылка на владельца», «Объект, на который ссылается значение, отсутствует» или «Неверная ссылка на регистратор».
Рассмотрем подробнее причины возникновения подобных сбоев, разберем по шагам алгоритмы их устранения и выясним, как правильно поступать с объектами, оставшимися без владельцев или корректных ссылок.
Проанализируем ситуацию и выясним, из-за чего в информационной базе образуются «битые» ссылки:
Удалить() вместо пометки на удаление с контролем ссылок. Если из базы физически удаляется организация или контрагент, подчинённые им элементы (договоры, банковские счета) становятся «сиротами» с недействительными ссылками.1Cv8.1CD приводят к повреждению таблиц.Перед тем как запускать процедуру исправления в 1С, выполним обязательные подготовительные действия:
.dt или скопируем файл 1Cv8.1CD (в файловом режиме). Все действия выполняем исключительно в монопольном режиме.%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.chdbfl.exe: для файловых баз запустим утилиту тестирования из папки bin платформы 1С. Это позволит исправить физические повреждения таблиц до запуска ТиИ.В конфигураторе 1С перейдем в меню Администрирование — Тестирование и исправление. Для обработки несуществующих ссылок платформой предусмотрены два основных режима:
[Объект не найден (GUID)]. Этот вариант полезен, если битые ссылки находятся в важных первичных документах и требуется восстановить аналитику с помощью обработки «Поиск и замена дублей».Если в базе ранее производилось удаление ненужных организаций или контрагентов, выбор режима «Удалять объекты / очищать ссылки» позволяет автоматически устранить ошибки в документах (например, СписаниеСРасчетногоСчета) и регистрах сведений (АрхивДанныхРегламентированнойОтчетности, НДФЛПрименениеВычетов и др.).
Разберем ситуацию, когда после завершения ТиИ повторное тестирование показывает ошибку вида: Справочник.ДоговорыКонтрагентов Основной договор. Не определен владелец.
Ограничение платформы: если у подчинённого элемента реквизит Владелец пуст (содержит значение ПустаяСсылка, а не несуществующий GUID), алгоритм ТиИ считает такой элемент технически корректным и не удаляет его автоматически. Определение владельцев для таких справочников выполним вручную или программно.
Для устранения ошибки выполним следующие действия:
Договоры контрагентов и установим отбор по условию: Владелец Не Заполнено.Для программной пометки на удаление договоров без владельцев используем следующий код:
Выборка = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока Выборка.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(Выборка.Владелец) Тогда
ДоговорОбъект = Выборка.ПолучитьОбъект();
ДоговорОбъект.УстановитьПометкуУдаления(Истина);
КонецЕсли;
КонецЦикл;
Записи в независимых регистрах сведений, оставшиеся от удаленных организаций, удалим программно путем создания и записи пустого набора записей с установленным отбором:
Набор = РегистрыСведений.НДФЛПрименениеВычетов.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(УдаленнаяОрганизация);
Набор.Прочитать();
Набор.Очистить();
Набор.Записать();
Последовательное выполнение тестирования в режиме очистки ссылок и последующая обработка элементов с незаполненными владельцами позволяет полностью вернуть информационную базу в корректное рабочее состояние.