В процессе сопровождения и администрирования информационных баз 1С:Бухгалтерия предприятия (БП) технические специалисты часто сталкиваются с необходимостью «зачистки» или оптимизации конфигурации. Типичный сценарий: перевод базы данных с устаревшей редакции 2.0 на актуальную 3.0, проведение свертки базы данных, закрытие и последующее удаление неактивных юридических лиц. Попытка выполнить стандартное удаление помеченных объектов в таких случаях нередко оборачивается ошибками ссылочной целостности.
Программа выдает сообщения о наличии неразрешимых связей, которые ведут либо на скрытые служебные регистры, оставшиеся после перехода между редакциями, либо образуют циклическую зависимость (например, между карточкой организации и ее регистрацией в налоговом органе). В рамках этой статьи мы подробно разберем, как решать эти проблемы системно, используя встроенные инструменты платформы 1С:Предприятие 8.3 и программные методы очистки.
При попытке интерактивного удаления организации стандартная обработка часто сообщает, что удаление невозможно, поскольку на организацию ссылается элемент справочника РегистрацииВНалоговыхОрганах, а сам этот элемент, в свою очередь, зафиксирован в реквизитах карточки организации. Образуется так называемая «мертвая петля» (циклическая ссылка).
Проанализируем ситуацию и выполним пошаговый алгоритм для разрыва этой связи:
При обновлении конфигураций с редакции 2.0 на 3.0 разработчики фирмы «1С» переносят данные в новые структуры метаданных. Старые таблицы при этом не удаляются мгновенно — они получают префикс «(не используется)» или «Удалить» и остаются в структуре базы данных до тех пор, пока полностью не прекратится их поддержка. Ссылки на удаляемые организации в таких неиспользуемых регистрах сведений или накопления часто становятся «фантомными»: стандартные отчеты их не видят, а напрямую открыть эти таблицы через пользовательский интерфейс невозможно.
Выясним причины и рассмотрим два основных способа решения этой проблемы.
Этот способ оптимален, если не хочется прибегать к программированию. Воспользуемся встроенным универсальным инструментом:
(не используется) Взаиморасчеты ред. 2.0.Организация должно быть равно нашему объекту).Организация и укажем для него пустое значение либо значение другой (действующей) организации-преемника. Нажмем кнопку «Изменить реквизиты».Если записей слишком много или групповое изменение не справляется из-за специфики метаданных, мы можем написать простую внешнюю обработку (или выполнить код во встроенной консоли кода), которая принудительно перезапишет набор записей независимого регистра сведений с пустым отбором по удаляемой организации.
Рассмотрим пример кода на встроенном языке 1С:
// Создаем объект набора записей для проблемного служебного регистра
НаборЗаписей = РегистрыСведений["УдалитьВзаиморасчетыРед20"].СоздатьНаборЗаписей();
// Устанавливаем жесткий отбор по нашей удаляемой организации
НаборЗаписей.Отбор.Организация.Установить(СсылкаНаУдаляемуюОрганизацию);
// Записываем пустой набор, тем самым полностью очищая движения по этой организации
НаборЗаписей.Записать(Истина);
Этот код мгновенно удаляет все записи в выбранном регистре сведений, привязанные к конкретной организации, полностью освобождая ссылки и позволяя выполнить корректную очистку информационной базы.
Иногда при удалении организаций и разделении баз данных с помощью механизма **РИБ (Распределенные информационные базы)** с отбором по организациям пользователи сталкиваются со скрытыми битыми ссылками. Например, при формировании Книги учета доходов и расходов (КУДиР) в периферийной базе появляется строка с документом-регистратором вида <Объект не найден> (уникальный идентификатор/GUID). Открыть этот документ физически невозможно.
Проанализируем причину: при синхронизации в подчиненный узел РИБ могут переноситься записи (движения) по регистрам накопления УСН (например, «Расходы при УСН»), в то время как сами документы-регистраторы (например, «Поступление на расчетный счет») не соответствуют правилам миграции и в периферийную базу не выгружаются. В итоге движения перенеслись, а сам документ отсутствует.
Рассмотрим методы исправления данной ситуации:
Перед началом процедуры обязательно создадим резервную копию базы данных!
Если автоматическая очистка нежелательна и вам требуется сохранить структуру движений, мы можем программно воссоздать «документ-заглушку» с тем уникальным идентификатором, который требует регистр КУДиР. Выполним этот процесс по шагам:
84:bf5600145e3710ab11dda4c605dbe824. Обратите внимание, что его нужно привести к каноническому формату (через дефисы): 5e3710ab-11dd-a4c6-05db-e82484bf5600 (в зависимости от порядка байт).
// Задаем строковое представление GUID, полученное из битой ссылки
СтрокаGUID = "5e3710ab-11dd-a4c6-05db-e82484bf5600";
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
// Создаем ссылку на документ нужного типа с исходным идентификатором
ДокументСсылка = Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(НовыйGUID);
// Проверяем, действительно ли объекта нет в базе данных
Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
// Создаем новый документ и принудительно назначаем ему этот GUID
НовыйДокумент = Документы.ПоступлениеНаРасчетныйСчет.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(ДокументСсылка);
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "ВашИНН");
НовыйДокумент.Записать();
Сообщить("Документ-пустышка успешно воссоздан с исходным GUID!");
КонецЕсли;
После воссоздания документа-заглушки битая ссылка исчезнет, и вместо текста <Объект не найден> отобразится реальный пустой документ. Теперь этот документ можно пометить на удаление и стандартным образом удалить из информационной базы вместе со всеми зависимыми движениями по регистрам накопления УСН.
Очистка базы данных от неиспользуемых организаций — кропотливый процесс, требующий понимания внутренней структуры метаданных конфигурации 1С. Мы рассмотрели основные практические приемы борьбы с неразрешимыми ссылками. Помните, что регулярное проведение операции Тестирования и исправления, грамотное использование инструмента «Групповое изменение реквизитов» и умение вовремя применить программные инструменты очистки позволяют содержать базу данных 1С в идеальном техническом состоянии.