Гистограмма в 1С: в СКД, на форме и программно

· 9 мин

Содержание

Гистограмму в 1С 8.3 строят тремя способами: в системе компоновки данных (СКД), полем диаграммы на управляемой форме или программно из встроенного языка. Во всех случаях работает один объект — «Диаграмма», а столбчатый вид включается значением ТипДиаграммы.Гистограмма.

Способ выбирают по задаче. Нужна картинка в отчёте для пользователя — берите СКД: там диаграмма настраивается мышью, без кода. Диаграмма должна жить на форме обработки или документа и обновляться по кнопке — это поле диаграммы и заполнение из модуля. Разовая визуализация в табличном документе — макет или программное построение.

Какой способ построения гистограммы выбрать?

Чем отличается гистограмма от других типов диаграмм

Гистограмма — это вертикальные столбцы: категория по горизонтали, значение по высоте. В 1С у объекта «Диаграмма» несколько родственных типов, и их легко перепутать:

  • 📊 Гистограмма — обычные вертикальные столбцы.
  • 📈 ГистограммаОбъёмная — те же столбцы с эффектом 3D.
  • 🧱 ГистограммаНакопления — столбцы из сегментов нескольких серий, сложенных друг на друга.
  • ➡️ Линейчатая — те же столбцы, но горизонтальные. Это не гистограмма, хотя выглядит похоже.
  • 🥧 Круговая — доли одного целого, для сравнения рядов не годится.

Если в задаче сказано «столбчатая диаграмма», почти всегда имеется в виду именно Гистограмма. Накопительную (ГистограммаНакопления) берут, когда нужно показать и общий итог, и вклад каждой серии в него.

Дальше разберём построение на примере гистограммы выручки по месяцам и по складам — классическая задача «сравнить величины в разрезе».

Шаг 1. Подготовка данных: запрос и ресурсы

Диаграмме нужны агрегированные данные, а не детальные строки. Если подать тысячу проводок, вы получите тысячу микроскопических столбиков. Поэтому сначала данные сворачивают до нужного разреза.

Логика простая:

  1. Измерение для оси категорий — то, по чему сравниваем. Месяц, номенклатура, склад, менеджер.
  2. Ресурс (числовое значение) — высота столбца. Выручка, количество, остаток.
  3. Второе измерение для серий — опционально. Если нужно в каждом месяце показать несколько складов, склад станет серией.

В запросе обязательно сгруппируйте данные и просуммируйте ресурс:

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК Месяц,
    Продажи.Склад КАК Склад,
    СУММА(Продажи.Выручка) КАК Выручка
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ),
    Продажи.Склад
УПОРЯДОЧИТЬ ПО
    Месяц

Без группировки и суммирования диаграмма превратится в частокол из сотен столбцов — это самая частая причина «нечитаемого» графика.

В СКД группировку задаёт сама система компоновки: поле с суммированием нужно объявить ресурсом на одноимённой вкладке, и агрегат посчитается автоматически.

Порядок столбцов задаёт сортировка. Для дат и периодов упорядочивайте данные по возрастанию, иначе месяцы встанут вперемешку. Для рейтинга (у кого больше) удобнее сортировка по значению ресурса по убыванию — тогда самый высокий столбец окажется первым, и диаграмма сразу читается как топ.

Оптимальное число категорий для гистограммы — примерно от 3 до 12. Меньше — нагляднее круговая диаграмма или просто таблица, больше — столбцы становятся узкими, а подписи нечитаемыми. Если категорий много, сверните второстепенные в строку «Прочие».

Шаг 2. Гистограмма в системе компоновки данных

Это основной способ для отчётов — настройка идёт мышью, без строчки кода.

Порядок действий в схеме компоновки данных:

  1. Создайте отчёт на основе СКД (внешний отчёт или объект конфигурации) и откройте схему.
  2. На вкладке «Наборы данных» добавьте запрос из шага 1.
  3. На вкладке «Ресурсы» перенесите числовое поле (Выручка) в ресурсы — по нему пойдёт суммирование.
  4. Перейдите на вкладку «Настройки». В дереве структуры щёлкните правой кнопкой по корню и выберите Добавить → Диаграмма.
  5. У появившегося узла диаграммы две области: «Точки» и «Серии». Перетащите в «Точки» измерение Месяц, а в «Серии» — Склад (если серии не нужны, область «Серии» оставьте пустой — будет одна серия).
  6. Выделите узел диаграммы и в палитре свойств найдите «Тип диаграммы». Выберите значение «Гистограмма».
  7. Нажмите «Закрыть и сформировать» либо запустите отчёт в режиме «1С:Предприятие».

