Разработка и Конфигурация · 11 мин
Как вывести диаграмму в табличный документ в 1С
Как вывести диаграмму в табличный документ 1С: метод НарисоватьДиаграмму, настройка типа диаграммы, серий и точек, примеры кода, типичные ошибки и FAQ.
Табличный документ в 1С умеет отображать не только ячейки с текстом и числами, но и графические объекты — в том числе диаграммы. Это удобно, когда нужно показать пользователю наглядную аналитику прямо в отчёте: динамику продаж, структуру задолженности, распределение затрат. Диаграмма при этом остаётся частью табличного документа — её можно вывести на печать, сохранить в файл вместе с остальным содержимым.
Для вывода диаграммы используется метод табличного документа НарисоватьДиаграмму(), а сама диаграмма предварительно создаётся как объект встроенного языка с типом «Диаграмма». Отдельно настраиваются серии (наборы данных), точки (категории по осям) и значения. Ниже разобран полный цикл: от создания объекта до проверки результата и типичных ошибок.
Материал ориентирован на разработчиков и внедренцев, работающих с управляемыми и обычными формами на платформе 1С:Предприятие 8.3. Код приводится на встроенном языке и выполняется на сервере или в толстом клиенте — в зависимости от контекста.
Как устроен механизм вывода диаграммы в табличный документ
Диаграмма в табличном документе — это рисунок, который платформа создаёт поверх указанной области ячеек. Сам объект диаграммы не привязан к конкретной ячейке: вы задаёте прямоугольную область (одну или несколько объединённых ячеек), и платформа вписывает график в её границы. Поэтому размер итоговой картинки полностью зависит от ширины и высоты выбранной области.
Работа строится из трёх сущностей встроенного языка: тип диаграммы (перечисление ТипДиаграммы — график, гистограмма, круговая, изометрическая и другие), сам объект Диаграмма, в который загружаются данные, и область табличного документа, куда диаграмма рисуется. Пока не вызван метод НарисоватьДиаграмму(), диаграмма существует только в памяти и нигде не отображается.
Важно понимать ограничение: диаграмма, нарисованная в табличном документе, статична. Пользователь не сможет интерактивно менять её тип или масштаб — это «отпечаток» данных на момент формирования. Если нужна интерактивность, используйте элемент формы «Диаграмма», а не табличный документ.
Создание объекта диаграммы и выбор её типа
Объект создаётся конструктором Новый Диаграмма. Сразу после создания задайте тип и основные параметры отображения. Тип выбирайте исходя из характера данных: для динамики во времени подходят график и гистограмма, для структуры целого — круговая, для сравнения нескольких показателей — гистограмма с накоплением или объёмные варианты.
Диаграмма = Новый Диаграмма;
Диаграмма.ТипДиаграммы = ТипДиаграммы.График;
Диаграмма.ОтображатьЛегенду = Истина;
Диаграмма.ОтображатьЗаголовок = Истина;У объекта есть полезные свойства: ОтображатьЛегенду и ОтображатьЗаголовок управляют видимостью соответствующих элементов, ОбластьЗаголовка.Текст задаёт подпись диаграммы, РежимПолупрозрачности и палитра цветов влияют на оформление. Не перегружайте диаграмму: если серий больше 5–7, легенда и подписи начинают сливаться, и график теряет читаемость.
Для круговой диаграммы обычно достаточно одной серии — каждая точка станет отдельным сектором. Если вы попытаетесь вывести круговую диаграмму с несколькими сериями, результат может оказаться не тем, что ожидалось: платформа отобразит данные иначе, чем в гистограмме, и смысл визуализации потеряется.
Заполнение диаграммы данными: серии, точки, значения
Наполнение выполняется в три шага. Сначала объявляются точки — категории по оси: Диаграмма.УстановитьТочку(ИмяТочки) или через коллекцию Диаграмма.Точки.Добавить(). Затем серии: Диаграмма.УстановитьСерию(ИмяСерии). Наконец, на пересечении каждой пары «точка–серия» ставится числовое значение методом Диаграмма.УстановитьЗначение(Точка, Серия, Значение).
Диаграмма.УстановитьТочку("Январь");
Диаграмма.УстановитьТочку("Февраль");
Диаграмма.УстановитьСерию("Продажи");
Диаграмма.УстановитьЗначение("Январь", "Продажи", 120000);
Диаграмма.УстановитьЗначение("Февраль", "Продажи", 150000);На практике данные почти всегда берутся из запроса. Удобный приём — сначала в цикле по выборке собрать все уникальные точки и серии, затем вторым проходом (или через соответствия) заполнить значения. Следите за типом значения: платформа ожидает число. Если из запроса приходит NULL (например, при левом соединении), подставляйте 0, иначе точка может отобразиться некорректно или вызвать ошибку приведения типа.
Текст точек и серий формируйте коротким: длинные наименования контрагентов или номенклатуры обрежьте функцией Лев(), иначе подписи по осям наложатся друг на друга. Альтернатива — повернуть подписи или отказаться от них в пользу легенды.
Вывод диаграммы в табличный документ
Когда диаграмма заполнена, подготовьте табличный документ и область для рисования. Область получают методом ТабДок.Область(\"R5C2:R20C10\") (адресация по строкам и колонкам) либо берут из макета — это предпочтительный способ, так как размеры и положение задаются визуально в конфигураторе.
ТабДок = Новый ТабличныйДокумент;
// ... вывод шапки и таблицы данных ...
ОбластьДиаграммы = ТабДок.Область("R20C2:R40C12");
ТабДок.НарисоватьДиаграмму(ОбластьДиаграммы, Диаграмма);Метод НарисоватьДиаграмму() принимает два параметра: область и объект диаграммы. После вызова диаграмма становится частью табличного документа и отобразится при его показе пользователю (ТабДок.Показать(), вывод в элемент формы или возврат из функции отчёта). Высота области влияет на пропорции: слишком узкая область «сплющит» график, и подписи перестанут помещаться.
- 1Создайте объект: Диаграмма = Новый Диаграмма и задайте ТипДиаграммы
- 2Добавьте точки и серии из данных запроса
- 3Заполните значения методом УстановитьЗначение(Точка, Серия, Число)
- 4Подготовьте табличный документ и получите область нужного размера
- 5Вызовите ТабДок.НарисоватьДиаграмму(Область, Диаграмма)
- 6Выведите документ пользователю и проверьте читаемость подписей
Вывод через макет
Если диаграмма — часть типового отчёта, создайте в макете табличного документа область-заготовку с нужной высотой строк и шириной колонок. В коде получите её через Макет.ПолучитьОбласть(), выведите в табличный документ методом Вывести() и запомните границы выведенной области, чтобы передать их в НарисоватьДиаграмму(). Так отчёт останется управляемым через макет без правки кода.
Вывод диаграммы в отчёте на СКД
В системе компоновки данных диаграмма обычно выводится не программным рисованием, а через настройки самого отчёта: на вкладке настроек добавляется элемент «Диаграмма», указываются поля точек, серий и ресурс. Результат СКД формируется в табличный документ, и диаграмма оказывается в нём автоматически — писать код НарисоватьДиаграмму() не требуется.
Этот способ предпочтителен для пользовательских отчётов: аналитик может сам менять тип диаграммы и группировки через настройки, не обращаясь к разработчику. Программный вывод оправдан, когда диаграмма должна появиться в произвольном месте нестандартного табличного документа — например, в печатной форме с аналитической вставкой.
Сравнение вариантов
Полный контроль над положением и данными; подходит для печатных форм и произвольных документов. Требует кода для каждого изменения.
Настраивается без кода, пользователь может менять тип и группировки. Ограничена структурой отчёта СКД.
Интерактивность и обновление без пересоздания документа. Не является частью табличного документа и не попадёт в сохранённый файл отчёта.
Проверка результата и типичные ошибки
После формирования документа проверьте: диаграмма видна целиком, все серии присутствуют в легенде, значения на осях соответствуют исходным данным, подписи точек не обрезаны. Быстрый способ контроля — вывести рядом с диаграммой сводную таблицу тех же данных и сверить итоги.
Как проверить результат
График отображается в заданной области целиком
Пустая область — не вызван НарисоватьДиаграмму или нет значений
Все серии и точки из запроса есть на диаграмме
Часть данных отсутствует — серии/точки добавлены не все
Текст читается, не накладывается
Подписи сливаются — слишком много точек или длинные имена
Высоты столбцов/точек соответствуют числам
Нули или пропуски — в данных пришёл NULL
Отдельная группа проблем связана с контекстом выполнения. В тонком клиенте и веб-клиенте создание табличного документа и рисование диаграммы должны выполняться на сервере — на клиенте эти объекты недоступны. Если отчёт формируется в фоновом задании, убедитесь, что табличный документ возвращается из процедуры, а не пытается отобразиться напрямую.
FAQ
Можно ли сохранить табличный документ с диаграммой в Excel или PDF?
Да, методом ТабДок.Записать() с указанием типа файла. Учтите, что при сохранении в Excel диаграмма преобразуется в картинку либо может не перенестись корректно — зависит от версии платформы и формата. В PDF и MXL диаграмма сохраняется как изображение и выглядит так же, как на экране.
Почему диаграмма не отображается, хотя ошибок нет?
Чаще всего не заполнены значения (все нули или серии без точек) либо метод НарисоватьДиаграмму вызван для области другого табличного документа, чем тот, что показывается пользователю. Также проверьте, что код выполняется в контексте, где табличный документ доступен — на сервере, а не в клиентской процедуре.
Как изменить цвета серий диаграммы?
Через свойства серии: у элемента коллекции Диаграмма.Серии есть свойство Цвет, которому присваивается значение типа Цвет. Если цвета не заданы, платформа подбирает их автоматически из стандартной палитры.
Можно ли вывести несколько диаграмм в один табличный документ?
Да, ограничений нет: создайте отдельный объект Диаграмма для каждой и вызовите НарисоватьДиаграмму для разных, непересекающихся областей. Следите за производительностью — документ с несколькими крупными диаграммами формируется и открывается медленнее.
Чем вывод в табличный документ отличается от элемента формы «Диаграмма»?
Диаграмма в табличном документе — статичный рисунок, который сохраняется вместе с документом и подходит для печати и файлов. Элемент формы «Диаграмма» интерактивен, обновляется при изменении данных, но существует только на форме и не попадает в сохранённые файлы отчёта.
Работает ли НарисоватьДиаграмму в фоновом задании?
Да, если табличный документ полностью формируется на сервере внутри фонового задания, а затем результат передаётся в вызывающий сеанс (например, через временное хранилище). Пытаться показать документ из фонового задания напрямую нельзя — у него нет пользовательского интерфейса.
Что важно запомнить
Диаграмма выводится связкой: объект «Диаграмма» с типом, точками, сериями и числовыми значениями плюс метод ТабДок.НарисоватьДиаграмму(Область, Диаграмма). Размер задаётся областью, данные должны быть числовыми без NULL, а для настраиваемых отчётов проще использовать диаграмму в настройках СКД.