Разработка отчетов на базе Системы компоновки данных (СКД) в современных конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, часто преподносит сюрпризы. Одна из самых распространенных проблем — ситуация, когда программист вносит изменения в схему компоновки (добавляет новые поля, меняет группировки или ресурсы) в конфигураторе, но при запуске отчета в пользовательском режиме система упорно продолжает отображать старую структуру. Рассмотрим подробнее, почему это происходит и как гарантированно обновить настройки отчета.
Прежде чем переходить к методам очистки, разберем ситуацию с технической точки зрения. В конфигурациях, построенных на Библиотеке стандартных подсистем (БСП), настройки отчетов хранятся в нескольких местах одновременно:
Проанализируем основные способы принудительного обновления отчета от самых простых к более сложным.
Первое, что необходимо сделать — попробовать сбросить настройки через стандартный интерфейс управляемой формы. Разберем по шагам, как это реализовано в УТ 11:
В форме отчета нажмем кнопку Еще, затем выберем пункт Установить стандартные настройки. В теории это должно привести КомпоновщикНастроек в состояние, определенное в схеме «по умолчанию». Однако на практике этот метод часто сбрасывает только параметры (даты, значения фильтров), но не саму структуру колонок и группировок, если они были жестко закэшированы в варианте отчета.
Если первый способ не помог, воспользуемся более глубоким методом сброса через редактор настроек компоновки. Этот метод позволяет достучаться до внутренних XML-описаний текущего варианта.
После этого нажмем Завершить редактирование. Как показывает практика, именно это действие часто «проталкивает» изменения из конфигуратора в текущий сеанс пользователя, так как заставляет систему перечитать Settings из объекта метаданных.
Рассмотрим метод, который помог автору обсуждаемой темы. Иногда даже ручной сброс варианта не помогает, если структура СКД изменилась радикально. В этом случае помогает принудительная перезапись настроек через встроенный конструктор.
Почему это работает? При использовании конструктора система заново генерирует объект настроек и принудительно записывает его в хранилище, заменяя «битый» или устаревший кэш новыми данными. Это действие синхронизирует визуальное представление с программной логикой СКД.
В типовых решениях (УТ 11, ERP) за настройки отвечает подсистема «Варианты отчетов». Если мы имеем дело с внешним отчетом или добавленным в расширение, 1С создает запись в специальном справочнике. Выясним причину «залипания» через этот механизм:
Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Отчеты — Варианты отчетов. Найдем в списке наш проблемный отчет. Если мы видим там старое наименование или старые настройки, попробуем просто удалить этот вариант (или пометить на удаление). При следующем открытии отчета система не найдет сохраненных настроек в базе и будет вынуждена создать их с нуля на основе вашей новой схемы из файла или конфигурации.
Если вы отлаживаете внешний отчет через Файл — Открыть, помните, что 1С кэширует структуру формы в рамках текущего сеанса. Посмотрим на алгоритм действий для гарантированного обновления:
Если вы хотите, чтобы при каждом обновлении версии отчета у пользователей автоматически сбрасывались настройки, можно использовать программный метод в модуле объекта отчета. Разберем пример использования обработчика ПриКомпоновкеРезультата.
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
// Если нужно принудительно установить настройки из схемы
// Внимание: это удалит пользовательские отборы!
Если ПараметрыСеанса.НужноОбновитьНастройкиОтчета Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецЕсли;
КонецПроцедуры
Более мягкий способ — проверить соответствие версии настроек. Мы можем добавить в параметры СКД скрытый параметр ВерсияНастроек. При открытии отчета в коде модуля формы мы можем сравнить текущую версию в сохраненных настройках с версией в схеме, и если они различаются — вызвать метод ЗагрузитьНастройки().
Проблема «старой формы» в 1С:УТ 11 — это почти всегда проблема кэширования настроек в базе данных (справочник «Варианты отчетов») или в системном хранилище. Чтобы решить её быстро:
Использование этих методов позволит вам избежать траты времени на борьбу с «призраками» старого кода и сосредоточиться на качественной разработке бизнес-логики отчетов.