1С 8.3 Диаграмма
Данные > Примеры кода 1С > 1С 8.3 Диаграмма
Диаграмма в 1С 8.3 - это объект встроенного языка который служит для графического представления экономической и аналитической информации линейными отрезками или геометрическими фигурами, позволяющее быстро оценить соотношение нескольких величин. В свойстве диаграммы "ТипДиаграммы" определяется графический тип: график, гистограмма, круговая, изометрическая, воронка и т.п.. Для работы с диаграммами определены понятия: Серия (график функции), Точка (координата X), Значение (координата Y), Расшифровка (описание). Диаграммы в 1С 8.3 поддерживают механизм расшифровок и являются интерактивными. Кликая на нужном показателе, пользователь может получить детальную информацию или сформировать новый отчет. На платформе 1С 8.3 имеется демонстрационная конфигурация (онлайн) для визуального представления о диаграммах: https://platform.demo.1c.ru/ChartsDemo/.
Оглавление:
Построение диаграммы (график) в 1С 8.3:
&НаСервере
Процедура ПостроениеДиаграммыГрафик()
Серия = Диаграмма.Серии.Добавить("ABC"); // На форме
КоличествоТочек = 25;
Для Значение_Y = 1 По КоличествоТочек Цикл
Точка_X = Диаграмма.УстановитьТочку(Значение_Y);
Диаграмма.УстановитьЗначение(Точка_X, Серия, Значение_Y);
КонецЦикла;
КонецПроцедуры
Процедура ПостроениеДиаграммыГрафик()
Серия = Диаграмма.Серии.Добавить("ABC"); // На форме
КоличествоТочек = 25;
Для Значение_Y = 1 По КоличествоТочек Цикл
Точка_X = Диаграмма.УстановитьТочку(Значение_Y);
Диаграмма.УстановитьЗначение(Точка_X, Серия, Значение_Y);
КонецЦикла;
КонецПроцедуры
Построение диаграммы на основании запроса в 1С 8.3:
&НаСервере
Процедура ПостроениеДиаграммыНаОснованииЗапроса()
Диагр = Элементы.Диаграмма;
// Очистка данных диаграммы, если она была заполнена
Диагр.КоличествоСерий = 0;
Диагр.КоличествоТочек = 0;
// Количество серий будет ограничиваться
Диагр.МаксимумСерий = МаксимумСерий.Ограничено;// м.б. НеЗадано, Процент
Диагр.МаксимумСерийКоличество = 25;
// ВидПодписей - может принимать значения: Значение, Нет, Серия, Точка и т.п.
Диагр.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диагр.ОбластьЗаголовка.Текст = "Товарооборот";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияОбороты.Товар,
| СУММА(РеализацияОбороты.КоличествоОборот) КАК КоличествоОборот
| СУММА(РеализацияОбороты.СуммаОборот) КАК СуммаОборот
|ИЗ
| РегистрНакопления.Реализация.Обороты(, , , ) КАК РеализацияОбороты
|СГРУППИРОВАТЬ ПО
| РеализацияОбороты.Товар";
Результат = Запрос.Выполнить();
Диагр.Обновление = Ложь; // Только на время вывода диаграммы
// Установка единственной точки
Диагр.КоличествоТочек = 1;
Диагр.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл // Заполнение диаграммы данными
// Количество серий (max=25), если без ограничений - то установился бы весь результат запроса
КоличествоСерий = Диагр.Серии.Количество();
Диагр.КоличествоСерий = КоличествоСерий + 1;
Диагр.Серии[КоличествоСерий].Текст = Выборка.Товар;
// Первый параметр=0, из-за того, что КоличествоТочек = 1
Диагр.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
Диагр.Обновление = Истина; // В конце необходимо обновить для результата
КонецПроцедуры
Процедура ПостроениеДиаграммыНаОснованииЗапроса()
Диагр = Элементы.Диаграмма;
// Очистка данных диаграммы, если она была заполнена
Диагр.КоличествоСерий = 0;
Диагр.КоличествоТочек = 0;
// Количество серий будет ограничиваться
Диагр.МаксимумСерий = МаксимумСерий.Ограничено;// м.б. НеЗадано, Процент
Диагр.МаксимумСерийКоличество = 25;
// ВидПодписей - может принимать значения: Значение, Нет, Серия, Точка и т.п.
Диагр.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диагр.ОбластьЗаголовка.Текст = "Товарооборот";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияОбороты.Товар,
| СУММА(РеализацияОбороты.КоличествоОборот) КАК КоличествоОборот
| СУММА(РеализацияОбороты.СуммаОборот) КАК СуммаОборот
|ИЗ
| РегистрНакопления.Реализация.Обороты(, , , ) КАК РеализацияОбороты
|СГРУППИРОВАТЬ ПО
| РеализацияОбороты.Товар";
Результат = Запрос.Выполнить();
Диагр.Обновление = Ложь; // Только на время вывода диаграммы
// Установка единственной точки
Диагр.КоличествоТочек = 1;
Диагр.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл // Заполнение диаграммы данными
// Количество серий (max=25), если без ограничений - то установился бы весь результат запроса
КоличествоСерий = Диагр.Серии.Количество();
Диагр.КоличествоСерий = КоличествоСерий + 1;
Диагр.Серии[КоличествоСерий].Текст = Выборка.Товар;
// Первый параметр=0, из-за того, что КоличествоТочек = 1
Диагр.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
Диагр.Обновление = Истина; // В конце необходимо обновить для результата
КонецПроцедуры
Построение диаграммы Ганта (иерархическая структура серий и точек) в 1С 8.3:
&НаСервере
Процедура ПостроениеДиаграммыГантаНаОснованииЗапроса()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Реализац.ТипЦены КАК ТипЦены,
| Реализац.ВидПродажи КАК ВидПродажи,
| Реализац.Начало,
| Реализац.Окончание,
| Реализац.ТипЦены.Родитель КАК РодительТипаЦен,
| Реализац.ВидПродажи.Родитель КАК РодительВидаПродаж
|ИЗ
| Справочник.ПланПоПродажам КАК Реализац
|
|УПОРЯДОЧИТЬ ПО
| Реализац.ВидПродажи.Код
|
|ИТОГИ ПО
| ВидПродажи ТОЛЬКО ИЕРАРХИЯ,
| ТипЦены ТОЛЬКО ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// Заполнение диаграммы
Диагр_Ганта = Элементы.ДиаграммаГанта1;
Диагр_Ганта.Обновление = Ложь; // Только на время вывода диаграммы
Диагр_Ганта.Очистить();
Пока Выборка.Следующий() = Истина Цикл
// Иерархическая структура серий и точек
Если (Выборка.ВидПродажи <> Null) И (Не Выборка.ВидПродажи.Пустая()) Тогда
Точка_X = Диагр_Ганта.УстановитьТочку(Выборка.ВидПродажи, ?(Выборка.ВидПродажи.Пустая()
Или Выборка.РодительВидаПродаж.Пустая(), Неопределено, Выборка.РодительВидаПродаж));
КонецЕсли;
Если (Выборка.ТипЦены <> Null) И (Не Выборка.ТипЦены.Пустая()) Тогда
Серия = Диагр_Ганта.УстановитьСерию(Выборка.ТипЦены, ?(Выборка.ТипЦены.Пустая()
Или Выборка.РодительТипаЦен.Пустая(), Неопределено, Выборка.РодительТипаЦен)); // Возвращается подходящая серия
КонецЕсли;
Если Выборка.Начало <> Null Тогда
Значение = Диагр_Ганта.ПолучитьЗначение(Точка_X, Серия);
Промежуток = Значение.Добавить();
Промежуток.Начало = Выборка.Начало;
Промежуток.Конец = Выборка.Окончание;
КонецЕсли;
КонецЦикла;
Диагр_Ганта.Обновление = Истина; // В конце необходимо обновить для результата
КонецПроцедуры
Процедура ПостроениеДиаграммыГантаНаОснованииЗапроса()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Реализац.ТипЦены КАК ТипЦены,
| Реализац.ВидПродажи КАК ВидПродажи,
| Реализац.Начало,
| Реализац.Окончание,
| Реализац.ТипЦены.Родитель КАК РодительТипаЦен,
| Реализац.ВидПродажи.Родитель КАК РодительВидаПродаж
|ИЗ
| Справочник.ПланПоПродажам КАК Реализац
|
|УПОРЯДОЧИТЬ ПО
| Реализац.ВидПродажи.Код
|
|ИТОГИ ПО
| ВидПродажи ТОЛЬКО ИЕРАРХИЯ,
| ТипЦены ТОЛЬКО ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// Заполнение диаграммы
Диагр_Ганта = Элементы.ДиаграммаГанта1;
Диагр_Ганта.Обновление = Ложь; // Только на время вывода диаграммы
Диагр_Ганта.Очистить();
Пока Выборка.Следующий() = Истина Цикл
// Иерархическая структура серий и точек
Если (Выборка.ВидПродажи <> Null) И (Не Выборка.ВидПродажи.Пустая()) Тогда
Точка_X = Диагр_Ганта.УстановитьТочку(Выборка.ВидПродажи, ?(Выборка.ВидПродажи.Пустая()
Или Выборка.РодительВидаПродаж.Пустая(), Неопределено, Выборка.РодительВидаПродаж));
КонецЕсли;
Если (Выборка.ТипЦены <> Null) И (Не Выборка.ТипЦены.Пустая()) Тогда
Серия = Диагр_Ганта.УстановитьСерию(Выборка.ТипЦены, ?(Выборка.ТипЦены.Пустая()
Или Выборка.РодительТипаЦен.Пустая(), Неопределено, Выборка.РодительТипаЦен)); // Возвращается подходящая серия
КонецЕсли;
Если Выборка.Начало <> Null Тогда
Значение = Диагр_Ганта.ПолучитьЗначение(Точка_X, Серия);
Промежуток = Значение.Добавить();
Промежуток.Начало = Выборка.Начало;
Промежуток.Конец = Выборка.Окончание;
КонецЕсли;
КонецЦикла;
Диагр_Ганта.Обновление = Истина; // В конце необходимо обновить для результата
КонецПроцедуры
Построение диаграммы в табличном документе в 1С 8.3:
&НаСервере
Процедура ПостроениеДиаграммыВТаблДокументе() // с помощью построителя отчетов
// Создание табличного документа (для вывода результата)
Таблица = Новый ТабличныйДокумент; // или область ячеек табличного документа или ТаблицаЗначений
// Создание построителя отчета
ПО_Запрос = Новый ПостроительОтчета;
// Выполнение запроса
ПО_Запрос.Текст = "ВЫБРАТЬ
| СУММА(ЗадолженностьПокупателей.СуммаДолга) КАК СуммаДолга
|ИЗ
| РегистрНакопления.Задолженность.Остатки КАК ЗадолженностьПокупателей
|{ИТОГИ ПО
| ЗадолженностьПокупателей.Контрагент.*,
| ЗадолженностьПокупателей.ВидДолга.*}" ;
// Запонение настроек построителя на основании запроса
ПО_Запрос.ЗаполнитьНастройки();
// Создание группировки (строки: Контрагенты, колонки:Вид долга)
ПО_Запрос.ИзмеренияКолонки.Добавить("Контрагент");
ПО_Запрос.ИзмеренияСтроки.Добавить("ВидДолга");
ПО_Запрос.Выполнить(); // Старт построителя отчета
// Вывод результата в табличный документ
ПО_Запрос.Вывести(Таблица);
// Добавление в табличный документ рисунка (тип:диаграмма)
РисунокД = Таблица.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
ИндексД = Таблица.Рисунки.Индекс(РисунокД);
// Определение ширины и высоты данных в табличном документе
ТабВысота = Таблица.ВысотаТаблицы;
ТабШирина = Таблица.ШиринаТаблицы;
// Расположение диаграммы в табличном документе (под данными)
Таблица.Рисунки[ИндексД].Расположить(Таблица.Область(ТабВысота, 2, ТабВысота + 10, 20));
// Источник данных для диаграммы - область в табличном документе
// Построитель отчетов выводит данные с 3-й строки и со 2-колонки (по умолчанию)
Таблица.Рисунки[ИндексД].Объект.ИсточникДанных = Таблица.Область(3, 2, ТабВысота - 1 , ТабШирина);
// Установка параметров диаграммы
Таблица.Рисунки[ИндексД].Объект.ТипДиаграммы = ТипДиаграммы.Гистограмма;
Таблица.Рисунки[ИндексД].Объект.СерииВСтроках = Истина;
Таблица.Рисунки[ИндексД].Объект.ОтображатьЗаголовок = Истина;
Таблица.Рисунки[ИндексД].Объект.ОтображатьЛегенду = Истина;
// Вывод на экран
Таблица.Показать();
КонецПроцедуры
Процедура ПостроениеДиаграммыВТаблДокументе() // с помощью построителя отчетов
// Создание табличного документа (для вывода результата)
Таблица = Новый ТабличныйДокумент; // или область ячеек табличного документа или ТаблицаЗначений
// Создание построителя отчета
ПО_Запрос = Новый ПостроительОтчета;
// Выполнение запроса
ПО_Запрос.Текст = "ВЫБРАТЬ
| СУММА(ЗадолженностьПокупателей.СуммаДолга) КАК СуммаДолга
|ИЗ
| РегистрНакопления.Задолженность.Остатки КАК ЗадолженностьПокупателей
|{ИТОГИ ПО
| ЗадолженностьПокупателей.Контрагент.*,
| ЗадолженностьПокупателей.ВидДолга.*}" ;
// Запонение настроек построителя на основании запроса
ПО_Запрос.ЗаполнитьНастройки();
// Создание группировки (строки: Контрагенты, колонки:Вид долга)
ПО_Запрос.ИзмеренияКолонки.Добавить("Контрагент");
ПО_Запрос.ИзмеренияСтроки.Добавить("ВидДолга");
ПО_Запрос.Выполнить(); // Старт построителя отчета
// Вывод результата в табличный документ
ПО_Запрос.Вывести(Таблица);
// Добавление в табличный документ рисунка (тип:диаграмма)
РисунокД = Таблица.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
ИндексД = Таблица.Рисунки.Индекс(РисунокД);
// Определение ширины и высоты данных в табличном документе
ТабВысота = Таблица.ВысотаТаблицы;
ТабШирина = Таблица.ШиринаТаблицы;
// Расположение диаграммы в табличном документе (под данными)
Таблица.Рисунки[ИндексД].Расположить(Таблица.Область(ТабВысота, 2, ТабВысота + 10, 20));
// Источник данных для диаграммы - область в табличном документе
// Построитель отчетов выводит данные с 3-й строки и со 2-колонки (по умолчанию)
Таблица.Рисунки[ИндексД].Объект.ИсточникДанных = Таблица.Область(3, 2, ТабВысота - 1 , ТабШирина);
// Установка параметров диаграммы
Таблица.Рисунки[ИндексД].Объект.ТипДиаграммы = ТипДиаграммы.Гистограмма;
Таблица.Рисунки[ИндексД].Объект.СерииВСтроках = Истина;
Таблица.Рисунки[ИндексД].Объект.ОтображатьЗаголовок = Истина;
Таблица.Рисунки[ИндексД].Объект.ОтображатьЛегенду = Истина;
// Вывод на экран
Таблица.Показать();
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Диаграмма:
📰 Актуальные новости с тегом #Диаграмма:
- В версии 8.3.24 расширена функциональность круговых диаграмм, отладчика, системы взаимодействия.
- В версии 8.3.21 реализована возможность отображения диаграммы Ганта совместно с таблицей, которая содержит дополнительные данные для значений диаграммы. Реализовано расширение таблицы формы для диаграммы Ганта.
Для объекта ДиаграммаГанта реализовано свойство КолонкиДанных и метод НайтиЗначениеПоИдентификатору().Для расширения поля формы для диаграммы Ганта реализовано свойство ПоложениеТаблицы.Для объекта ЗначениеДиаграммыГанта реализованы свойства Идентификатор и Данные.Для объекта ОбластьПостроенияДиаграммыГанта реализованы свойства ОтображатьТекстТочек и ОтображатьДанные. Для объекта ПолеФормы реализовано свойство Таблица.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник