Отчеты и Аналитика · 9 мин
Как обновить варианты отчетов 1С программно
Программное обновление вариантов отчетов в 1С: обновлениеВариантовОтчетов, работа с хранилищем вариантов, типичные ошибки и проверка результата.
Варианты отчетов в 1С хранятся в специальном хранилище и привязаны к конкретным отчетам конфигурации. Когда разработчик меняет схему компоновки данных, добавляет или переименовывает варианты в модуле менеджера отчета, пользовательские настройки в базе устаревают: отчет открывается со старым вариантом, падает с ошибкой «Вариант отчета не найден» или показывает неактуальный набор вариантов в панели отчетов.
Программное обновление вариантов решает эту задачу без ручной чистки: система перечитывает описания вариантов из конфигурации и синхронизирует их с данными хранилища. В типовых конфигурациях на БСП для этого предназначены процедуры подсистемы «Варианты отчетов», а в простых конфигурациях можно обойтись стандартным хранилищем вариантов отчетов.
Ниже разобраны основные методы: штатное обновление через БСП, прямая работа с ХранилищеВариантовОтчетов, обновление при обновлении версии конфигурации, а также способы проверить результат и типичные ошибки, из-за которых варианты «не обновляются».
Где хранятся варианты отчетов и почему они устаревают
Платформа 1С хранит пользовательские варианты отчетов в системном хранилище — ХранилищеВариантовОтчетов. Каждый вариант привязан к ключу отчета (например, «Отчет.Продажи») и ключу варианта. Пользователь сохраняет настройки через «Ещё — Сохранить вариант отчета», и эти данные попадают в хранилище, а не в конфигурацию.
В конфигурациях на базе Библиотеки стандартных подсистем (БСП) поверх платформенного хранилища работает справочник «Варианты отчетов» и служебные регистры. Подсистема строит панель отчетов, разграничивает права, поддерживает предопределенные варианты из конфигурации. Именно этот слой и требует обновления, когда меняется состав вариантов в метаданных.
Типичные ситуации, когда варианты нужно обновить программно: после обновления конфигурации, где разработчик изменил схему компоновки или состав вариантов; после переноса данных между базами; после массового изменения отчетов расширением; при ошибке «Вариант отчета не найден» у пользователей.
Обновление вариантов через подсистему БСП
Если конфигурация построена на БСП (УТ, ERP, БП, ЗУП и другие типовые), основной инструмент — модуль ВариантыОтчетов. Для полного обновления служебных данных подсистемы используется процедура, которая перечитывает описания вариантов из метаданных и синхронизирует справочник вариантов отчетов.
// Полное обновление вариантов отчетов (толстый/тонкий серверный вызов)
ВариантыОтчетов.Обновить();
В ряде версий БСП обновление запускается автоматически обработчиком обновления информационной базы и регламентным заданием «Обновление вариантов отчетов». Если задание отключено или база обновлялась в монопольном режиме с ошибками, варианты могут остаться в рассинхронизированном состоянии — тогда обновление вызывают вручную через внешнюю обработку или консоль кода.
Учтите, что ВариантыОтчетов.Обновить() — ресурсоемкая операция: она обходит все отчеты конфигурации и расширений. На больших базах выполняйте её в нерабочее время или в фоновом задании.
Работа с ХранилищеВариантовОтчетов напрямую
Если конфигурация не использует БСП, работайте со стандартным объектом платформы ХранилищеВариантовОтчетов. Он поддерживает загрузку, сохранение, получение списка и удаление вариантов по ключу отчета и ключу варианта.
// Получить список вариантов отчета
СписокВариантов = ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет.Продажи");
// Загрузить конкретный вариант
Настройки = ХранилищеВариантовОтчетов.Загрузить("Отчет.Продажи", "Основной");
// Удалить устаревший вариант
ХранилищеВариантовОтчетов.Удалить("Отчет.Продажи", "СтарыйВариант", Неопределено);
Типовой сценарий «обновления» в такой схеме — это удаление устаревших вариантов и (при необходимости) запись новых с актуальными настройками по умолчанию. Значение настроек — это объект НастройкиКомпоновкиДанных или пользовательские настройки, которые можно сформировать программно или взять из схемы отчета.
Метод ПолучитьСписок принимает также параметр пользователя, что позволяет чистить или переносить варианты конкретного сотрудника — например, при замене учетной записи.
Программное обновление при обновлении конфигурации
Правильное место для обновления вариантов — обработчик обновления информационной базы. В БСП для этого есть механизм отложенных и оперативных обработчиков: вы регистрируете процедуру в модуле обновления, и она выполняется при переходе на новую версию.
// Пример обработчика обновления в собственной конфигурации
Процедура ОбновитьВариантыОтчетов_3_1_2() Экспорт
// Удаляем вариант, который переименован в новой версии
ХранилищеВариантовОтчетов.Удалить("Отчет.АнализОстатков", "ПоСкладам", Неопределено);
// В БСП-конфигурации — полная синхронизация
ВариантыОтчетов.Обновить();
КонецПроцедуры
Для массовых изменений лучше использовать отложенный обработчик: он выполняется в фоне после основного обновления и не блокирует запуск пользователей. Оперативный обработчик оправдан только для небольших точечных правок.
Обновление через консоль кода и внешние обработки
На практике чаще всего обновление запускают разово — через консоль кода (входит в инструменты разработчика) или простую внешнюю обработку с одной кнопкой. Это удобно, когда обработчик обновления не сработал или нужно обновить варианты после доработки расширения.
- 1Сделайте резервную копию базы или выгрузку в dt
- 2Откройте консоль кода под пользователем с правами администратора
- 3Выполните ВариантыОтчетов.Обновить() либо нужные вызовы ХранилищеВариантовОтчетов
- 4Дождитесь завершения и проверьте журнал регистрации на ошибки
- 5Откройте панель отчетов и запустите ключевые варианты от имени обычного пользователя
Если база файловая, убедитесь, что другие пользователи не выполняют массовое сохранение вариантов в момент обновления — возможны конфликты блокировок. В клиент-серверном варианте операция идет на сервере, и риск блокировок ниже, но нагрузка на СУБД заметная.
Проверка результата и типичные ошибки
После обновления проверьте три вещи: корректность списка вариантов в панели отчетов, открытие предопределенных вариантов без ошибок и сохранность пользовательских вариантов. Проверять нужно под учетной записью без административных прав — у администратора многие проблемы не видны.
Как проверить результат
Показывает актуальный состав вариантов без дублей
Отсутствуют новые варианты или видны удаленные
Отчет формируется без сообщений об ошибках
Ошибка «Вариант отчета не найден» или «Поле не найдено»
Сохраненные пользователями настройки на месте
Варианты пропали или сброшены на настройки по умолчанию
Отдельная частая ошибка — изменение ключа варианта в конфигурации без обработчика миграции. Старый ключ в хранилище остается «сиротой», а пользователи теряют накопленные настройки. Если переименование неизбежно, перенесите настройки программно: загрузите старый вариант и сохраните его под новым ключом.
Частые вопросы
Почему после обновления конфигурации пользователи видят старые варианты?
Чаще всего не отработал обработчик обновления или отключено регламентное задание «Обновление вариантов отчетов». Выполните ВариантыОтчетов.Обновить() вручную и проверьте состояние задания в консоли заданий. Также попросите пользователей перезайти в программу — состав панели отчетов кэшируется в сеансе.
Удалятся ли пользовательские варианты при вызове ВариантыОтчетов.Обновить()?
Штатная процедура синхронизирует предопределенные варианты и служебные данные, пользовательские варианты обычно сохраняются. Однако прямые вызовы ХранилищеВариантовОтчетов.Удалить удаляют данные безвозвратно, поэтому перед любыми ручными операциями делайте копию базы.
Можно ли обновить варианты только одного отчета?
Да. В БСП есть методы для работы с конкретным отчетом, а при прямой работе с хранилищем вы и так указываете ключ отчета в каждом вызове. Точечное обновление быстрее и безопаснее полного, если доработка коснулась одного-двух отчетов.
Как перенести варианты отчетов между базами?
Самый надежный способ — обработка «Выгрузка/загрузка вариантов отчетов» из состава БСП либо перенос через чтение вариантов из хранилища источника и запись в хранилище приемника с теми же ключами. Учтите, что ключи отчетов в обеих базах должны совпадать.
Что делать с ошибкой «Вариант отчета не найден» после переименования варианта?
Ошибка означает, что в хранилище или в настройках панели осталась ссылка на старый ключ. Удалите устаревший вариант через ХранилищеВариантовОтчетов.Удалить или перенесите его настройки на новый ключ, затем выполните обновление вариантов и очистите настройки панели отчетов у затронутых пользователей.
Что важно запомнить
В БСП-конфигурациях обновляйте варианты через ВариантыОтчетов.Обновить() и следите за регламентным заданием; в простых конфигурациях работайте с ХранилищеВариантовОтчетов напрямую. Всегда делайте резервную копию перед массовыми операциями и проверяйте результат под обычным пользователем.