Почему не отображаются изменения в отчете СКД и как сбросить кэш настроек?

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

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

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

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

Рассмотрим подробнее способы исправления данной ситуации — от быстрых пользовательских действий до программных методов при разработке.

Способ 1. Восстановление настроек по умолчанию в пользовательском режиме

Разберем самое быстрое действие, если форма отчета уже открыта в режиме 1С:Предприятие. Чтобы заставить форму перечитать настройки непосредственно из схемы компоновки данных, необходимо сбросить сохраненные параметры пользователя.

  1. На командной панели отчета нажмем меню Еще (или кнопку настроек варианта).
  2. Выберем команду Установить стандартные настройки (в типовых конфигурациях на БСП пункт может называться Стандартные настройки или Сбросить настройки).
  3. Нажмем кнопку Сформировать. Платформа полностью очистит пользовательские корректировки и применит настройки по умолчанию из макета СКД, после чего новые поля и ресурсы появятся в отчете.

Способ 2. Изменение имени отчета или ключа варианта в конфигураторе

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

Для этого в дереве метаданных отчета (или в свойствах корневого элемента внешнего отчета) изменим свойство Имя. Достаточно добавить суффикс или номер версии. Так как ключ системного хранилища жестко привязан к имени объекта, старые записи настроек перестанут сопоставляться с данным отчетом.

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

Способ 3. Пересоздание формы отчета

Если настройки жестко привязались к форме отчета, эффективным приемом является сброс идентификатора формы:

  1. В конфигураторе удалим существующую форму внешнего отчета.
  2. Создадим новую форму отчета и назначим ее основной.
  3. Сохраним файл отчета.

При создании новой формы платформа генерирует новый уникальный идентификатор (УИД), в результате чего все привязанные к старой форме сохраненные состояния компоновщика автоматически теряют актуальность.

Способ 4. Программная инициализация схемы при открытии

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Принудительно загружаем настройки по умолчанию из СКД
    Схема = Отчет.СхемаКомпоновкиДанных;
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
    
    // Для исключения пересечений генерируем уникальный ключ настроек
    КлючНастроек = Строка(Новый УникальныйИдентификатор);
    
КонецПроцедуры

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

Способ 5. Программная очистка системных хранилищ

Если необходимо точечно удалить сохраненное состояние отчета для конкретного пользователя, обратимся к объекту ХранилищеСистемныхНастроек или ХранилищеПользовательскихНастроекОтчетов. Посмотрим на пример кода обработки:


// Удаление настроек внешнего отчета по ключу объекта
КлючОбъекта = "ВнешнийОтчет.МойОтчетСКД/Основной";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя());
ХранилищеПользовательскихНастроекОтчетов.Удалить(КлючОбъекта, "", ИмяПользователя());

Вызов метода Удалить() очищает сериализованную структуру компоновщика из базы данных, возвращая отчет к исходному состоянию метаданных.

Способ 6. Отключение автосохранения и запуск с ключом очистки кэша

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

  1. В свойствах формы отчета найдем пункт Автоматическое сохранение данных в настройках и отключим его либо исключим реквизит КомпоновщикНастроек из списка сохраняемых данных.
  2. Если правки кода и схемы внешнего отчета не отображаются из-за серверного кэширования сеанса, выполним перезапуск клиентского приложения. Для гарантированной очистки временных файлов запустим платформу с параметром командной строки /ClearCache.
← На главную