Как исправить ошибку «Не может быть изменен владелец у справочника: Формы статистики» при обновлении 1С

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

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

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

Способ 1. Корректное выполнение регламента переходного релиза

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

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

Способ 2. Программная смена владельца через расширение списка владельцев в конфигурации

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

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

Посмотрим на пример кода внешней обработки для переноса владельцев:


Выборка = Справочники.ФормыСтатистики.Выбрать();
Пока Выборка.Следующий() Цикл
    СтарыйВладелец = Выборка.Владелец;
    Если ТипЗнч(СтарыйВладелец) = Тип("СправочникСсылка.УдалитьРегламентированныеОтчеты") Тогда
        // Выполняем поиск аналогичного элемента в новом справочнике по коду или наименованию
        НовыйВладелец = Справочники.РегламентированныеОтчеты.НайтиПоКоду(СтарыйВладелец.Код);
        
        Если ЗначениеЗаполнено(НовыйВладелец) Тогда
            ОбъектСправочника = Выборка.ПолучитьОбъект();
            ОбъектСправочника.Владелец = НовыйВладелец;
            ОбъектСправочника.Записать();
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
  1. Вернемся в конфигуратор и удалим устаревший тип УдалитьРегламентированныеОтчеты из списка владельцев справочника ФормыСтатистики.
  2. Обновим конфигурацию базы данных и продолжим штатное обновление на следующий релиз.

Способ 3. Очистка классификатора форм статистики

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

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

Посмотрим на пример кода для полной очистки справочника перед обновлением:


Выборка = Справочники.ФормыСтатистики.Выбрать();
Пока Выборка.Следующий() Цикл
    Попытка
        Объект = Выборка.ПолучитьОбъект();
        Объект.Удалить();
    Исключение
        Сообщить("Ошибка при удалении элемента: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;
  1. После полной очистки таблицы закроем сеанс предприятия и выполним штатное обновление через конфигуратор. Так как таблица подчиненного справочника пуста, реструктуризация метаданных пройдет без конфликтов.
  2. Запустим обновленную базу данных в режиме «1С:Предприятие». Типовые механизмы конфигурации автоматически инициализируют и заполнят классификатор актуальными формами статистики.

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

← На главную