Если в «Точки» попадает не группировка, а детальная запись, столбцов будет столько же, сколько строк в выборке. Проверьте, что в области точек стоит именно измерение (месяц, склад), а не поле с уникальными значениями.

Значения для высоты столбцов СКД берёт из ресурсов автоматически — отдельно «привязывать» их к оси не нужно. Если ресурсов несколько, в свойствах диаграммы можно указать, какой из них выводить.

Шаг 3. Поле диаграммы на форме и заполнение из кода

Когда диаграмма должна жить на форме и пересчитываться по кнопке, используют реквизит формы с типом «Диаграмма».

Настройка в конфигураторе:

  1. Откройте управляемую форму.
  2. В реквизитах формы добавьте реквизит с типом данных «Диаграмма».
  3. Перетащите его на форму — появится поле диаграммы.

Заполняют диаграмму в модуле формы. Коллекция серий — наборы данных, коллекция точек — категории по горизонтали, а связку «точка + серия → значение» задаёт метод УстановитьЗначение:

Диаграмма.Очистить();
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;

// одна серия — один набор одноцветных столбцов
Серия = Диаграмма.Серии.Добавить("Выручка");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Точка = Диаграмма.Точки.Добавить(Строка(Выборка.Месяц));
    Диаграмма.УстановитьЗначение(Точка, Серия, Выборка.Выручка);
КонецЦикла;

Чтобы сравнить несколько рядов (например, план и факт), добавьте вторую серию и установите два значения на одну точку:

СерияПлан = Диаграмма.Серии.Добавить("План");
СерияФакт = Диаграмма.Серии.Добавить("Факт");

Пока Выборка.Следующий() Цикл
    Точка = Диаграмма.Точки.Добавить(Строка(Выборка.Месяц));
    Диаграмма.УстановитьЗначение(Точка, СерияПлан, Выборка.План);
    Диаграмма.УстановитьЗначение(Точка, СерияФакт, Выборка.Факт);
КонецЦикла;

Перед перезаполнением всегда вызывайте Очистить(), иначе при повторном нажатии кнопки точки и серии будут накапливаться, и диаграмма «поедет».

Метод УстановитьЗначение принимает четвёртым параметром расшифровку. Передайте в неё ссылку на объект (документ, элемент справочника) или структуру — и по щелчку на столбце пользователь провалится в данные, из которых он построен:

Диаграмма.УстановитьЗначение(Точка, Серия, Выборка.Выручка, Выборка.Склад);

Обработку щелчка пишут в событии поля диаграммы: из него читают расшифровку выделенной точки и открывают связанный объект или отчёт. Для пользователя это превращает статичную картинку в точку входа в учёт — ровно то, за чем он к диаграмме и пришёл.

Макет типа «Диаграмма» в конфигураторе — третий, более редкий вариант. Он удобен, когда диаграмму нужно вывести в табличный документ вместе с печатной формой: макет настраивается визуально и заполняется теми же методами Серии.Добавить, Точки.Добавить, УстановитьЗначение.

Настройка осей и масштаба значений

У гистограммы две оси: ось точек (категории по горизонтали) и ось значений (высота по вертикали). По умолчанию масштаб считается автоматически по минимуму и максимуму данных, а столбцы отсчитываются от нуля.

Что чаще всего настраивают:

  • Отображение шкалы значений и подписей точек — включается и выключается в палитре свойств поля диаграммы. Если категорий много, подписи по горизонтали налезают друг на друга — тогда их оставляют только у части точек или уменьшают шрифт.
  • Легенда — список серий. Для одной серии её обычно скрывают, для нескольких оставляют.
  • Формат чисел на шкале — задаётся форматом ресурса. Длинные суммы удобно выводить в тысячах или с группировкой разрядов, иначе шкала занимает половину ширины.

