Каждый разработчик 1С рано или поздно сталкивается с крайне неприятной ситуацией. Мы открываем конфигуратор, вносим изменения в схему компоновки данных (СКД) нашего отчета, добавляем новый важный параметр или отбор — например, фильтр по поставщику: И ПриобретениеТоваровУслугТовары.Ссылка.Партнер = &Партнер. Затем сохраняем отчет, запускаем его в режиме "1С:Предприятие", проверяем... и видим, что отчет абсолютно игнорирует наше новое условие. Он либо формируется по всем контрагентам подряд, либо вообще не реагирует на изменение значения в поле нового параметра.
В этой статье мы подробно проанализируем, почему возникает эта проблема, как устроены внутренние механизмы платформы 1С и Библиотеки стандартных подсистем (БСП) в части кэширования настроек, и разберем по шагам 5 надежных способов решения этой проблемы без необходимости создавать файл отчета заново.
Для того чтобы понять суть проблемы, нам необходимо разобраться, как платформа 1С работает с настройками компоновки данных. В системе компоновки данных настройки не монолитны — они состоят из трех независимых слоев, которые накладываются друг на друга последовательно, как слои в графическом редакторе:
Когда мы открываем отчет в режиме "1С:Предприятие", платформа считывает схему компоновки данных, а затем пытается наложить на нее ранее сохраненную структуру пользовательских настроек. Если в старой сохраненной структуре нашего нового параметра (например, &Партнер) просто не существовало, то система инициализирует настройки из кэша. В результате флаг использования нового параметра сбрасывается в значение Ложь, и платформа считает его неиспользуемым. Отчет формируется так, будто мы ничего не добавляли.
Если мы работаем в типовой конфигурации (такой как "Управление торговлей", "ERP Управление предприятием" или "Комплексная автоматизация"), ситуация усложняется наличием Библиотеки стандартных подсистем (БСП).
Когда внешний отчет загружается в справочник ДополнительныеОтчетыИОбработки, механизмы БСП регистрируют его структуру во вспомогательном справочнике ВариантыОтчетов. БСП делает снимок структуры настроек по умолчанию и сохраняет его прямо в информационную базу.
Именно поэтому стандартная кнопка "Установить стандартные настройки" в форме отчета часто не помогает. Эта кнопка дает команду сбросить пользовательские настройки до "стандарта", но сама БСП берет этот "стандарт" не из свежего файла .erf, который мы только что загрузили, а из сохраненного ранее в базе данных кэша вариантов отчетов! Происходит рассинхронизация реальной схемы СКД файла и метаданных, сохраненных в информационной базе.
Рассмотрим подробнее эффективные методы решения этой проблемы.
Самый простой способ заставить платформу и БСП забыть о старых настройках — изменить системное имя отчета в конфигураторе. Настройки пользователя привязываются именно к системному идентификатору (свойству Имя объекта метаданных).
Разберем этот способ по шагам:
МойОтчетПоПоступлениям, измените его на МойОтчетПоПоступлениям_Новый или просто добавьте в конец символ версии.При открытии такого отчета система воспримет его как абсолютно новый объект, для которого в базе данных еще нет сохраненного кэша настроек. Схема компоновки применится в своем первозданном, актуальном виде.
Если вам критически важно сохранить прежнее системное имя отчета, необходимо полностью очистить кэш вариантов отчетов в БСП. Обычное обновление файла через кнопку "Загрузить файл" в карточке дополнительного отчета не всегда очищает кэшированные таблицы вариантов.
Для гарантированной очистки выполните следующие действия:
ВариантыОтчетов и очистит кэш настроек..erf. Настройте разделы видимости и права доступа.Если проблема наблюдается у конкретных пользователей, которые уже успели поработать с отчетом и сохранить свои варианты, можно точечно удалить их настройки через стандартный интерфейс системы:
После этой процедуры при следующем открытии отчета система загрузит чистые настройки непосредственно из схемы СКД.
Для разработчиков, имеющих доступ к консоли кода или внешней обработке с возможностью выполнения произвольного алгоритма, существует элегантный программный способ принудительно обновить кэш вариантов отчетов во всей базе данных без удаления элементов.
Мы можем вызвать экспортный метод БСП, который выполнит синхронизацию сохраненных настроек с фактическими схемами файлов:
// Вызов стандартного метода обновления вариантов отчетов БСП
ВариантыОтчетов.Обновить();
Также, если вы пишете код в модуле объекта внешнего отчета, вы можете программно гарантировать включение нового параметра при первом открытии формы. Посмотрим на пример предопределенной процедуры в модуле объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Программная установка использования параметра
ПараметрПартнер = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Партнер"));
Если ПараметрПартнер <> Неопределено Тогда
// Если параметр не включен в настройках, принудительно активируем его
Если Не ПараметрПартнер.Использование Тогда
ПараметрПартнер.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот код гарантирует, что при формировании отчета платформа обязательно обратит внимание на наш параметр, даже если в кэше пользователя флаг использования этого параметра стоял в значении Ложь.
Бывают ситуации, когда настройки "намертво" привязываются к уникальному идентификатору (UUID) управляемой формы отчета. Если у вашего внешнего отчета создана индивидуальная основная форма отчета, попробуйте сделать следующее:
ФормаОтчета на ФормаОтчетаНовая) и переназначьте её как основную форму отчета.Это действие полностью разорвет связь формы с кэшированным состоянием элементов на клиенте.
Чтобы минимизировать вероятность возникновения подобных ошибок при модификации отчетов, придерживайтесь следующих правил при настройке параметров на вкладке "Параметры" в СКД:
Используя предложенные нами методики, вы навсегда избавитесь от необходимости тратить время на "танцы с бубном", связанные с ручным пересозданием файлов внешних отчетов. Достаточно просто понимать механизм кэширования БСП и вовремя сбрасывать сохраненные настройки вариантов отчетов.