Как заставить обновиться внешний отчет в 1С:Управление торговлей 11 при подключении через БСП?

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

При разработке и сопровождении внешних отчетов в типовых конфигурациях на платформе 1С:Предприятие 8.3 (таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация) разработчики регулярно сталкиваются с неприятным поведением: после исправления ошибок в модуле или схеме компоновки данных (СКД) и последующей загрузки обновленного файла в справочник ДополнительныеОтчетыИОбработки отчет в пользовательском сеансе продолжает выполняться по старому алгоритму. Даже полное удаление или комментирование исполняемого кода расчета не меняет результат вывода данных.

Проанализируем детально, почему так происходит, как устроены внутренние механизмы хранения вариантов отчетов в Библиотеке стандартных подсистем (БСП) и как гарантированно применить обновления без постоянного пересоздания объекта.

Почему внешний отчет не обновляется: анализ причин

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

  1. Механизм подсистемы БСП «Варианты отчетов»: при первичной регистрации внешнего отчета в справочнике ДополнительныеОтчетыИОбработки подсистема БСП считывает схему компоновки и генерирует служебные записи в справочнике ВариантыОтчетов. При вызове отчета из панели разделов конфигурация запускает его не в «чистом» виде из файла, а накладывает предопределенные и сохраненные настройки из базы данных через системные хранилища (ХранилищеВариантовОтчетов и ХранилищеСистемныхНастроек).
  2. Кэширование пользовательских настроек СКД: если наименование варианта отчета или его внутренний идентификатор не изменились, платформа подставляет сохраненные пользовательские настройки формы поверх новой схемы. В результате выводятся старые поля, группировки и параметры.
  3. Кэширование скомпилированного модуля на сервере: рабочий процесс rphost может удерживать модуль объекта во временном каталоге сервера и памяти текущего сеанса до завершения работы пользователя или перезапуска процесса.
  4. Конфликт версий при использовании расширений: если аналогичный отчет или его макет был добавлен в расширение конфигурации, вызов из командного интерфейса может обращаться к версии из расширения, игнорируя справочник дополнительных отчетов.

Способ 1. Инкремент версии в функции СведенияОВнешнейОбработке

Рассмотрим самый правильный и штатный способ обновления метаданных отчета в БСП. Чтобы подсистема вариантов поняла, что структура отчета изменилась, необходимо изменить номер версии в модуле объекта отчета.

Откроем модуль объекта внешнего отчета в конфигураторе и изменим значение свойства Версия в экспортной функции регистрации:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Наименование = "Анализ продаж по клиентам";
    ПараметрыРегистрации.Версия = "1.0.0.2"; // Увеличиваем номер версии при каждом изменении
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Добавление команд отчета
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Анализ продаж по клиентам";
    НоваяКоманда.Идентификатор = "АнализПродажПоКлиентам";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;
КонецФункции

После сохранения файла и перезагрузки его в справочник ДополнительныеОтчетыИОбработки БСП зафиксирует изменение версии и выполнит автоматическое обновление связанных записей в справочнике ВариантыОтчетов.

Способ 2. Сброс настроек варианта в пользовательском режиме

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

Разберем по шагам, как применить новые настройки по умолчанию:

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

Если сброс настроек конкретным пользователем не помог, администратор может выполнить очистку персональных настроек централизованно через раздел «НСИ и администрирование» ➔ «Настройки пользователей и прав» ➔ «Персональные настройки пользователей» ➔ «Очистка настроек», выбрав пользователя и нужный отчет.

Способ 3. Корректная настройка хранилища вариантов в конфигураторе

Проанализируем конфигурацию самого файла внешнего отчета. Для корректной интеграции схемы компоновки с механизмами БСП необходимо проверить свойства корневого объекта отчета в конфигураторе:

  1. В окне свойств внешнего отчета найдем свойство «Хранилище вариантов».
  2. Установим в нем значение ХранилищеВариантовОтчетов (по умолчанию оно может быть пустым).
  3. В свойстве «Хранилище настроек» также укажем ХранилищеВариантовОтчетов или оставим стандартное значение, если переопределение не требуется.

Указание стандартного хранилища вариантов гарантирует, что БСП будет корректно связывать схему СКД с пользовательскими представлениями при обновлении файла.

Способ 4. Принудительное обновление служебных данных БСП

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


&НаСервере
Процедура ОбновитьВариантыОтчетовНаСервере()
    // Принудительный вызов процедуры обновления вариантов подсистемы БСП
    ВариантыОтчетов.Обновить();
КонецПроцедуры

Также можно воспользоваться специализированной обработкой из комплекта поставки БСП — ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf, запустив полное обновление метаданных подсистемы «Варианты отчетов».

Способ 5. Очистка кэша и устранение конфликтов публикации

Если программные методы не дали результата, проверим внешние факторы окружения:

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