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