Как удалить организацию в 1С:Бухгалтерии при обнаружении неразрешимых и циклических ссылок?

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

В процессе сопровождения и администрирования информационных баз 1С:Бухгалтерия предприятия (БП) технические специалисты часто сталкиваются с необходимостью «зачистки» или оптимизации конфигурации. Типичный сценарий: перевод базы данных с устаревшей редакции 2.0 на актуальную 3.0, проведение свертки базы данных, закрытие и последующее удаление неактивных юридических лиц. Попытка выполнить стандартное удаление помеченных объектов в таких случаях нередко оборачивается ошибками ссылочной целостности.

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

Проблема №1: Циклическая связь «Организация — Регистрация в налоговом органе»

При попытке интерактивного удаления организации стандартная обработка часто сообщает, что удаление невозможно, поскольку на организацию ссылается элемент справочника РегистрацииВНалоговыхОрганах, а сам этот элемент, в свою очередь, зафиксирован в реквизитах карточки организации. Образуется так называемая «мертвая петля» (циклическая ссылка).

Проанализируем ситуацию и выполним пошаговый алгоритм для разрыва этой связи:

  1. Временная отмена пометки на удаление. Перейдем в список организаций и временно снимем пометку на удаление с целевого учреждения. Если объект помечен на удаление, платформа блокирует редактирование его реквизитов через стандартные формы, что не позволит нам очистить связи вручную.
  2. Очистка основных реквизитов ИФНС. Откроем карточку нашей организации. Найдем поле, отвечающее за налоговую инспекцию (обычно это «Код инспекции» или «Регистрация»). Очистим это поле (нажмем на крестик или клавишу Del) и запишем карточку организации.
  3. Удаление записей из истории регистрации. Перейдем по ссылке «История», расположенной рядом с реквизитами регистрации в налоговом органе. В открывшейся форме истории изменений выделим все имеющиеся записи, нажмем правую кнопку мыши и выберем команду «Удалить». После этого повторно запишем изменения в карточке организации.
  4. Проверка даты запрета изменения данных. Записи о регистрациях в налоговых органах часто имеют исторические даты начала действия (например, 01.01.1900). Если в вашей информационной базе включена дата запрета редактирования данных, система заблокирует перезапись или удаление этих элементов. Нам необходимо временно отключить этот механизм. Перейдем в раздел Администрирование — Настройки пользователей и прав — Дата запрета изменения и снимем флаг активности или сдвинем дату глубоко в прошлое.
  5. Удаление подчиненных элементов ИФНС. В верхней навигационной панели карточки организации перейдем по гиперссылке «Регистрации в налоговых органах». В открывшемся списке найдем записи, которые ранее были привязаны к нашей организации, выделим их и пометим на удаление через контекстное меню.
  6. Повторный запуск удаления. Снова установим пометку на удаление на саму организацию. Откроем обработку Администрирование — Обслуживание — Удаление помеченных объектов и запустим процедуру повторно. Теперь перекрестная связь разорвана, и карточка организации вместе со сведениями об ИФНС беспрепятственно удалится из базы данных.

Проблема №2: Неразрешимые ссылки вида «(не используется) Взаиморасчеты ред. 2.0»

При обновлении конфигураций с редакции 2.0 на 3.0 разработчики фирмы «1С» переносят данные в новые структуры метаданных. Старые таблицы при этом не удаляются мгновенно — они получают префикс «(не используется)» или «Удалить» и остаются в структуре базы данных до тех пор, пока полностью не прекратится их поддержка. Ссылки на удаляемые организации в таких неиспользуемых регистрах сведений или накопления часто становятся «фантомными»: стандартные отчеты их не видят, а напрямую открыть эти таблицы через пользовательский интерфейс невозможно.

Выясним причины и рассмотрим два основных способа решения этой проблемы.

Способ А: Использование типовой обработки «Групповое изменение реквизитов»

Этот способ оптимален, если не хочется прибегать к программированию. Воспользуемся встроенным универсальным инструментом:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В открывшемся окне нажмем кнопку «Дополнительные параметры». В группе настроек для разработчиков установим флажок «Показывать служебные реквизиты». Это критически важно, так как без этой опции система скроет устаревшие регистры и справочники из списка выбора.
  3. В поле «Выбирать элементы объекта» найдем и выберем наш проблемный регистр, например, (не используется) Взаиморасчеты ред. 2.0.
  4. Настроим отбор по удаляемой организации (поле Организация должно быть равно нашему объекту).
  5. В табличной части изменения реквизитов найдем поле Организация и укажем для него пустое значение либо значение другой (действующей) организации-преемника. Нажмем кнопку «Изменить реквизиты».

Способ Б: Написание внешней обработки очистки записей регистра

Если записей слишком много или групповое изменение не справляется из-за специфики метаданных, мы можем написать простую внешнюю обработку (или выполнить код во встроенной консоли кода), которая принудительно перезапишет набор записей независимого регистра сведений с пустым отбором по удаляемой организации.

