Как исправить ошибку «Найдена циклическая ссылка» при обновлении БГУ 2.0?

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

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

Разберем техническую причину возникновения ошибки

Прежде всего, выясним причину. Начиная с версии 8.3.17, разработчики платформы 1С внедрили строгий механизм контроля целостности данных в оперативной памяти. Теперь платформа автоматически отслеживает наличие «петель» в таких структурах, как Массив, Структура, ТаблицаЗначений и Соответствие. Если один элемент коллекции (напрямую или через цепочку других объектов) ссылается сам на себя, возникает циклическая ссылка.

В контексте БГУ 2.0 ошибка чаще всего проявляется в общем модуле УправлениеДоступомСлужебный в процедуре ДобавитьВложение. Проблема кроется в механизмах Библиотеки стандартных подсистем (БСП), которая отвечает за расчет прав доступа. Если в справочниках пользователей, групп доступа или иерархии подразделений допущена логическая ошибка (например, группа «А» входит в группу «Б», а группа «Б» — в группу «А»), система при попытке обхода дерева прав попадает в бесконечный цикл. Ранее платформа могла игнорировать такие ситуации, что приводило к утечкам памяти, но теперь она принудительно прерывает выполнение операции для защиты ресурсов сервера.

Способ 1: Временное отключение проверки в файле conf.cfg

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

  1. Перейдем в каталог установки платформы на сервере (или на локальном ПК, если обновление выполняется в файловом варианте). Обычно это путь: C:\Program Files\1cv8\conf.
  2. Найдем файл с именем conf.cfg. Если его нет, создадим текстовый файл с таким названием.
  3. Откроем файл в текстовом редакторе (например, Блокнот) от имени администратора.
  4. Добавим в файл следующую строку: IgnoreCyclicReferences=1
  5. Сохраним изменения и обязательно перезапустим службу Агент сервера 1С:Предприятия (или просто перезагрузим программу в файловом режиме).

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

Способ 2: Очистка и обновление данных доступа

Поскольку ошибка локализована в модуле управления доступом, проанализируем состояние регистров, отвечающих за права. Часто «Тестирование и исправление» не находит ошибок, так как логическая целостность структуры прав проверяется только при их расчете.

Выполним следующие действия в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции.
  2. Найдем и запустим регламентное задание «Обновление прав доступа». Если оно завершается с ошибкой, значит, в данных точно есть «петля».
  3. Попробуем выполнить очистку данных в регистрах:
    • НаборыЗначенийДоступа
    • ТаблицыГруппДоступа
  4. Для этого можно использовать обработку «Групповое изменение реквизитов» или специализированные инструменты из состава БСП для управления доступом. После очистки система будет вынуждена пересчитать права заново, что часто устраняет ошибочные ссылки, созданные в старых релизах.

Способ 3: Использование патчей и обновление конфигурации

Разберем ситуацию с точки зрения кода. В релизах БГУ, начиная с 2.0.87, разработчики 1С внесли изменения в процедуру ДобавитьВложение. Посмотрим на пример логики, которая помогает избежать ошибки:


// Пример защитного механизма в коде
Если ТипЗнч(Значение) = Тип("Структура") Тогда
    НовоеЗначение = Новый Структура;
    Для Каждого Элемент Из Значение Цикл
        // Вместо передачи ссылки выполняется копирование или проверка
        НовоеЗначение.Вставить(Элемент.Ключ, Элемент.Значение);
    КонецЦикла;
КонецЕсли;

Проанализируем, что можно сделать без изменения кода основной конфигурации:

  1. Зайдем на портал поддержки 1С и проверим наличие исправлений (патчей) для вашего текущего релиза (например, для 2.0.86.37).
  2. Установим патч через Администрирование — Обслуживание — Обновление программы — Установка исправлений (патчей).
  3. Если патча нет, стоит обновить конфигурацию на более свежий релиз (2.0.87 и выше), где данная ошибка уже исправлена разработчиками на уровне программного кода модуля УправлениеДоступомСлужебный.

Влияние на производительность и рекомендации

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

Итоговый алгоритм действий:

Рассмотренные методы позволяют успешно преодолеть технический барьер платформы 8.3.17 и обеспечить корректную работу актуальных релизов БГУ 2.0.

← На главную