Отдельная проблема — несопоставимые величины. Если один столбец в сто раз выше остальных, мелкие значения сплющиваются в полоску у оси. 1С не умеет логарифмическую шкалу «из коробки», поэтому выброс либо выносят на отдельную диаграмму, либо показывают разрез без аномального периода.

Нулевые и отрицательные значения гистограмма рисует корректно, но визуально они сбивают восприятие: отрицательный столбец уходит вниз от оси. Если минус в данных не ошибка, подпишите ось, чтобы читатель понял направление.

Цвета столбцов, подписи и условное оформление

Типичный вопрос новичка: «почему все столбцы одного цвета?» Потому что цвет в гистограмме задаётся по серии, а не по точке. Одна серия — все её столбцы одного цвета, это нормальное поведение.

Варианты раскрасить диаграмму:

  • Задать цвет серии. В коде — через свойство Цвет элемента коллекции серий. В СКД и в макете — через палитру свойств серии.
  • Разложить категории по сериям. Если нужен «каждый столбец своим цветом», сделайте каждую категорию отдельной серией с одной точкой. Способ подходит для 3–7 значений, на большом количестве превращается в мешанину.
  • Выбрать палитру. У диаграммы есть набор готовых палитр — их меняют в свойствах, когда стандартные цвета не устраивают.

В СКД доступно условное оформление: на одноимённой вкладке настроек задают цвет при выполнении условия — например, подсветить красным столбцы, где выручка ниже плана. Это работает именно в отчётах на компоновке; в поле диаграммы на форме цвет задают из кода вручную.

Подписи значений (число над столбцом) и подписи точек включаются в свойствах диаграммы. Если данных много, подписи значений лучше отключить — они перегружают картинку. При подготовке диаграммы к печати учтите, что светлые и близкие по тону цвета серий на чёрно-белом принтере сольются: для бумажных отчётов выбирайте контрастные цвета или штриховку.

Частые ошибки при построении гистограммы

Ниже проблемы, с которыми сталкиваются при первой настройке. Шаги не повторяем — только симптом и причина.

Диагностика: выберите симптом

Печать и выгрузка гистограммы

Поле диаграммы на форме само по себе не печатается — форма это не печатный документ. Чтобы распечатать или сохранить гистограмму, её выводят в табличный документ (через отчёт на СКД или макет с диаграммой).

Готовый табличный документ дальше работает штатно:

  • Печать — меню Файл → Печать или кнопка печати в командной панели документа.
  • Сохранение в файл — Файл → Сохранить как, где доступны форматы таблицы (XLSX, ODF), PDF и сохранение листа как картинки.
  • Из кода — метод Записать табличного документа с указанием формата, например ТабДок.Записать(Путь, ТипФайлаТабличногоДокумента.XLSX) или ТипФайлаТабличногоДокумента.PDF.

Для отчёта, который часто печатают или рассылают, стройте диаграмму сразу в СКД: сформированный отчёт уже лежит в табличном документе, и его печать и выгрузка в Excel или PDF не требуют дополнительного кода.

Чем гистограмма отличается от линейчатой диаграммы?
Гистограмма — вертикальные столбцы, линейчатая — горизонтальные. Данные и настройка одинаковые, отличается только значение свойства «Тип диаграммы».
Как построить гистограмму без программирования?
Через систему компоновки данных. Диаграмма добавляется в структуру отчёта, в «Точки» переносится измерение, тип выбирается в свойствах — код не нужен.
Можно ли сделать несколько столбцов на одну категорию?
Да. Добавьте несколько серий (например, «План» и «Факт») и установите значение каждой серии на одну и ту же точку — столбцы встанут группой.
Почему диаграмма строится по детальным строкам, а не по итогам?
В область точек попало поле с уникальными значениями вместо группировки. Сгруппируйте данные в запросе и перенесите в «Точки» измерение, а не детальное поле.
Как показать проценты, а не абсолютные суммы?
Используйте тип «Гистограмма нормированная» — она приводит серии к 100% и показывает долю каждой в общей высоте столбца.