Гистограмма в 1С: в СКД, на форме и программно
Содержание
Гистограмму в 1С 8.3 строят тремя способами: в системе компоновки данных (СКД), полем диаграммы на управляемой форме или программно из встроенного языка. Во всех случаях работает один объект — «Диаграмма», а столбчатый вид включается значением ТипДиаграммы.Гистограмма.
Способ выбирают по задаче. Нужна картинка в отчёте для пользователя — берите СКД: там диаграмма настраивается мышью, без кода. Диаграмма должна жить на форме обработки или документа и обновляться по кнопке — это поле диаграммы и заполнение из модуля. Разовая визуализация в табличном документе — макет или программное построение.
Чем отличается гистограмма от других типов диаграмм
Гистограмма — это вертикальные столбцы: категория по горизонтали, значение по высоте. В 1С у объекта «Диаграмма» несколько родственных типов, и их легко перепутать:
- 📊
Гистограмма— обычные вертикальные столбцы. - 📈
ГистограммаОбъёмная— те же столбцы с эффектом 3D. - 🧱
ГистограммаНакопления— столбцы из сегментов нескольких серий, сложенных друг на друга. - ➡️
Линейчатая— те же столбцы, но горизонтальные. Это не гистограмма, хотя выглядит похоже. - 🥧
Круговая— доли одного целого, для сравнения рядов не годится.
Если в задаче сказано «столбчатая диаграмма», почти всегда имеется в виду именно Гистограмма. Накопительную (ГистограммаНакопления) берут, когда нужно показать и общий итог, и вклад каждой серии в него.
Дальше разберём построение на примере гистограммы выручки по месяцам и по складам — классическая задача «сравнить величины в разрезе».
Шаг 1. Подготовка данных: запрос и ресурсы
Диаграмме нужны агрегированные данные, а не детальные строки. Если подать тысячу проводок, вы получите тысячу микроскопических столбиков. Поэтому сначала данные сворачивают до нужного разреза.
Логика простая:
- Измерение для оси категорий — то, по чему сравниваем. Месяц, номенклатура, склад, менеджер.
- Ресурс (числовое значение) — высота столбца. Выручка, количество, остаток.
- Второе измерение для серий — опционально. Если нужно в каждом месяце показать несколько складов, склад станет серией.
В запросе обязательно сгруппируйте данные и просуммируйте ресурс:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК Месяц,
Продажи.Склад КАК Склад,
СУММА(Продажи.Выручка) КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ),
Продажи.Склад
УПОРЯДОЧИТЬ ПО
Месяц
Без группировки и суммирования диаграмма превратится в частокол из сотен столбцов — это самая частая причина «нечитаемого» графика.
В СКД группировку задаёт сама система компоновки: поле с суммированием нужно объявить ресурсом на одноимённой вкладке, и агрегат посчитается автоматически.
Порядок столбцов задаёт сортировка. Для дат и периодов упорядочивайте данные по возрастанию, иначе месяцы встанут вперемешку. Для рейтинга (у кого больше) удобнее сортировка по значению ресурса по убыванию — тогда самый высокий столбец окажется первым, и диаграмма сразу читается как топ.
Оптимальное число категорий для гистограммы — примерно от 3 до 12. Меньше — нагляднее круговая диаграмма или просто таблица, больше — столбцы становятся узкими, а подписи нечитаемыми. Если категорий много, сверните второстепенные в строку «Прочие».
Шаг 2. Гистограмма в системе компоновки данных
Это основной способ для отчётов — настройка идёт мышью, без строчки кода.
Порядок действий в схеме компоновки данных:
- Создайте отчёт на основе СКД (внешний отчёт или объект конфигурации) и откройте схему.
- На вкладке «Наборы данных» добавьте запрос из шага 1.
- На вкладке «Ресурсы» перенесите числовое поле (
Выручка) в ресурсы — по нему пойдёт суммирование. - Перейдите на вкладку «Настройки». В дереве структуры щёлкните правой кнопкой по корню и выберите Добавить → Диаграмма.
- У появившегося узла диаграммы две области: «Точки» и «Серии». Перетащите в «Точки» измерение
Месяц, а в «Серии» —Склад(если серии не нужны, область «Серии» оставьте пустой — будет одна серия). - Выделите узел диаграммы и в палитре свойств найдите «Тип диаграммы». Выберите значение «Гистограмма».
- Нажмите «Закрыть и сформировать» либо запустите отчёт в режиме «1С:Предприятие».
Если в «Точки» попадает не группировка, а детальная запись, столбцов будет столько же, сколько строк в выборке. Проверьте, что в области точек стоит именно измерение (месяц, склад), а не поле с уникальными значениями.
Значения для высоты столбцов СКД берёт из ресурсов автоматически — отдельно «привязывать» их к оси не нужно. Если ресурсов несколько, в свойствах диаграммы можно указать, какой из них выводить.
Шаг 3. Поле диаграммы на форме и заполнение из кода
Когда диаграмма должна жить на форме и пересчитываться по кнопке, используют реквизит формы с типом «Диаграмма».
Настройка в конфигураторе:
- Откройте управляемую форму.
- В реквизитах формы добавьте реквизит с типом данных «Диаграмма».
- Перетащите его на форму — появится поле диаграммы.
Заполняют диаграмму в модуле формы. Коллекция серий — наборы данных, коллекция точек — категории по горизонтали, а связку «точка + серия → значение» задаёт метод УстановитьЗначение:
Диаграмма.Очистить();
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;
// одна серия — один набор одноцветных столбцов
Серия = Диаграмма.Серии.Добавить("Выручка");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Точка = Диаграмма.Точки.Добавить(Строка(Выборка.Месяц));
Диаграмма.УстановитьЗначение(Точка, Серия, Выборка.Выручка);
КонецЦикла;
Чтобы сравнить несколько рядов (например, план и факт), добавьте вторую серию и установите два значения на одну точку:
СерияПлан = Диаграмма.Серии.Добавить("План");
СерияФакт = Диаграмма.Серии.Добавить("Факт");
Пока Выборка.Следующий() Цикл
Точка = Диаграмма.Точки.Добавить(Строка(Выборка.Месяц));
Диаграмма.УстановитьЗначение(Точка, СерияПлан, Выборка.План);
Диаграмма.УстановитьЗначение(Точка, СерияФакт, Выборка.Факт);
КонецЦикла;
Перед перезаполнением всегда вызывайте Очистить(), иначе при повторном нажатии кнопки точки и серии будут накапливаться, и диаграмма «поедет».
Метод УстановитьЗначение принимает четвёртым параметром расшифровку. Передайте в неё ссылку на объект (документ, элемент справочника) или структуру — и по щелчку на столбце пользователь провалится в данные, из которых он построен:
Диаграмма.УстановитьЗначение(Точка, Серия, Выборка.Выручка, Выборка.Склад);
Обработку щелчка пишут в событии поля диаграммы: из него читают расшифровку выделенной точки и открывают связанный объект или отчёт. Для пользователя это превращает статичную картинку в точку входа в учёт — ровно то, за чем он к диаграмме и пришёл.
Макет типа «Диаграмма» в конфигураторе — третий, более редкий вариант. Он удобен, когда диаграмму нужно вывести в табличный документ вместе с печатной формой: макет настраивается визуально и заполняется теми же методами Серии.Добавить, Точки.Добавить, УстановитьЗначение.
Настройка осей и масштаба значений
У гистограммы две оси: ось точек (категории по горизонтали) и ось значений (высота по вертикали). По умолчанию масштаб считается автоматически по минимуму и максимуму данных, а столбцы отсчитываются от нуля.
Что чаще всего настраивают:
- Отображение шкалы значений и подписей точек — включается и выключается в палитре свойств поля диаграммы. Если категорий много, подписи по горизонтали налезают друг на друга — тогда их оставляют только у части точек или уменьшают шрифт.
- Легенда — список серий. Для одной серии её обычно скрывают, для нескольких оставляют.
- Формат чисел на шкале — задаётся форматом ресурса. Длинные суммы удобно выводить в тысячах или с группировкой разрядов, иначе шкала занимает половину ширины.
Отдельная проблема — несопоставимые величины. Если один столбец в сто раз выше остальных, мелкие значения сплющиваются в полоску у оси. 1С не умеет логарифмическую шкалу «из коробки», поэтому выброс либо выносят на отдельную диаграмму, либо показывают разрез без аномального периода.
Нулевые и отрицательные значения гистограмма рисует корректно, но визуально они сбивают восприятие: отрицательный столбец уходит вниз от оси. Если минус в данных не ошибка, подпишите ось, чтобы читатель понял направление.
Цвета столбцов, подписи и условное оформление
Типичный вопрос новичка: «почему все столбцы одного цвета?» Потому что цвет в гистограмме задаётся по серии, а не по точке. Одна серия — все её столбцы одного цвета, это нормальное поведение.
Варианты раскрасить диаграмму:
- Задать цвет серии. В коде — через свойство
Цветэлемента коллекции серий. В СКД и в макете — через палитру свойств серии. - Разложить категории по сериям. Если нужен «каждый столбец своим цветом», сделайте каждую категорию отдельной серией с одной точкой. Способ подходит для 3–7 значений, на большом количестве превращается в мешанину.
- Выбрать палитру. У диаграммы есть набор готовых палитр — их меняют в свойствах, когда стандартные цвета не устраивают.
В СКД доступно условное оформление: на одноимённой вкладке настроек задают цвет при выполнении условия — например, подсветить красным столбцы, где выручка ниже плана. Это работает именно в отчётах на компоновке; в поле диаграммы на форме цвет задают из кода вручную.
Подписи значений (число над столбцом) и подписи точек включаются в свойствах диаграммы. Если данных много, подписи значений лучше отключить — они перегружают картинку. При подготовке диаграммы к печати учтите, что светлые и близкие по тону цвета серий на чёрно-белом принтере сольются: для бумажных отчётов выбирайте контрастные цвета или штриховку.
Частые ошибки при построении гистограммы
Ниже проблемы, с которыми сталкиваются при первой настройке. Шаги не повторяем — только симптом и причина.
УстановитьЗначение, а не только Точки.Добавить. В СКД — что числовое поле объявлено ресурсом.Диаграмма.Очистить(). Добавьте очистку в начало процедуры построения.Печать и выгрузка гистограммы
Поле диаграммы на форме само по себе не печатается — форма это не печатный документ. Чтобы распечатать или сохранить гистограмму, её выводят в табличный документ (через отчёт на СКД или макет с диаграммой).
Готовый табличный документ дальше работает штатно:
- Печать — меню
Файл → Печатьили кнопка печати в командной панели документа. - Сохранение в файл —
Файл → Сохранить как, где доступны форматы таблицы (XLSX,ODF),PDFи сохранение листа как картинки. - Из кода — метод
Записатьтабличного документа с указанием формата, напримерТабДок.Записать(Путь, ТипФайлаТабличногоДокумента.XLSX)илиТипФайлаТабличногоДокумента.PDF.
Для отчёта, который часто печатают или рассылают, стройте диаграмму сразу в СКД: сформированный отчёт уже лежит в табличном документе, и его печать и выгрузка в Excel или PDF не требуют дополнительного кода.