При разработке и доработке отчетов в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Управление нашей фирмой (УНФ) 1.6, 1С:Управление торговлей 11 или 1С:ERP, программисты часто сталкиваются с неприятным поведением платформы. Вы выгружаете стандартный отчет (например, «Остатки на складах») во внешний файл, вносите минимальные изменения, открываете его через меню «Файл — Открыть», но при изменении периода на форме отчет упорно отказывается обновлять данные. Он продолжает выводить информацию по старому периоду до тех пор, пока вы полностью не закроете форму и не откроете отчет заново.
В этой статье мы подробно разберем, почему возникает этот сбой связи между экранной формой и Системой компоновки данных (СКД), и рассмотрим несколько надежных способов устранения этой проблемы как программными, так и интерактивными методами.
Для начала проанализируем ситуацию и поймем, почему обычное сохранение стандартного отчета во внешний файл ломает его работоспособность. Здесь задействованы сразу три фактора платформы 1С и БСП:
ХранилищеВариантов (как правило, это ХранилищеВариантовОтчетов). При сохранении отчета во внешний файл .erf это свойство наследуется. Когда вы открываете внешний файл, БСП пытается инициализировать механизмы кэширования настроек, связывая их с метаданными оригинального встроенного отчета. В результате возникает конфликт: форма считывает настройки из кэша информационной базы, игнорируя интерактивные изменения периода пользователем.КомпоновщикНастроек.ПользовательскиеНастройки. Однако при компоновке результата метод КомпоновщикНастроек.ПолучитьНастройки() может возвращать старую коллекцию параметров (без учета нового периода), так как изменения еще не зафиксировались в основной структуре компоновщика.ПриКомпоновкеРезультата обычно прописан вызов общего модуля БСП, например, ОтчетыУНФ.ПриКомпоновкеРезультата(...). Этот код оптимизирован под работу со встроенными объектами метаданных и часто некорректно обрабатывает параметры внешних файлов.Теперь, зная причины сбоя, разберем по шагам доступные варианты решения.
Это самый быстрый и простой способ, который помогает в 90% случаев при работе с внешними отчетами. Нам необходимо разорвать связь внешнего файла с механизмами кэширования настроек БСП.
Рассмотрим порядок действий:
.erf) в режиме Конфигуратор.Alt + Enter).После очистки этого свойства платформа перестанет сопоставлять настройки внешнего отчета с кэшем базы данных, и параметры формы начнут корректно передаваться в СКД.
Если очистка хранилища вариантов не помогла или вам критически важно сохранить структуру настроек БСП, мы можем принудительно синхронизировать пользовательские настройки с настройками компоновщика непосредственно перед формированием отчета.
Для этого нам потребуется написать небольшой обработчик в модуле объекта отчета. Разберем этот процесс подробнее:
ПриКомпоновкеРезультата. Если ее нет, создайте ее.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Принудительно синхронизируем настройки перед компоновкой
КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.ПолучитьНастройки());
КонецПроцедуры
Этот простой прием заставляет платформу обновить значения параметров виртуальных таблиц СКД актуальными датами, которые пользователь только что выбрал на форме отчета.
Иногда операционная система или платформа 1С кэшируют схему компоновки данных по ее внутреннему идентификатору или имени. Если имя вашего внешнего отчета совпадает с типовым (например, ОстаткиНаСкладах), платформа может использовать старый закэшированный вариант компоновки.
Выясним, как правильно уникализировать наш отчет:
_Доработанный_ОстаткиНаСкладах).ОсновнаяСхемаКомпоновкиДанных) и переименуйте саму схему в свойствах макета (например, в Схема_ОстаткиНаСкладах).После этого рекомендуется очистить локальный кэш платформы 1С на рабочем компьютере разработчика и пользователя, чтобы исключить влияние старых метаданных.
Если в вашем отчете используются запросы к виртуальным таблицам остатков и оборотов (например, РегистрНакопления.Запасы.Остатки), важно убедиться, что параметры этих таблиц правильно связаны со стандартным периодом СКД.
Проанализируем вкладку настроек параметров в СКД:
&НачалоПериода и &КонецПериода (или параметра &Период) установлены флаги Ограничение доступности. Это скроет их от пользователя, чтобы он не мог запутать отчет двойным вводом дат.&НачалоПериода укажите выражение: &ПериодОтчета.ДатаНачала&КонецПериода укажите выражение: &ПериодОтчета.ДатаОкончанияПериодОтчета (с типом данных СтандартныйПериод).Если вы отлаживаете отчет, загрузив его в базу данных через справочник «Дополнительные отчеты и обработки», помните о поведении БСП. При изменении внешнего файла и его повторном сохранении платформа может продолжать запускать старую версию из своего внутреннего кэша.
Для решения этой проблемы переведите публикацию отчета в карточке справочника в режим «Отладка». В этом режиме система перестает использовать оптимизированный кэш базы данных и обращается непосредственно к физическому файлу отчета на диске при каждом формировании, что гарантирует применение всех изменений параметров «на лету».