Диаграммы в 1С 8.3: СКД, встроенный язык, печать и экспорт

· 9 мин

Содержание

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

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

Ниже — оба способа по шагам, настройка серий и легенды, расшифровка, печать и выгрузка в Excel и PDF, а также частые причины, по которым диаграмма выходит пустой или тормозит.

Как строить график — в СКД или кодом?

Виды диаграмм и из чего они состоят

Любая диаграмма в 1С — это набор точек (деления по горизонтали, категории) и серий (наборы данных, которые сравниваем). На пересечении точки и серии стоит значение. Например, точки — месяцы, серии — склады, значение — сумма продаж.

Вид диаграммы задаётся свойством ВидДиаграммы. На практике используют несколько типов:

  • 📈 График — линии, показывают динамику во времени (выручка по месяцам).
  • 📊 Гистограмма — вертикальные столбцы, сравнивают величины между категориями.
  • 🥧 Круговая — доли одного набора данных в общей сумме (структура расходов).
  • 📐 Измерительная — «спидометр» под одно значение с зонами.
  • 🧊 Объёмные варианты — ГистограммаОбъемная, ГрафикОбъемный, КруговаяОбъемная для 3D-вида.

Круговая диаграмма рисует только одну серию. Если нужно сравнить несколько наборов данных, берите гистограмму или график — там серий может быть сколько угодно.

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

Диаграмма в системе компоновки данных

Это основной способ для отчётов. Диаграмма собирается в схеме компоновки данных почти без кода.

  1. Откройте схему компоновки данных отчёта и перейдите на вкладку Настройки.
  2. В дереве структуры встаньте на корень и добавьте новый элемент типа Диаграмма (команда добавления в командной панели структуры).
  3. У элемента диаграммы появятся две области — Точки и Серии. В «Точки» перетащите поле-категорию (например, Месяц или Номенклатура), в «Серии» — поле-разрез (например, Склад). Если разрез не нужен, серии можно не заполнять — будет один набор данных.
  4. В выбранных полях диаграммы укажите ресурс — то, что считаем (Сумма, Количество). Ресурс должен быть заранее добавлен на вкладке Ресурсы.
  5. Тип диаграммы (график, гистограмма, круговая) задаётся в свойствах самого элемента диаграммы в структуре настроек — там есть параметр вида диаграммы.

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

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

Плюс СКД в том, что пользователь сам может менять отбор и группировки в пользовательских настройках, а диаграмма перестроится. И расшифровка по клику работает без единой строки кода — об этом ниже.

Построение диаграммы в коде

Когда диаграмма нужна прямо на форме (обработка, документ, панель мониторинга), её строят программно. Порядок всегда один: добавить реквизит формы типа Диаграмма, вынести его на форму как элемент, затем заполнить.

&НаСервере
Процедура ЗаполнитьДиаграмму()

    // Диаграмма1 — реквизит формы типа "Диаграмма"
    Диаграмма1.Очистить();
    Диаграмма1.ВидДиаграммы = ВидДиаграммы.Гистограмма;

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

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

КонецПроцедуры

Разберём ключевые методы объекта Диаграмма:

  • Очистить() — убирает все точки, серии и значения. Вызывайте его первой строкой каждого заполнения, иначе при повторном построении данные задвоятся.
  • УстановитьТочку(Ключ) — добавляет точку (или находит существующую с таким ключом) и возвращает её. Текст подписи берётся из представления ключа.
  • УстановитьСерию(Ключ) — то же для серии.
  • УстановитьЗначение(Точка, Серия, Значение) — ставит значение на пересечении точки и серии. Без него диаграмма останется пустой каркас.

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

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

Несколько серий и легенда

Серии — это то, что отличает простой график от сравнительного. Чтобы положить рядом, скажем, выручку и себестоимость или данные по нескольким складам, добавьте несколько серий и заполняйте значение для каждой на той же точке.

Диаграмма1.Очистить();
Диаграмма1.ВидДиаграммы = ВидДиаграммы.График;

СерияВыручка = Диаграмма1.УстановитьСерию("Выручка");
СерияЗатраты = Диаграмма1.УстановитьСерию("Затраты");

Для Каждого Строка Из Данные Цикл
    Точка = Диаграмма1.УстановитьТочку(Строка.Месяц);
    Диаграмма1.УстановитьЗначение(Точка, СерияВыручка, Строка.Выручка);
    Диаграмма1.УстановитьЗначение(Точка, СерияЗатраты, Строка.Затраты);
КонецЦикла;

Когда серий больше одной, без легенды не разобраться, где какая линия. Включите её показ:

Диаграмма1.ПоказыватьЛегенду = Истина;

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

