Как исправить ошибку «Переменная не определена (Диаграмма)» и настроить масштаб графика в 1С 7.7

Программист 1С v7.7
← На главную

Работа с графическими данными в среде 1С:Предприятие 7.7 существенно отличается от современных версий платформы. Одной из наиболее частых проблем, с которыми сталкиваются разработчики при построении отчетов, является ситуация, когда объект Диаграмма, визуально размещенный в макете таблицы, оказывается «невидимым» для программного кода. Это приводит к ошибке «Переменная не определена (Диаграмма)». Кроме того, даже после успешной инициализации объекта часто возникают сложности с визуализацией: линии графика могут «обрезаться» или уходить за границы видимости.

В этой статье мы подробно разберем, как правильно связать объект в таблице с программным модулем и как программно управлять масштабированием осей, чтобы все данные отображались корректно.

Причина ошибки «Переменная не определена» и ее решение

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

В 1С 7.7 для того, чтобы объект диаграммы стал доступен в контексте модуля, недостаточно просто разместить его на листе. Рассмотрим основные шаги по исправлению этой ситуации:

  1. Проверка идентификатора объекта: Откройте таблицу отчета в конфигураторе. Нажмите правой кнопкой мыши на область диаграммы и выберите «Свойства». В поле «Идентификатор» (или «Текст» в зависимости от типа вставки) должно быть указано точное имя переменной, к которой вы обращаетесь в коде, например, Диагр1.
  2. Назначение процедуры заполнения: Как показывает практика (и решение автора темы), критически важным моментом является заполнение поля «Процедура» в свойствах объекта диаграммы. Если это поле пустое, система может не инициализировать объект должным образом при формировании таблицы. Здесь следует указать имя экспортной процедуры из модуля, которая будет отвечать за отрисовку данных.
  3. Доступ через таблицу: Помните, что диаграмма в 7.7 является объектом таблицы. Рассмотрим пример правильного обращения к объекту после того, как таблица была создана:

// Создаем объект таблицы
Таб = СоздатьОбъект("Таблица");
// Загружаем макет
Таб.ИсходнаяТаблица("Отчет");
// Выводим секцию, содержащую диаграмму
Таб.ВывестиСекцию("График");
// Обращаемся к диаграмме по идентификатору, заданному в свойствах
Диагр = Таб.Диагр1;

Если прямое обращение не помогает, попробуйте использовать метод ПолучитьОбъект(), если диаграмма вставлена как рисунок, хотя в большинстве стандартных случаев достаточно корректно заданного идентификатора и процедуры заполнения.

Проблемы масштабирования: почему линии графика обрезаются?

Разберем вторую проблему: ситуация, когда значения выше определенного порога (например, 28) становятся невидимыми. Это происходит из-за того, что механизм автомасштабирования в 1С 7.7 не всегда адекватно реагирует на динамически изменяющиеся данные или имеет жестко заданные границы в свойствах макета.

Проанализируем методы управления масштабом, которые помогут нам отобразить все линии графика целиком:

Использование свойства АвтоМасштаб

По умолчанию у объекта Диаграмма может быть включен режим АвтоМасштаб. Однако при резких скачках значений или если вы сначала вывели пустую диаграмму, а потом заполнили ее, алгоритм может «зафиксировать» неверный диапазон. Посмотрим, как управлять этим программно:


// Отключаем автоматический расчет, если он работает некорректно
Диагр.АвтоМасштаб = 0; 
// Либо принудительно включаем его перед обновлением данных
Диагр.АвтоМасштаб = 1;

Ручная установка границ диапазона

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

  1. Проанализируем массив данных перед заполнением диаграммы и найдем максимальное значение (МаксЗн).
  2. Установим свойства МинимальноеЗначение и МаксимальноеЗначение.

// Устанавливаем границы шкалы вручную
Диагр.МинимальноеЗначение = 0;
// Добавляем небольшой запас (например, 10%), чтобы график не упирался в верхний край
Диагр.МаксимальноеЗначение = МаксЗн * 1.1; 

Важно помнить, что если в данных присутствуют отрицательные значения, МинимальноеЗначение также следует рассчитывать динамически.

Обязательное обновление объекта

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


// После всех манипуляций с данными и масштабом
Диагр.Обновить();

Дополнительные советы по работе с диаграммами в 1С 7.7

Рассмотрим еще несколько нюансов, которые помогут сделать ваши отчеты более профессиональными и стабильными:

Резюмируем: Для успешного построения графика в 1С 7.7 необходимо четко следить за соответствием идентификаторов в макете и коде, обязательно указывать процедуру заполнения в свойствах объекта и не бояться переходить на ручное управление масштабом через свойства МаксимальноеЗначение и МинимальноеЗначение. Это позволит избежать «обрезанных» графиков и обеспечит корректную визуализацию любых управленческих или бухгалтерских данных.

← На главную