Почему отчет СКД игнорирует новые параметры и отборы и как это исправить?

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

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

В этой статье мы подробно проанализируем, почему возникает эта проблема, как устроены внутренние механизмы платформы 1С и Библиотеки стандартных подсистем (БСП) в части кэширования настроек, и разберем по шагам 5 надежных способов решения этой проблемы без необходимости создавать файл отчета заново.

Почему СКД игнорирует изменения? Разбор архитектуры настроек

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

  1. Настройки по умолчанию (Схема компоновки данных). Это те настройки, которые мы жестко задали в Конфигураторе на вкладке "Настройки". Они зашиты внутри XML-структуры самого отчета.
  2. Пользовательские настройки. Это настройки, которые изменяет конечный пользователь в режиме "1С:Предприятие" (быстрые отборы, выбранные поля, параметры на форме). Платформа автоматически сохраняет их в системное хранилище настроек базы данных для каждого пользователя индивидуально.
  3. Фиксированные настройки. Эти настройки разработчик может установить программно при открытии формы отчета, и пользователь не имеет возможности их изменить в пользовательском интерфейсе.

Когда мы открываем отчет в режиме "1С:Предприятие", платформа считывает схему компоновки данных, а затем пытается наложить на нее ранее сохраненную структуру пользовательских настроек. Если в старой сохраненной структуре нашего нового параметра (например, &Партнер) просто не существовало, то система инициализирует настройки из кэша. В результате флаг использования нового параметра сбрасывается в значение Ложь, и платформа считает его неиспользуемым. Отчет формируется так, будто мы ничего не добавляли.

Особая роль БСП и справочника "Дополнительные отчеты и обработки"

Если мы работаем в типовой конфигурации (такой как "Управление торговлей", "ERP Управление предприятием" или "Комплексная автоматизация"), ситуация усложняется наличием Библиотеки стандартных подсистем (БСП).

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

Именно поэтому стандартная кнопка "Установить стандартные настройки" в форме отчета часто не помогает. Эта кнопка дает команду сбросить пользовательские настройки до "стандарта", но сама БСП берет этот "стандарт" не из свежего файла .erf, который мы только что загрузили, а из сохраненного ранее в базе данных кэша вариантов отчетов! Происходит рассинхронизация реальной схемы СКД файла и метаданных, сохраненных в информационной базе.

Рассмотрим подробнее эффективные методы решения этой проблемы.

Способ 1: Изменение системного имени объекта отчета (Самый быстрый метод)

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

Разберем этот способ по шагам:

  1. Откройте измененный внешний отчет в Конфигураторе.
  2. Откройте палитру свойств корневого элемента отчета.
  3. Найдите свойство "Имя" (не путайте с Синонимом!). Например, если имя было МойОтчетПоПоступлениям, измените его на МойОтчетПоПоступлениям_Новый или просто добавьте в конец символ версии.
  4. Сохраните файл отчета.
  5. Загрузите обновленный файл в справочник "Дополнительные отчеты и обработки".

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

Способ 2: Полный цикл перезаписи отчета в справочнике БСП

Если вам критически важно сохранить прежнее системное имя отчета, необходимо полностью очистить кэш вариантов отчетов в БСП. Обычное обновление файла через кнопку "Загрузить файл" в карточке дополнительного отчета не всегда очищает кэшированные таблицы вариантов.

Для гарантированной очистки выполните следующие действия:

  1. Зайдите в список дополнительных отчетов и обработок под правами Администратора.
  2. Найдите ваш отчет и пометьте его на удаление.
  3. Перейдите в меню Администрирование — Обслуживание — Удаление помеченных объектов.
  4. Полностью удалите карточку этого отчета из базы данных. На этом шаге БСП физически сотрет все связанные записи в справочнике ВариантыОтчетов и очистит кэш настроек.
  5. Создайте в справочнике дополнительных отчетов новую карточку и заново загрузите ваш актуальный файл отчета .erf. Настройте разделы видимости и права доступа.

Способ 3: Очистка настроек пользователей через администрирование системы

Если проблема наблюдается у конкретных пользователей, которые уже успели поработать с отчетом и сохранить свои варианты, можно точечно удалить их настройки через стандартный интерфейс системы:

  1. Перейдите в раздел НСИ и администрирование — Настройки пользователей и прав.
  2. Откройте ссылку "Очистка настроек".
  3. В открывшейся форме вы можете выбрать конкретного пользователя (или указать "Все пользователи").
  4. В дереве объектов найдите проблемный внешний отчет.
  5. Выделите настройки отчета (отборы, параметры, внешний вид) и нажмите кнопку "Очистить".

После этой процедуры при следующем открытии отчета система загрузит чистые настройки непосредственно из схемы СКД.

Способ 4: Программное обновление вариантов отчетов БСП

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

Мы можем вызвать экспортный метод БСП, который выполнит синхронизацию сохраненных настроек с фактическими схемами файлов:


// Вызов стандартного метода обновления вариантов отчетов БСП
ВариантыОтчетов.Обновить();

Также, если вы пишете код в модуле объекта внешнего отчета, вы можете программно гарантировать включение нового параметра при первом открытии формы. Посмотрим на пример предопределенной процедуры в модуле объекта отчета:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Программная установка использования параметра
    ПараметрПартнер = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Партнер"));
    Если ПараметрПартнер <> Неопределено Тогда
        // Если параметр не включен в настройках, принудительно активируем его
        Если Не ПараметрПартнер.Использование Тогда
            ПараметрПартнер.Использование = Истина;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Этот код гарантирует, что при формировании отчета платформа обязательно обратит внимание на наш параметр, даже если в кэше пользователя флаг использования этого параметра стоял в значении Ложь.

Способ 5: Смена UUID формы отчета

Бывают ситуации, когда настройки "намертво" привязываются к уникальному идентификатору (UUID) управляемой формы отчета. Если у вашего внешнего отчета создана индивидуальная основная форма отчета, попробуйте сделать следующее:

  1. Откройте отчет в Конфигураторе.
  2. Перейдите к ветке "Формы".
  3. Если там есть созданная вами форма, удалите её (предварительно скопировав важный код, если он там был).
  4. Создайте форму заново. Платформа сгенерирует для нее новый UUID.
  5. Если удалять форму нельзя, измените её имя в свойствах (например, с ФормаОтчета на ФормаОтчетаНовая) и переназначьте её как основную форму отчета.

Это действие полностью разорвет связь формы с кэшированным состоянием элементов на клиенте.

Как настроить параметры в самой схеме СКД, чтобы избежать проблем?

Чтобы минимизировать вероятность возникновения подобных ошибок при модификации отчетов, придерживайтесь следующих правил при настройке параметров на вкладке "Параметры" в СКД:

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

← На главную