Не путайте точки и серии. Если перепутать разрезы местами, вместо «выручка по месяцам в разрезе складов» получите «выручка по складам в разрезе месяцев» — цифры те же, а читается диаграмма совсем иначе.

Цвет каждой серии можно задать индивидуально — в коде у объекта серии есть свойство цвета, в СКД цвета назначаются через оформление диаграммы. Если цвет не задавать, 1С подберёт его из стандартной палитры.

Шкала значений, подписи и формат

Вертикальную шкалу значений 1С масштабирует автоматически под минимум и максимум данных — отдельной «ручной» настройки минимума и максимума, как в Excel, у диаграммы нет. Поэтому читаемость шкалы решается на уровне данных:

  • Если одно значение на порядок больше остальных, оно «прижмёт» всю шкалу — вынесите выброс в отдельную диаграмму или нормируйте данные.
  • Формат чисел (разряды, валюта, точность) у значений-ресурсов задаётся в оформлении СКД — так на шкале не будет длинных хвостов из копеек.
  • Подписи по горизонтали берутся из текста точек. Чем короче и укрупнённее категория, тем меньше подписи налезают друг на друга.

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

Заголовок диаграммы и показ линий сетки настраиваются в свойствах элемента на форме. Точного управления делениями оси, как в табличном редакторе, в диаграмме 1С нет — это осознанное ограничение, и обходят его подготовкой данных, а не настройками оси.

Расшифровка и клик по точке

Главное преимущество диаграммы в 1С перед картинкой — расшифровка: пользователь кликает по столбцу и проваливается к данным, из которых столбец сложился.

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

В коде расшифровку задают вручную. Методы УстановитьТочку, УстановитьСерию и УстановитьЗначение принимают дополнительный параметр — значение расшифровки (например, ссылку на документ или структуру с отбором). Обработчик клика назначается в конфигураторе: откройте свойства элемента-диаграммы на форме, вкладка События, и привяжите процедуру. В ней вы получаете выбранную точку и серию и решаете, что показать.

Такой сценарий — основа интерактивных панелей: клик по месяцу открывает продажи этого месяца, клик по складу — остатки по складу.

Печать и выгрузка в Excel и PDF

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

// ТабДок — табличный документ с построенной диаграммой
ТабДок.Записать("C:\Отчеты\Продажи.xlsx", ТипФайлаТабличногоДокумента.XLSX);
ТабДок.Записать("C:\Отчеты\Продажи.pdf",  ТипФайлаТабличногоДокумента.PDF);

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

Путь к файлу в примере — для серверного или файлового варианта. В веб-клиенте и при работе на стороне пользователя так писать путь нельзя: формируйте файл во временном хранилище и отдавайте через ПолучитьФайл или интерактивное сохранение.

Важный нюанс: при выгрузке в Excel диаграмма сохраняется как изображение, а не как редактируемый график Excel с привязкой к ячейкам. Если заказчику нужен именно «живой» график в Excel — выгружайте таблицу с числами, а диаграмму он построит средствами Excel.

Частые ошибки и производительность

Большинство проблем с диаграммами — это не «баг платформы», а пропущенный шаг при заполнении. Вот что встречается чаще всего.

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

Отдельно про скорость. Диаграмма тормозит не от «тяжёлого» вида, а от количества точек. Тысяча точек по дням рисуется долго и всё равно нечитаема. Правило простое: агрегируйте данные в запросе до вывода, а не отдавайте диаграмме сырые строки. Для отчёта в СКД это делается группировками, для кода — запросом с ИТОГИ или СГРУППИРОВАТЬ ПО.

Частые вопросы

Можно ли построить диаграмму без программирования?
Да. В системе компоновки данных диаграмма настраивается мышью: добавляете элемент «Диаграмма» в структуру настроек, кладёте поля в «Точки» и «Серии» и выбираете вид. Код не нужен.
Чем диаграмма отличается от сводной диаграммы?
Обычная диаграмма рисует заданный набор точек и серий. Сводная диаграмма интерактивна: пользователь сам перетаскивает поля в области строк и колонок и меняет разрезы на лету, как в сводной таблице.
Как сделать объёмную (3D) диаграмму?
Задайте соответствующий вид: ГистограммаОбъемная, ГрафикОбъемный или КруговаяОбъемная. Набор точек и серий при этом не меняется — отличается только отрисовка.
Можно ли задать свои цвета для серий?
Да. В коде у объекта серии есть свойство цвета, в СКД цвета назначаются через оформление диаграммы. Без явной настройки 1С берёт цвета из стандартной палитры по порядку серий.
Почему при выгрузке в Excel график нельзя редактировать?
При сохранении табличного документа в XLSX диаграмма попадает в файл как изображение. Редактируемый график Excel 1С не создаёт — если он нужен, выгружайте числовую таблицу и стройте график в Excel.