При визуализации данных с помощью элемента Диаграмма разработчики часто сталкиваются с ситуацией, когда перед первой категорией по оси X формируется заметный пустой интервал. Особенно ярко эта особенность проявляется, когда используется объемный вид отображения (ТипДиаграммы.ГистограммаОбъемная). Выясним причину такого поведения и подробно разберем практические способы решения этой задачи.
Проанализируем механику работы платформы «1С:Предприятие» при построении объемных графических элементов. Выделяются три ключевых фактора:
NULL, нулем или пустой строкой в качестве наименования категории. Место под столбец резервируется, но сам столбец не отрисовывается, создавая визуальную «дыру».Рассмотрим прямое решение проблемы, найденное автором темы. У объекта Диаграмма предусмотрено специальное свойство РежимПробелов, управляющее отображением промежутков между соседними столбцами и отступами области построения. Установим его в значение, исключающее лишние интервалы.
Посмотрим на пример установки этого свойства в программном коде:
// Отключаем формирование промежутков в диаграмме
Диаграмма.РежимПробелов = РежимПробеловДиаграммы.Нет;
Разберем подробнее особенности этого метода:
РежимПробеловДиаграммы.Нет платформа убирает как краевые пустые зоны, так и промежутки между столбцами внутри категорий, в результате чего столбцы встают вплотную друг к другу.Проанализируем ситуацию, при которой пустое пространство образуется из-за некорректного формирования коллекции точек. Если перед обновлением данных не очистить диаграмму, старые пустые точки могут остаться в памяти и сдвинуть полезные данные вправо.
Разберем по шагам правильный алгоритм заполнения диаграммы:
Очистить().УстановитьЗначение() только для существующих заполненных точек и серий.Посмотрим на программную реализацию:
// Полная очистка предыдущих серий и точек
Элементы.ДиаграммаПродаж.Очистить();
// Инициализируем серию и точку без пустых значений
Серия = Элементы.ДиаграммаПродаж.Серии.Добавить("Выручка");
Для Каждого СтрДанных Из ТаблицаРезультатов Цикл
Если Не ПустаяСтрока(СтрДанных.Период) Тогда
Точка = Элементы.ДиаграммаПродаж.Точки.Добавить(СтрДанных.Период);
Элементы.ДиаграммаПродаж.УстановитьЗначение(Точка, Серия, СтрДанных.Сумма);
КонецЕсли;
КонецЦикла;
Начиная с версии платформы 8.3.24, у объекта Диаграмма появилось свойство ГлубинаОбъемнойДиаграммы. Оно позволяет напрямую регулировать толщину 3D-проекции.
Если мы уменьшаем значение глубины, проекционные боковые грани становятся тоньше, и область построения автоматически уменьшает отступ от левого края, прижимая первый столбец ближе к началу оси.
// Уменьшаем глубину трехмерного эффекта для сокращения боковых отступов
Диаграмма.ТипДиаграммы = ТипДиаграммы.ГистограммаОбъемная;
Диаграмма.ГлубинаОбъемнойДиаграммы = 5; // Значение по умолчанию обычно больше
Рассмотрим еще один прием: смещение ракурса отображения через системное перечисление ОриентацияДиаграммы. Проекция может быть ориентирована в разные стороны, что переносит пустую область на противоположный край диаграммы, освобождая левую часть шкалы.
Посмотрим, как направить проекцию граней в другую сторону:
// Изменяем ракурс проекции для изменения положения скоса граней
Диаграмма.Ориентация = ОриентацияДиаграммы.ЮгВосток;
Если специфика отчета не требует обязательного 3D-оформления, наиболее чистым с точки зрения верстки решением является использование обычной плоской гистограммы (ТипДиаграммы.Гистограмма).
В двумерном режиме у платформы полностью отпадает необходимость выделять технологическое пространство под отрисовку перспективы граней, и крайние столбцы сразу располагаются строго по рискам координатной шкалы.
// Переключение на плоский вид без проекционных отступов
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;
Важное замечание: В платформе 1С для объекта ОбластьПостроенияДиаграммы не предусмотрены свойства для задания внутренних полей (padding или margin) в пикселях. Поэтому регулировка пустых зон слева и справа всегда выполняется через комплексное применение описанных параметров: режима пробелов, глубины трехмерности, ориентации и контроля чистоты передаваемых наборов данных.