Разработка внешних отчетов на базе Схемы компоновки данных (СКД) — одна из самых частых задач для программиста 1С. Однако в процессе активного изменения структуры отчета разработчики часто сталкиваются с неприятным явлением: вы изменили название поля, добавили новые группировки или изменили доступные поля в Конфигураторе, но при открытии отчета через меню «Файл — Открыть» в режиме Предприятия по-прежнему отображаются старые настройки, названия колонок или структуры. При этом перезапуск сеанса 1С не приносит желаемого результата.
В этой статье мы подробно разберем, почему возникает эта проблема, где именно платформа 1С:Предприятие хранит закешированные настройки внешних отчетов и какими способами можно гарантированно очистить этот кэш, чтобы применить обновленную схему компоновки.
Когда мы открываем внешний отчет напрямую из файла (без регистрации в справочнике дополнительных отчетов и обработок), платформа 1С ориентируется на его внутреннее имя (свойство Имя в окне свойств объекта метаданных, например, ВнешнийОтчет3). Чтобы повысить удобство пользователя, система автоматически запоминает последние настройки формы, параметры и отборы СКД, выбранные поля и расположение окон.
Эти данные записываются непосредственно в базу данных информационной базы (ИБ) в специальные системные таблицы (хранилища). При повторном открытии файла с тем же внутренним именем платформа ищет сохраненные настройки и принудительно накладывает их поверх обновленной схемы СКД. В результате новые поля могут просто не появиться в форме настройки отчета, а старые (уже удаленные) наименования продолжают отображаться в шапке.
Основные хранилища, куда записывается эта информация:
ВнешнийОтчет.[ВнутреннееИмяОтчета]/КомпоновщикНастроек.Рассмотрим подробнее все возможные варианты решения этой проблемы — от простых пользовательских манипуляций до тонких разработческих приемов.
Самый простой и быстрый способ обновить структуру полей без изменения программного кода — сбросить текущие настройки отчета к тем, которые заложены в схеме по умолчанию.
Разберем по шагам, как это сделать в управляемых формах:
После этого платформа сопоставит схему с первоначальным вариантом из файла, и новые имена полей станут доступны пользователю. Однако этот способ сработает только для текущего пользователя и требует ручного вмешательства.
Если ваша информационная база построена на основе любой современной конфигурации с интеграцией Библиотеки стандартных подсистем (БСП), у вас есть возможность централизованно удалить кэш настроек конкретного отчета для любого пользователя.
Для выполнения этой процедуры выполним следующие действия:
ВнешнийОтчет.ВнешнийОтчет3).Этот метод полностью удаляет сохраненные записи из хранилищ для выбранного списка пользователей базы данных.
Если административный интерфейс БСП недоступен (например, вы работаете на самописной конфигурации или база сильно изменена), можно очистить хранилища программно. Для этого мы можем запустить внешнюю обработку или выполнить код в консоли кода.
Проанализируем программный метод очистки. Нам понадобится обойти элементы коллекций ХранилищеСистемныхНастроек и ХранилищеПользовательскихНастроекОтчетов с отбором по имени внешнего отчета и удалить их:
// Создадим структуру для отбора (пустая структура выберет все настройки)
ПараметрыОтбора = Новый Структура;
// 1. Очищаем Хранилище Системных Настроек (настройки формы и компоновщика)
ВыборкаСистемных = ХранилищеСистемныхНастроек.Выбрать(ПараметрыОтбора);
Пока ВыборкаСистемных.Следующий() Цикл
// Проверяем, содержит ли ключ объекта имя нашего внешнего отчета
Если Найти(ВыборкаСистемных.КлючОбъекта, "ВнешнийОтчет.ВнешнийОтчет3") > 0 Тогда
ХранилищеСистемныхНастроек.Удалить(
ВыборкаСистемных.КлючОбъекта,
ВыборкаСистемных.КлючНастроек,
ВыборкаСистемных.Пользователь
);
КонецЕсли;
КонецЦикла;
// 2. Очищаем Хранилище Пользовательских Настроек СКД
ВыборкаПользовательских = ХранилищеПользовательскихНастроекОтчетов.Выбрать(ПараметрыОтбора);
Пока ВыборкаПользовательских.Следующий() Цикл
// Проверяем соответствие ключа объекта нашему отчету
Если Найти(ВыборкаПользовательских.КлючОбъекта, "ВнешнийОтчет.ВнешнийОтчет3") > 0 Тогда
ХранилищеПользовательскихНастроекОтчетов.Удалить(
ВыборкаПользовательских.КлючОбъекта,
ВыборкаПользовательских.КлючНастроек,
ВыборкаПользовательских.Пользователь
);
КонецЕсли;
КонецЦикла;
Сообщить("Очистка закешированных настроек для ВнешнийОтчет3 успешно завершена!");
Данный скрипт полностью стирает записи из базы данных, и при следующем открытии файла отчета платформа 1С будет вынуждена прочитать структуру схемы компоновки данных "с чистого листа".
Во время активной разработки и тестирования отчета постоянно чистить кэш неудобно. Чтобы решить проблему превентивно, разработчики используют специальное свойство управляемой формы.
Посмотрим, как настроить это свойство в Конфигураторе:
Версия_1_1 или НовыйНаборПолей.Как это работает: Платформа 1С сохраняет настройки формы в привязке к паре «ИмяОбъекта + КлючНазначенияИспользования». Изменяя это значение (например, на Версия_1_2 при следующем обновлении схемы), мы заставляем платформу игнорировать все старые настройки, так как ключ назначения изменился. Это чрезвычайно удобный прием для разработчиков, избавляющий от необходимости ручной очистки кэша базы данных на этапе отладки.
Если изменение ключа назначения использования по какой-то причине не дало результата, можно прибегнуть к радикальному пересозданию формы отчета. Все настройки формы привязываются не только к имени объекта, но и к ее уникальному внутреннему идентификатору (UUID).
Выполним следующие шаги:
Поскольку идентификатор формы изменился, старый системный кэш настроек физически не сможет сопоставиться с новой формой, и отчет откроется в своем актуальном состоянии.
В редких случаях проблема может крыться не в хранилищах настроек базы данных, а в локальном кэше метаданных платформы 1С на рабочем компьютере пользователя. Такое случается, если схема СКД закешировалась во временных файлах операционной системы.
Чтобы исключить влияние локального кэша, выполним очистку:
%LocalAppData%\1C\1cv8%AppData%\1C\1cv8a8d3f124-b567-4d1a...). В этих каталогах хранятся временные файлы конфигураций и схем./ClearCache. Запустите базу, а после успешного открытия данный ключ можно удалить.Используя предложенные методы, мы можем легко управлять поведением настроек СКД во внешних отчетах, своевременно сбрасывать устаревший кэш и экономить время при разработке и обновлении аналитических отчетов в системе 1С:Предприятие 8.3.