Почему новое поле СКД не появляется в отчете на управляемых формах и как это исправить?

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

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

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

В чем причина такого поведения платформы?

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

В дальнейшем при каждом открытии отчета происходит восстановление сохраненного состояния объекта КомпоновщикНастроек. Если пользователь хотя бы раз менял ширину колонок, состав полей, отборы или просто сохранял вариант, платформа загружает из хранилища именно старый сохраненный состав выбранных полей. Сам текст запроса исполняется заново, но новое поле просто не попадает в сгенерированный макет компоновки, так как в сохраненных настройках пользователя его нет.

Способ 1. Сброс настроек через пользовательский интерфейс

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

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

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

Способ 2. Проверка структуры группировок и автополей в СКД

Проанализируем структуру отчета на вкладке «Настройки» в конфигураторе. Нередко новое поле добавляется в список выбранных полей на уровне всего отчета, но отчет содержит сложную иерархию группировок или таблицу.

Выполним следующую проверку:

  1. Перейдем на вкладку Настройки в схеме компоновки.
  2. Выделим корневой элемент структуры Отчет и убедимся, что на вкладке Выбранные поля присутствует требуемое поле.
  3. Последовательно проверим все вложенные группировки. Если на уровне какой-либо группировки переопределен состав выбранных полей и удален специальный элемент Авто, то поля верхнего уровня в этой группировке выводиться не будут. В таком случае необходимо либо вернуть поле Авто, либо добавить новое поле вручную в список полей конкретной группировки.

Способ 3. Проверка ограничений полей и пользовательских макетов

Разберем две неочевидные ошибки в конфигураторе, из-за которых поле блокируется на уровне генератора макета:

  1. Флаги ограничения полей. Откроем вкладку Наборы данных и найдем наше поле в таблице полей. Проверим колонки группы «Ограничение поля». Если для поля случайно установлен флаг Запретить выбор (или снят флаг в колонке Выбор), поле будет физически недоступно для вывода в отчет, даже если оно присутствует в выбранных полях.
  2. Использование собственных макетов оформления. Перейдем на вкладку Макеты. Если в отчете нарисованы собственные макеты группировок или строк, генератор компоновки выводит строго те ячейки, которые зафиксированы в макете. Автоматически новые поля в пользовательский макет не добавляются — необходимо вручную расширить диапазон ячеек макета и привязать к новой ячейке добавленный параметр или поле.

Способ 4. Изменение имени варианта отчета

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

Посмотрим на последовательность действий:

  1. Откроем СКД и перейдем на вкладку Настройки.
  2. В верхней панели нажмем на кнопку редактирования свойств варианта (или перейдем в список вариантов).
  3. Изменим системное имя (идентификатор) варианта отчета, например с Основной на Основной1.
  4. Сохраним конфигурацию и запустим отчет. Платформа не найдет старых пользовательских настроек для нового имени варианта и загрузит настройки по умолчанию из схемы.

Способ 5. Программный сброс настроек при открытии формы

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

Откроем модуль управляемой формы отчета и в процедуре ПриСозданииНаСервере выполним принудительную загрузку настроек схемы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Принудительно загружаем настройки по умолчанию из схемы
	Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Отчет.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
КонецПроцедуры

Такой подход гарантирует, что форма проигнорирует сохраненные ранее настройки пользователя и применит актуальное состояние схемы компоновки данных.

Способ 6. Обновление подсистемы вариантов отчетов в БСП

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

Для принудительного обновления описания отчетов в БСП выполним одно из действий:

  1. Запустим информационную базу с параметром командной строки: /C ЗапуститьОбновлениеИнформационнойБазы.
  2. Или вызовем экспортную процедуру обновления через внешнюю обработку или табло отладки:

ВариантыОтчетов.Обновить();

Способ 7. Очистка пользовательских хранилищ и кэша платформы

Если форма отчета использует ХранилищеПользовательскихНастроекОтчетов, ХранилищеСистемныхНастроек или ХранилищеОбщихНастроек, можно программно удалить сохраненные данные конкретного отчета:


ХранилищеПользовательскихНастроекОтчетов.Удалить("Отчет.НашОтчет", Неопределено, ИмяПользователя());
ХранилищеСистемныхНастроек.Удалить("Отчет.НашОтчет", Неопределено, ИмяПользователя());

Также не стоит забывать про локальный кэш тонкого клиента 1С. При интенсивной разработке внешних отчетов временные файлы форм могут кэшироваться в каталогах пользователя %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8. В случае нестандартного поведения отчета удаление файлов из этих папок позволяет исключить влияние устаревшего локального кэша.

← На главную