Рассмотрим пример кода на встроенном языке 1С:


// Создаем объект набора записей для проблемного служебного регистра
НаборЗаписей = РегистрыСведений["УдалитьВзаиморасчетыРед20"].СоздатьНаборЗаписей();

// Устанавливаем жесткий отбор по нашей удаляемой организации
НаборЗаписей.Отбор.Организация.Установить(СсылкаНаУдаляемуюОрганизацию);

// Записываем пустой набор, тем самым полностью очищая движения по этой организации
НаборЗаписей.Записать(Истина);

Этот код мгновенно удаляет все записи в выбранном регистре сведений, привязанные к конкретной организации, полностью освобождая ссылки и позволяя выполнить корректную очистку информационной базы.

Проблема №3: Ошибка «Объект не найден» (битые ссылки) в КУДиР при использовании РИБ

Иногда при удалении организаций и разделении баз данных с помощью механизма **РИБ (Распределенные информационные базы)** с отбором по организациям пользователи сталкиваются со скрытыми битыми ссылками. Например, при формировании Книги учета доходов и расходов (КУДиР) в периферийной базе появляется строка с документом-регистратором вида <Объект не найден> (уникальный идентификатор/GUID). Открыть этот документ физически невозможно.

Проанализируем причину: при синхронизации в подчиненный узел РИБ могут переноситься записи (движения) по регистрам накопления УСН (например, «Расходы при УСН»), в то время как сами документы-регистраторы (например, «Поступление на расчетный счет») не соответствуют правилам миграции и в периферийную базу не выгружаются. В итоге движения перенеслись, а сам документ отсутствует.

Рассмотрим методы исправления данной ситуации:

Метод 1: Использование тестирования и исправления (ТИИ)

Перед началом процедуры обязательно создадим резервную копию базы данных!

  1. Запустим информационную базу в режиме Конфигуратора.
  2. Перейдем в меню Администрирование — Тестирование и исправление....
  3. В списке проверок выберем пункт «Проверка ссылочной целостности информационной базы».
  4. В блоке настройки обработки битых ссылок установим переключатель: «При наличии битых ссылок: Очищать ссылки» (или «Удалять объекты», если это записи регистров движений). Нажмем кнопку «Выполнить». Система найдет все записи, ссылающиеся на несуществующие идентификаторы документов, и корректно очистит их, удалив пустые строки из КУДиР.

Метод 2: Программное воссоздание объекта-пустышки по GUID

Если автоматическая очистка нежелательна и вам требуется сохранить структуру движений, мы можем программно воссоздать «документ-заглушку» с тем уникальным идентификатором, который требует регистр КУДиР. Выполним этот процесс по шагам:

  1. Скопируем уникальный идентификатор (GUID) из ошибки. Он имеет стандартный вид: 84:bf5600145e3710ab11dda4c605dbe824. Обратите внимание, что его нужно привести к каноническому формату (через дефисы): 5e3710ab-11dd-a4c6-05db-e82484bf5600 (в зависимости от порядка байт).
  2. Используя специализированную обработку воссоздания объектов по GUID, создадим в базе пустой документ нужного типа с этим идентификатором.
  3. Ниже приведен пример программного кода, который решает эту задачу:

// Задаем строковое представление GUID, полученное из битой ссылки
СтрокаGUID = "5e3710ab-11dd-a4c6-05db-e82484bf5600";
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);

// Создаем ссылку на документ нужного типа с исходным идентификатором
ДокументСсылка = Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(НовыйGUID);

// Проверяем, действительно ли объекта нет в базе данных
Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
    // Создаем новый документ и принудительно назначаем ему этот GUID
    НовыйДокумент = Документы.ПоступлениеНаРасчетныйСчет.СоздатьДокумент();
    НовыйДокумент.УстановитьСсылкуНового(ДокументСсылка);
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "ВашИНН");
    НовыйДокумент.Записать();
    
    Сообщить("Документ-пустышка успешно воссоздан с исходным GUID!");
КонецЕсли;

После воссоздания документа-заглушки битая ссылка исчезнет, и вместо текста <Объект не найден> отобразится реальный пустой документ. Теперь этот документ можно пометить на удаление и стандартным образом удалить из информационной базы вместе со всеми зависимыми движениями по регистрам накопления УСН.

Резюме

Очистка базы данных от неиспользуемых организаций — кропотливый процесс, требующий понимания внутренней структуры метаданных конфигурации 1С. Мы рассмотрели основные практические приемы борьбы с неразрешимыми ссылками. Помните, что регулярное проведение операции Тестирования и исправления, грамотное использование инструмента «Групповое изменение реквизитов» и умение вовремя применить программные инструменты очистки позволяют содержать базу данных 1С в идеальном техническом состоянии.

← На главную