Разработка отчетов на схеме компоновки данных (СКД) в 1С — мощный и гибкий инструмент. Однако разработчики часто сталкиваются с неочевидным поведением платформы. Например, вы добавляете новый параметр в конфигураторе, настраиваете его отображение, но в режиме Предприятия он упорно отказывается появляться на форме отчета, оставаясь доступным только через глубокие настройки варианта. Или другая проблема: как заставить отчет выводить колонки за периоды, в которых вообще не было оборотов?
В этой статье мы подробно разберем, как устроен механизм вывода параметров на форму, почему платформа «игнорирует» изменения структуры из конфигуратора, как правильно распространить настройки отчета на всех пользователей и как добиться вывода пустых колонок с нулевыми показателями.
---
Типичная ситуация: в схему компоновки добавлен новый параметр (например, Период или Организация). Вы указали для него те же свойства, что и для старых, работающих параметров, но на форме он так и не появился. Выясним причину такого поведения.
Платформа «1С:Предприятие» активно оптимизирует работу с отчетами. При первом открытии отчета пользователем система кэширует его настройки. В последующем, открывая отчет, система берет сохраненные пользовательские настройки из базы данных или системного кэша и накладывает их поверх схемы из конфигуратора. Если на момент сохранения старых настроек нового параметра еще не существовало, то в сохраненной структуре его тоже нет. Платформа просто «не знает» о нем при чтении кэша и скрывает его от пользователя, оставляя доступным только в меню «Изменить вариант».
Для того чтобы вывести параметр непосредственно в область быстрых настроек на форме, выполним следующие шаги в конфигураторе:
После сохранения конфигурации в режиме Предприятия необходимо выполнить сброс кэша настроек для этого отчета. Для этого в форме отчета нажмем кнопку Еще -> Установить стандартные настройки. Это принудительно очистит сохраненный пользовательский кэш и применит структуру отчета напрямую из конфигуратора.
Лайфхак для разработчика: Чтобы каждый раз во время отладки отчета не нажимать кнопку сброса настроек, на время разработки измените имя основного варианта отчета в конфигураторе (например, с «Основной» на «Основной_Отладка»). Для платформы это будет абсолютно новый вариант, для которого еще нет кэша в базе данных, и все параметры будут отображаться корректно при каждом запуске.
---
Если отчет разрабатывается для массового использования, часто требуется настроить его один раз «как надо» и распространить эту настройку на всех пользователей информационной базы. В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), например, в «1С:Бухгалтерия 3.0», этот механизм автоматизирован. В качестве альтернативы для централизованного управления доступом к настройкам подойдёт подсистема для динамической настройки вариантов отчетов.
Проанализируем шаги, необходимые для интеграции отчета с механизмами БСП и публикации общих настроек:
Откроем свойства нашего отчета в дереве метаданных. На вкладке «Прочие» найдем свойства хранилищ. Для корректной интеграции с БСП укажем:
ХранилищеПользовательскихНастроекОтчетовХранилищеВариантовОтчетовЗайдем в режиме Предприятия под пользователем с административными правами (или правами на изменение вариантов отчетов). Настроим отчет (заполним параметры, отборы, выберем нужные поля) и выполним команду Еще -> Вариант отчета -> Сохранить как...
В появившемся окне сохранения в поле «Доступен» переключим тумблер в положение «Всем пользователям». Теперь этот вариант увидят все коллеги.
В актуальных версиях БСП можно передавать точечные настройки конкретным коллегам. Для этого выполним команду Еще -> Прочее -> Поделиться настройками. В открывшемся списке выберем сотрудников или группы пользователей, которым необходимо отправить текущий вид отчета.
---
Давайте четко разберем и разграничим эти два понятия на уровне платформы 1С:
ХранилищеВариантовОтчетов.ХранилищеПользовательскихНастроекОтчетов индивидуально для каждого пользователя.---
Рассмотрим сложную задачу: нам необходимо построить отчет-таблицу, где колонками являются периоды (например, фиксированные недели месяца или самодельные интервалы дат), и нам важно, чтобы все колонки выводились всегда, даже если за конкретную неделю не было совершено ни одной хозяйственной операции. По умолчанию СКД просто скрывает колонку группировки, если для нее нет записей в выборке данных. Для разбора подобной структуры колонок пригодится пример формирования шапки отчета по неделям и месяцам в СКД.
Использование конструкции ЕСТЬNULL(Поле, 0) в классическом запросе здесь не поможет. Если в базе физически нет записей за период, левое соединение без опорной таблицы периодов вернет пустоту, и группировка по колонкам СКД проигнорирует этот интервал. Разберем по шагам правильное решение этой задачи.
В запросе СКД нам необходимо сформировать временную таблицу, которая гарантированно содержит все требуемые временные интервалы (например, пять фиксированных интервалов по 7 дней). Сделать это можно с помощью объединения пустых запросов или использования виртуальной таблицы РегистрСведений.КалендарныеГрафики.
Рассмотрим пример генерации интервалов в запросе:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(&ПериодРегистрации, МЕСЯЦ) КАК ДатаНачала,
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ПериодРегистрации, МЕСЯЦ), ДЕНЬ, 6) КАК ДатаОкончания,
1 КАК НомерИнтервала
ПОМЕСТИТЬ ВТ_Интервалы
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ПериодРегистрации, МЕСЯЦ), ДЕНЬ, 7),
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ПериодРегистрации, МЕСЯЦ), ДЕНЬ, 13),
2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Интервалы.НомерИнтервала КАК НомерИнтервала,
ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК Сумма
ИЗ
ВТ_Интервалы КАК ВТ_Интервалы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,, Авто,,) КАК Продажи
ПО Продажи.Период МЕЖДУ ВТ_Интервалы.ДатаНачала И ВТ_Интервалы.ДатаОкончания
Благодаря левому соединению к опорной таблице интервалов, в итоговом результате нашего запроса гарантированно будут присутствовать строки для каждого интервала (со значениями NULL или 0 во второй таблице).
Даже при наличии всех строк в запросе, если СКД рассчитывает итоги по ресурсам, значение NULL может привести к тому, что колонка исчезнет или отобразится пустой. Чтобы гарантировать вывод нулей в пустых ячейках таблицы, настроим выражение ресурса.
Перейдем на вкладку «Ресурсы» схемы компоновки данных. Для числового поля (например, Сумма) в колонке «Выражение» вместо стандартного Сумма(Сумма) напишем специальное выражение с обработкой пустоты:
ЕСТЬNULL(Сумма(Сумма), 0)
Такой подход заставляет компоновщик данных подставлять числовой ноль в те ячейки кросс-таблицы, для которых при расчете итогов по группировкам строк и колонок не нашлось фактических записей в исходной выборке. В результате структура таблицы останется неизменной и все колонки будут выведены на экран.