1С 8.3: Как убрать старые закешированные настройки внешнего отчета СКД?

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

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

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

Выясняем причину: почему кэшируются настройки?

Когда мы открываем внешний отчет напрямую из файла (без регистрации в справочнике дополнительных отчетов и обработок), платформа 1С ориентируется на его внутреннее имя (свойство Имя в окне свойств объекта метаданных, например, ВнешнийОтчет3). Чтобы повысить удобство пользователя, система автоматически запоминает последние настройки формы, параметры и отборы СКД, выбранные поля и расположение окон.

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

Основные хранилища, куда записывается эта информация:

  1. ХранилищеСистемныхНастроек — здесь фиксируется состояние управляемой формы, расположение и видимость колонок табличного документа, а также состояние компоновщика настроек. Ключ объекта записывается в формате ВнешнийОтчет.[ВнутреннееИмяОтчета]/КомпоновщикНастроек.
  2. ХранилищеПользовательскихНастроекОтчетов — здесь платформа хранит пользовательские настройки СКД (выбранные отборы, параметры, сортировки и структуру группировок).

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

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

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

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

  1. Откройте проблемный внешний отчет в режиме 1С:Предприятие.
  2. Нажмите кнопку «Еще» в правой верхней части панели отчета и выберите пункт «Установить стандартные настройки».
  3. Если в вашей форме выведена кнопка «Настройки», нажмите ее, затем найдите кнопку управления вариантами и выберите «Сбросить настройки» (или «Загрузить стандартные настройки»).

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

Способ 2. Стандартная очистка настроек через интерфейс БСП

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

Для выполнения этой процедуры выполним следующие действия:

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

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

Способ 3. Программное удаление кэшированных настроек из базы данных

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

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


// Создадим структуру для отбора (пустая структура выберет все настройки)
ПараметрыОтбора = Новый Структура;

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

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

Сообщить("Очистка закешированных настроек для ВнешнийОтчет3 успешно завершена!");

Данный скрипт полностью стирает записи из базы данных, и при следующем открытии файла отчета платформа 1С будет вынуждена прочитать структуру схемы компоновки данных "с чистого листа".

Способ 4. Изменение свойства «Ключ назначения использования» формы отчета

Во время активной разработки и тестирования отчета постоянно чистить кэш неудобно. Чтобы решить проблему превентивно, разработчики используют специальное свойство управляемой формы.

Посмотрим, как настроить это свойство в Конфигураторе:

  1. Откройте ваш внешний отчет в Конфигураторе 1С.
  2. Перейдите к форме отчета (если ее нет, создайте основную форму отчета).
  3. Откройте палитру свойств управляемой формы.
  4. Найдите свойство КлючНазначенияИспользования (по умолчанию это поле пустое).
  5. Введите туда уникальный строковый идентификатор, например: Версия_1_1 или НовыйНаборПолей.
  6. Сохраните отчет и запустите его в режиме 1С:Предприятие.

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

Способ 5. Смена уникального идентификатора (UUID) формы

Если изменение ключа назначения использования по какой-то причине не дало результата, можно прибегнуть к радикальному пересозданию формы отчета. Все настройки формы привязываются не только к имени объекта, но и к ее уникальному внутреннему идентификатору (UUID).

Выполним следующие шаги:

  1. В Конфигураторе откройте дерево метаданных внешнего отчета.
  2. Если у вас сложная логика в модуле формы, скопируйте весь код модуля во временный текстовый файл.
  3. Удалите основную форму отчета.
  4. Создайте новую форму отчета и назначьте ее основной. При этом платформа сгенерирует абсолютно новый UUID для этой формы.
  5. Верните скопированный код модуля и элементы управления на новую форму.

Поскольку идентификатор формы изменился, старый системный кэш настроек физически не сможет сопоставиться с новой формой, и отчет откроется в своем актуальном состоянии.

Способ 6. Очистка локального кэша платформы 1С на компьютере

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

Чтобы исключить влияние локального кэша, выполним очистку:

  1. Полностью завершите работу со всеми сеансами 1С:Предприятия.
  2. Откройте проводник Windows и перейдите по следующим путям:
    • %LocalAppData%\1C\1cv8
    • %AppData%\1C\1cv8
  3. Внутри этих каталогов найдите и удалите папки с длинными буквенно-цифровыми именами (например, a8d3f124-b567-4d1a...). В этих каталогах хранятся временные файлы конфигураций и схем.
  4. Альтернативный вариант: откройте окно со списком информационных баз 1С, выберите нужную базу, нажмите «Изменить», перейдите на последнюю вкладку настроек и в поле «Дополнительные параметры запуска» введите ключ /ClearCache. Запустите базу, а после успешного открытия данный ключ можно удалить.

Используя предложенные методы, мы можем легко управлять поведением настроек СКД во внешних отчетах, своевременно сбрасывать устаревший кэш и экономить время при разработке и обновлении аналитических отчетов в системе 1С:Предприятие 8.3.

← На главную