Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 01:15

Программное создание диаграммы во внешней обработке

Автор Wallesss, 18 апр 2024, 17:28

0 Пользователей и 1 гость просматривают эту тему.

Wallesss

Здравствуйте, в модуле внешней обработки написал следующий код:
&НаКлиенте
Процедура ПостроитьГрафик(Команда)
ВыводГрафика();
КонецПроцедуры

&НаСервере
Процедура ВыводГрафика()
   Диаг = ЭтаФорма.Элементы.Вставить("Диаграмма", Тип("Диаграмма"), ЭтаФорма);
   Диаг.ТипДиаграммы = ТипДиаграммы.График;
   Диаг.Обновление = Ложь;
   Диаг.АвтоТранспонирование = Ложь;
   
   Серия1 = Диаг.УстановитьСерию("Цена");
   Данные = Новый ГенераторСлучайныхЧисел;
   
   Для С = 1 По 12 Цикл
     ТочкаДиаграммы = Диаг.УстановитьТочку(С);
     Диаг.УстановитьЗначение(ТочкаДиаграммы, Серия1, Данные.СлучайноеЧисло(10000, 30000));
   КонецЦикла;
   
   Диаг.Обновление = Истина;
   Диаг.АвтоТранспонирование = Истина;
КонецПроцедуры

Запуск внешней обработки приводит к ошибке "Недопустимое значение параметров" с указанием на строку:
Диаг = ЭтаФорма.Элементы.Вставить("Диаграмма", Тип("Диаграмма"), ЭтаФорма);
Вопрос: почему обычная диаграмма не добавляется на форму внешней обработки?


*Давно в другой внешней обработке использовал аналогичную строку, но для добавления группы формы и всё нормально работало:
ГлавГруппа = ЭтаФорма.Элементы.Вставить("ГлавнаяГруппа", Тип("ГруппаФормы"), ЭтаФорма);

Wallesss

Написал новую процедуру "ВыводГраф()":
&НаКлиенте
Процедура Кнопка(Команда)
ВыводГраф();
КонецПроцедуры

&НаСервере
Процедура ВыводГраф()
    РеквГраф = Новый РеквизитФормы("Граф", Новый ОписаниеТипов("Диаграмма"));
    ЭтаФорма.ИзменитьРеквизиты(РеквГраф);
   
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Граф", Тип("ПолеФормы"), ЭтаФорма);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеДиаграммы;
    НовыйЭлемент.ПутьКДанным = "Граф";
КонецПроцедуры

Появилась ошибка "Несоответствие типов (параметр номер '1')", указывающая на строку
ЭтаФорма.ИзменитьРеквизиты(РеквГраф);
Как правильно программно создать реквизит типа "Диаграмма"?

fruitella

Зачем через элементы, если можно создать реквизит с типом диаграмма и вытащить его на форму?
Заполнять можно так:

МояДиаграмма.Очистить();
МояДиаграмма.Обновление = Ложь;
МояДиаграмма.АвтоТранспонирование = Ложь;

МояСерия = МояДиаграмма.Серии.Добавить("НаименованиеСерии");
МояТочка = МояДиаграмма.УстановитьТочку("МояТочка");
МояДиаграмма.УстановитьЗначение(МояТочка , МояСерия , ДанныеСТипомЧисло);


МассивЦветов = Новый Массив;
МассивЦветов.Добавить(ВыбратьЦвет);
МояДиаграмма.УстановитьПалитру(МассивЦветов);

МояДиаграмма.АвтоТранспонирование = Истина;
МояДиаграмма.Обновление = Истина;
МояДиаграмма.ОтображатьЛегенду = Ложь; //Истина если нужна легенда справа


Wallesss

fruitella, использовать можно только встроенный язык программирования 1С.

*Данный реквизит я давно создал через конфигуратор и диаграмму на форму уже добавил. Но согласно требованиям всё это нужно сделать программно.
Реквизит.png

fruitella

Wallesss, Что значит сделать программно? Ну раз добавил реквизит с диагрммой на форму, то выше пример заполнения "Программно"

Wallesss

fruitella, программно - значит только с помощью кода:
&НаКлиенте
Процедура Кнопка(Команда)
    ВыводГраф();
КонецПроцедуры

&НаСервере
Процедура ВыводГраф()
    нРекв = Новый Массив;
    РеквГраф = Новый РеквизитФормы("Граф", Новый ОписаниеТипов("Диаграмма"));
    нРекв.Добавить(РеквГраф);
    ИзменитьРеквизиты(нРекв);
   
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Граф", Тип("ПолеФормы"), ЭтаФорма);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеДиаграммы;
    НовыйЭлемент.ПутьКДанным = "Граф";
КонецПроцедуры
Программно, т.е. без добавления реквизита "Диаграмма" с использованием конфигуратора.

Только непонятно, как теперь заполнить диаграмму. У нас есть только реквизит "Граф" и поле диаграммы.

Граф.png

Wallesss

Как-то так:
&НаКлиенте
Процедура Кнопка(Команда)
    ВыводГраф();
КонецПроцедуры

&НаСервере
Процедура ВыводГраф()
    нРекв = Новый Массив;
    РеквГраф = Новый РеквизитФормы("Граф", Новый ОписаниеТипов("Диаграмма"));
    нРекв.Добавить(РеквГраф);
    ИзменитьРеквизиты(нРекв);
   
    ЭтотОбъект["Граф"].ТипДиаграммы = ТипДиаграммы.График;
    ЭтотОбъект["Граф"].Обновление = Ложь;
    ЭтотОбъект["Граф"].АвтоТранспонирование = Ложь;
   
    Серия1 = ЭтотОбъект["Граф"].УстановитьСерию("Цена");
    Данные = Новый ГенераторСлучайныхЧисел;
   
    Для С = 1 По 12 Цикл
      ТочкаДиаграммы = ЭтотОбъект["Граф"].УстановитьТочку(С);
      ЭтотОбъект["Граф"].УстановитьЗначение(ТочкаДиаграммы, Серия1, Данные.СлучайноеЧисло(10000, 30000));
    КонецЦикла;
   
    ЭтотОбъект["Граф"].Обновление = Истина;
    ЭтотОбъект["Граф"].АвтоТранспонирование = Истина;
   
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Граф", Тип("ПолеФормы"), ЭтаФорма);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеДиаграммы;
    НовыйЭлемент.ПутьКДанным = "Граф";
КонецПроцедуры

Похожие темы (5)

Рейтинг@Mail.ru

Поиск