Как исправить ошибку обновления вспомогательных данных при добавлении объектов в расширение 1С?

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

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

Анализ проблемы: почему возникают ошибки прав и идентификаторов

Первопричина кроется в механизмах БСП, которые отвечают за поддержку модели сервиса (облачных технологий) и управление доступом. Даже если ваша база работает в локальном режиме, механизмы БСП продолжают контролировать разделение данных. Рассмотрим основные сценарии возникновения сбоев:

  1. Контроль неразделенных объектов: БСП проверяет, чтобы типовые роли (например, ПолныеПрава) не имели избыточных прав на изменение объектов, которые помечены как «общие» (неразделенные). Когда вы добавляете свой объект в расширение, система может ошибочно классифицировать его и заблокировать обновление из-за конфликта прав.
  2. Отсутствие идентификаторов метаданных: Для корректной работы подсистем (отчеты, дополнительные реквизиты, управление доступом) каждому объекту расширения должен соответствовать элемент в справочнике ИдентификаторыОбъектовМетаданных и запись в регистре ИдентификаторыОбъектовВерсийРасширений. Если автоматическое обновление не сработало, система «не видит» ваш новый документ.
  3. Критический сбой в ключах доступа: Ошибка вида «ВидИзмененияСтроки содержит недопустимое значение 23» сигнализирует о повреждении данных в служебных регистрах управления доступом. Это происходит из-за некорректного суммирования состояний строк в запросах БСП при обновлении.

Шаг 1: Принудительное обновление через параметры запуска

Первым делом попробуем стандартный механизм инициализации обновления ИБ. Разберем, как правильно запустить систему с необходимыми параметрами:

Откроем конфигуратор, перейдем в меню Сервис — Параметры. На вкладке Запуск 1С:Предприятия в поле Параметр запуска введем следующую команду:

/С ЗапуститьОбновлениеИнформационнойБазы

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

Шаг 2: Использование специализированных обработок БСП

Если стандартный запуск не помогает и мы попадаем в «замкнутый круг» ошибок, воспользуемся инструментами разработчика, которые входят в состав дистрибутива БСП. Нам понадобятся две обработки:

  1. ПроверкаВнедренияБСП.epf: Помогает выявить массовые ошибки в структуре метаданных и настройках подсистем.
  2. ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf: Это основной инструмент для решения нашей задачи.

Рассмотрим порядок работы с обработкой обновления вспомогательных данных:

Шаг 3: Модификация переопределяемых модулей

Проанализируем ситуацию, когда система ругается на права доступа (например, «Роль Полные права содержит право Изменение неразделенного объекта»). Чтобы обойти эту проверку для ваших самописных объектов в расширении, нам потребуется заимствовать общий модуль ПользователиПереопределяемый. Для решения подобных задач с ролями в подсистеме доступа можно использовать решение для защиты ролей расширений в БСП 3.

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


Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт
    // Добавляем логику исключения для наших объектов расширения
    НазначениеРолей.ДляАдминистраторовСистемы.Добавить("ПолныеПрава");
    // Здесь можно указать ваши специфические роли из расширения
КонецПроцедуры

Также проверьте модуль ПриОпределенииТиповСписковСОбщимиДанными, если ваш справочник ошибочно считается общим для всех областей данных.

Шаг 4: Устранение ошибки ключей доступа (Значение 23)

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


// Принудительное обновление разрешенных значений доступа
УправлениеДоступом.ОбновитьРазрешенныеЗначения();

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

Перед выполнением этих операций рекомендуется очистить содержимое регистра сведений ОбновлениеКлючейДоступа, что позволит системе начать процесс пересчета с чистого листа. При необходимости можно воспользоваться обработкой для точечного пересчета прав доступа пользователей и групп.

Шаг 5: Технические нюансы расширения и кэш

Иногда корень проблемы кроется в настройках самого расширения. Проверим следующие параметры:

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

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

  1. Увеличиваем номер версии расширения и меняем его назначение на Дополнение.
  2. Запускаем базу с параметром /С ЗапуститьОбновлениеИнформационнойБазы.
  3. Если ошибка сохраняется, используем обработку ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf для ручного обновления идентификаторов.
  4. При ошибках прав доступа — правим логику в ПользователиПереопределяемый.
  5. Если ничего не помогает — временно отключаем расширение, запускаем обновление основной базы, а затем подключаем расширение заново по одному объекту, отслеживая момент появления ошибки.

Следуя этим шагам, мы сможем восстановить работоспособность системы и обеспечить корректную регистрацию всех новых объектов метаданных в механизмах БСП.

← На главную