При разработке и сопровождении внешних отчетов в типовых конфигурациях на платформе 1С:Предприятие 8.3 (таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация) разработчики регулярно сталкиваются с неприятным поведением: после исправления ошибок в модуле или схеме компоновки данных (СКД) и последующей загрузки обновленного файла в справочник ДополнительныеОтчетыИОбработки отчет в пользовательском сеансе продолжает выполняться по старому алгоритму. Даже полное удаление или комментирование исполняемого кода расчета не меняет результат вывода данных.
Проанализируем детально, почему так происходит, как устроены внутренние механизмы хранения вариантов отчетов в Библиотеке стандартных подсистем (БСП) и как гарантированно применить обновления без постоянного пересоздания объекта.
Выясним причину такого поведения платформы и конфигурации. Дело не в ошибке загрузки самого файла в базу данных, а в нескольких уровнях кэширования и разделения настроек:
ДополнительныеОтчетыИОбработки подсистема БСП считывает схему компоновки и генерирует служебные записи в справочнике ВариантыОтчетов. При вызове отчета из панели разделов конфигурация запускает его не в «чистом» виде из файла, а накладывает предопределенные и сохраненные настройки из базы данных через системные хранилища (ХранилищеВариантовОтчетов и ХранилищеСистемныхНастроек).rphost может удерживать модуль объекта во временном каталоге сервера и памяти текущего сеанса до завершения работы пользователя или перезапуска процесса.Рассмотрим самый правильный и штатный способ обновления метаданных отчета в БСП. Чтобы подсистема вариантов поняла, что структура отчета изменилась, необходимо изменить номер версии в модуле объекта отчета.
Откроем модуль объекта внешнего отчета в конфигураторе и изменим значение свойства Версия в экспортной функции регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = "Анализ продаж по клиентам";
ПараметрыРегистрации.Версия = "1.0.0.2"; // Увеличиваем номер версии при каждом изменении
ПараметрыРегистрации.БезопасныйРежим = Ложь;
// Добавление команд отчета
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Анализ продаж по клиентам";
НоваяКоманда.Идентификатор = "АнализПродажПоКлиентам";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
После сохранения файла и перезагрузки его в справочник ДополнительныеОтчетыИОбработки БСП зафиксирует изменение версии и выполнит автоматическое обновление связанных записей в справочнике ВариантыОтчетов.
Если изменения касались структуры СКД (добавлены новые вычисляемые поля, группировки, ресурсы), но отчет продолжает выводить старую таблицу, необходимо сбросить кэш пользовательских настроек формы.
Разберем по шагам, как применить новые настройки по умолчанию:
Если сброс настроек конкретным пользователем не помог, администратор может выполнить очистку персональных настроек централизованно через раздел «НСИ и администрирование» ➔ «Настройки пользователей и прав» ➔ «Персональные настройки пользователей» ➔ «Очистка настроек», выбрав пользователя и нужный отчет.
Проанализируем конфигурацию самого файла внешнего отчета. Для корректной интеграции схемы компоновки с механизмами БСП необходимо проверить свойства корневого объекта отчета в конфигураторе:
ХранилищеВариантовОтчетов (по умолчанию оно может быть пустым).ХранилищеВариантовОтчетов или оставим стандартное значение, если переопределение не требуется.Указание стандартного хранилища вариантов гарантирует, что БСП будет корректно связывать схему СКД с пользовательскими представлениями при обновлении файла.
В ситуациях, когда БСП заблокировала обновление служебных структур, можно выполнить принудительную перерегистрацию вариантов отчетов программным способом. Для этого в режиме «1С:Предприятие» под учетной записью с правами администратора откроем внешнюю обработку с кодом:
&НаСервере
Процедура ОбновитьВариантыОтчетовНаСервере()
// Принудительный вызов процедуры обновления вариантов подсистемы БСП
ВариантыОтчетов.Обновить();
КонецПроцедуры
Также можно воспользоваться специализированной обработкой из комплекта поставки БСП — ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf, запустив полное обновление метаданных подсистемы «Варианты отчетов».
Если программные методы не дали результата, проверим внешние факторы окружения:
ДополнительныеОтчетыИОбработки переведем публикацию отчета в состояние «Режим отладки» или временно отключим его публикацию в разделах, чтобы исключить запуск старого экземпляра из командного интерфейса.