Многие пользователи 1С сталкиваются с ситуацией, когда в отчетах, построенных на Системе Компоновки Данных (СКД), строки таблицы можно легко свернуть или развернуть по клику на значки «+/-». Однако, при аналогичных группировках колонок такие кнопки почему-то не появляются, что значительно снижает удобство анализа данных. В этой статье мы подробно рассмотрим причину такого поведения и предложим несколько эффективных способов решения данной проблемы, чтобы вы могли настроить свои отчеты СКД максимально удобно для пользователей. Для этой задачи есть инструмент настройки интерактивных связей в отчетах.
Мы разберем, как создать структуру отчета, которая позволит интерактивно управлять видимостью колонок, а также затронем сопутствующие вопросы, такие как появление нежелательных «назойливых» колонок с NULL-значениями, и предложим методы их устранения. Готовы погрузиться в мир гибкой настройки отчетов 1С?
Прежде чем перейти к решению, давайте выясним, почему колонки в отчетах СКД не всегда ведут себя так же, как строки. Стандартное поведение кнопок сворачивания/разворачивания «+/-» в СКД основывается на наличии иерархии группировок. Это означает, что для появления таких кнопок группировка должна иметь подчиненные элементы, которые можно скрыть или показать.
Для строк это достаточно очевидно: если у вас есть группировка «Контрагент», а внутри нее группировка «Договор», то рядом с «Контрагентом» появится кнопка, позволяющая свернуть все договоры данного контрагента. Аналогичная логика применима и к колонкам. Если вы группируете колонки, например, по «Складу», и это самая нижняя группировка в иерархии колонок, то подчиненных колонок у нее нет, и, соответственно, нет ничего, что можно было бы свернуть. В таком случае, система не предоставляет кнопки «+/-».
Представьте, что вы группируете данные по «Складу» на первом уровне. Если бы у вас на втором уровне была еще одна группировка, например, «Группа номенклатуры на складе» или «Месяц реализации по складу», то система сформировала бы иерархию, и над родительской группировкой «Склад» появилась бы желанная кнопка. Проблема возникает, когда мы хотим свернуть или развернуть сами колонки «Склад», а не их подчиненные элементы, которых в нашей текущей структуре нет.
Таким образом, для того чтобы получить интерактивные кнопки сворачивания/разворачивания для наших колонок (например, для каждого склада), нам необходимо искусственно создать иерархию, где каждая колонка «Склад» будет являться подчиненной для некой общей, родительской группировки.
Для создания необходимой иерархии и появления кнопок «+/-» мы воспользуемся приемом с добавлением вычисляемого поля в СКД. Этот метод позволяет создать «пустую» или «общеуказывающую» родительскую группировку, под которую мы затем поместим наши целевые колонки (например, склады).
Создаем новое вычисляемое поле:
Перейдите на вкладку «Вычисляемые поля» в настройках СКД. Создайте новое поле, назовите его, например, ГруппировкаКолонок или ГруппировкаСкладов. В качестве выражения для этого поля укажите просто текстовую строку, например, "Итого" (обязательно в кавычках). Это поле будет служить для создания нашей искусственной родительской группировки.
Ваше выражение будет выглядеть так:
"Итого"
или
"ОбщийСвод"
Вы можете использовать любое осмысленное название, которое будет отображаться как заголовок для вашей сворачиваемой группы колонок.
Настраиваем структуру отчета (группировки колонок):
Перейдите на вкладку «Настройки» и выберите «Структура» отчета. В разделе «Колонки» добавьте новую группировку. Сначала сгруппируйте по нашему новому вычисляемому полю ГруппировкаКолонок (или ГруппировкаСкладов). Это будет наш верхний, родительский уровень группировки.
Затем, внутри этой группировки (как вложенную группировку), добавьте ту группировку, которую вы изначально хотели сворачивать. В нашем примере это будет Склад.
Таким образом, структура колонок будет выглядеть примерно так:
ГруппировкаКолонокСклад (вложенная)Теперь система видит, что у группировки ГруппировкаКолонок есть подчиненные элементы (отдельные склады), и она готова предоставить кнопки для их сворачивания.
Настраиваем расположение итогов для родительской группировки:
После добавления новой группировки ГруппировкаКолонок, она по умолчанию может добавить итоговую колонку в конец таблицы. Если вам не нужен этот общий итог в конце, или вы хотите, чтобы кнопка сворачивания была в другом месте, мы можем это настроить.
Выберите группировку ГруппировкаКолонок в структуре отчета. Перейдите в ее «Другие настройки». Найдите свойство Расположение общих итогов. Установите для него значение Нет. Это позволит убрать итоговую колонку, которая может быть не нужна для нашей искусственной группировки.
Кнопка сворачивания/разворачивания при этом появится над колонкой, которая является «началом» этой родительской группировки. Обычно это первая колонка, входящая в состав данной группировки (то есть, над первой колонкой склада).
Управление расположением кнопок сворачивания (опционально):
Если вы все же хотите, чтобы итоговая колонка (которая теперь будет служить контейнером для кнопки сворачивания) располагалась не в начале, а в конце группы колонок, вы можете изменить свойство Расположение группировок для нашей искусственной группировки ГруппировкаКолонок на значение Конец. В этом случае, итоговая колонка со значком «+/-» переместится в конец блока складов. Помните, что эта итоговая колонка будет отображать общие данные по всем подчиненным складам.
Экспериментируя со свойствами Расположение общих итогов и Расположение группировок для поля ГруппировкаКолонок, вы сможете добиться желаемого вида отчета и расположения кнопок управления.
После выполнения этих шагов, при формировании отчета вы увидите заголовок вашей искусственной группировки (например, «Итого» или «ОбщийСвод») и рядом с ним появятся заветные кнопки «+/-», позволяющие сворачивать и разворачивать все подчиненные колонки складов.
При активной работе с данными в СКД, особенно при использовании левых соединений (LEFT JOIN) в запросах, может возникнуть ситуация, когда в отчете появляются "назойливые" колонки с пустыми или NULL-значениями. Это происходит, когда для записи из "левой" таблицы не найдено соответствующей записи в "правой" таблице по условию соединения. СКД при этом формирует колонку, в которой для таких случаев отображается NULL.
Такие колонки могут значительно портить внешний вид отчета и быть совершенно неинформативными. Рассмотрим, как мы можем от них избавиться:
Обработка NULL-значений в запросе СКД с помощью ЕСТЬNULL:
Наиболее эффективный способ — это обработка NULL-значений непосредственно в тексте запроса, который лежит в основе вашей СКД. Для этого используется функция ЕСТЬNULL(). Она позволяет заменить NULL на любое другое, более подходящее значение (например, 0 для числовых полей, пустую строку "" для строковых полей или логическое ЛОЖЬ для булевых).
Предположим, у вас есть поле Склад.Наименование, которое может быть NULL после левого соединения. В запросе вы можете его преобразовать:
ВЫБРАТЬ
...
ЕСТЬNULL(Склад.Наименование, "Не указан") КАК НаименованиеСклада,
...
ИЗ
...
В этом примере, если Склад.Наименование равно NULL, в отчете будет выведено "Не указан". Это значительно улучшает читаемость и устраняет пустые колонки.
Применяйте эту функцию ко всем полям, которые могут быть источником NULL-значений и отображаться как нежелательные колонки или строки.
Использование отбора в настройках СКД:
Если вы хотите полностью исключить из отчета строки, где определенное поле имеет значение NULL, вы можете настроить отбор в СКД. Это делается на вкладке «Настройки» в разделе «Отбор».
Добавьте новый элемент отбора. В качестве поля выберите то, которое потенциально может быть NULL (например, Склад, если вся строка связана с отсутствующим складом). В качестве вида сравнения выберите НЕ ЗАПОЛНЕНО. Таким образом, отчет будет исключать все записи, для которых выбранное поле не заполнено (является NULL).
Этот метод полезен, когда записи с NULL-значениями по ключевому полю не имеют смысла для анализа и должны быть полностью исключены.
Настройка свойств группировок:
Иногда "назойливая" колонка может быть результатом неправильной настройки итогов или детальных записей. Убедитесь, что для ваших группировок в «Других настройках» свойство Расположение детальных записей не установлено в значение, которое может выводить ненужные агрегированные или пустые данные.
Если вы хотите видеть только итоги, вы можете для детальных записей установить свойство Расположение детальных записей в значение Нет. Это скроет отдельные строки (или колонки) и будет показывать только сводные данные.
Совместное использование этих методов позволит вам полностью контролировать отображение данных в отчете СКД, избегая нежелательных пустых колонок и делая отчет максимально информативным и аккуратным.
Помимо интерактивных кнопок «+/-», СКД предоставляет возможность программно управлять уровнем сворачивания/разворачивания группировок, как строк, так и колонок, уже после формирования табличного документа. Это может быть полезно, если вы хотите, чтобы отчет всегда открывался в определенном, заранее свернутом состоянии, или если вам нужна более сложная логика управления видимостью.
Для управления уровнем сворачивания колонок используется метод ПоказатьУровеньГруппировокКолонок() объекта ТабличныйДокумент. Этот метод позволяет указать, до какого уровня должны быть развернуты колонки в отчете.
Рассмотрим пример использования этого метода:
// Предположим, у нас есть сформированный табличный документ
ТабличныйДокумент = ЭлементыФормы.РезультатОтчета; // или любой другой способ получения ТабличногоДокумента
// Сворачиваем все колонки до первого уровня группировки
// Уровень 0 - это самый верхний уровень, все свернуто
// Уровень 1 - развернут первый уровень, свернуты все подчиненные
ТабличныйДокумент.ПоказатьУровеньГруппировокКолонок(1);
// Если нужно развернуть все колонки
// ТабличныйДокумент.ПоказатьУровеньГруппировокКолонок(0); // или максимальный уровень
Аргумент метода ПоказатьУровеньГруппировокКолонок() принимает число, обозначающее максимальный уровень группировки, который должен быть развернут. Например:
0 или отсутствие аргумента: разворачивает все группировки (показывает детальные записи).1: разворачивает только первый уровень группировок, все подчиненные уровни остаются свернутыми.2: разворачивает первый и второй уровни, и так далее.Этот метод обычно вызывается в обработчике события, например, после формирования отчета или при открытии формы отчета, чтобы установить начальное состояние видимости колонок.
Для получения информации о текущем уровне группировок можно использовать методы ПолучитьУровеньГруппировокКолонок().
Важный момент: программное управление видимостью колонок работает с уже сформированным табличным документом. Интерактивные кнопки «+/-», полученные через описанный выше механизм искусственной группировки, действуют независимо и позволяют пользователю изменять видимость вручную уже после первичной загрузки отчета.
Совмещая интерактивные возможности СКД с программным управлением, вы можете предоставить пользователям мощный и гибкий инструмент для анализа данных.
Как мы увидели, проблема отсутствия интерактивного сворачивания колонок в отчетах СКД 1С 8.3 — это не недостаток функциональности, а скорее особенность работы механизма группировок. Путем создания искусственной родительской группировки с использованием вычисляемого поля, мы успешно имитируем иерархию, необходимую для появления кнопок «+/-».
Мы также разобрали, как эффективно бороться с нежелательными NULL-значениями в отчетах, применяя функцию ЕСТЬNULL() в запросах или настраивая отборы в СКД, что помогает поддерживать чистоту и информативность ваших отчетов.
Наконец, мы рассмотрели возможности программного управления видимостью колонок с помощью метода ПоказатьУровеньГруппировокКолонок(), что дает разработчикам еще больше контроля над представлением данных. Для этого пригодится консоль для отладки кода в пользовательском режиме.
Эти методы позволят вам создавать гораздо более удобные и функциональные отчеты в 1С, повышая удовлетворенность пользователей и эффективность работы с данными. Не бойтесь экспериментировать с настройками СКД, ведь именно в таких тонких моментах кроется потенциал для создания по-настоящему мощных аналитических инструментов. Для этого есть конструктор аналитических витрин и управленческой отчетности.