helpf.pro
Регистрация

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

bless18
03.06.2010 16:32Прочитано: 1261
Помогите пожалуйста с выводом диаграммы, котороя выводится на основе данных табличного поля обработки. Пишу цикл:
Код 1C v 8.х
 
Для Каждого Колонка Из ТзВрем.Колонки Цикл
Если ТзВрем.Колонки.Индекс(Колонка)<>0 Тогда
Диаграмма.Серии.Добавить(Колонка.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого СтрТзВрем Из ТзВрем Цикл
Точка = Диаграмма.Точки.Добавить(СтрТзВрем.НаименованиеЗадачи);
Индекс = 0;
Для Каждого Серия Из Диаграмма.Серии Цикл
Индекс = Индекс + 1;
Диаграмма.УстановитьЗначение(Точка, Серия, СтрТзВрем.Получить(Индекс));
КонецЦикла;
КонецЦикла;

При трессировки все отображается, но на форме не выводится
На всякий случай прикрепляю обработку
Скачивать файлы может только зарегистрированный пользователь!
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
03.06.2010 18:01Ответ № 1
Вот код процедуры формирования диаграммы:
Код 1C v 8.х
 
//ЭтотОбъект.ВремяВыполненияЗадач.Очистить();
ЭтотОбъект.Дата = ТекущаяДата();
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ПолучательЗадачи,
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи,
| РаспределениеЗадачиСрезПоследних.Пользователь,
| РаспределениеЗадачиСрезПоследних.Приоритет,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения,
| РаспределениеЗадачиСрезПоследних.Отдел,
| РаспределениеЗадачиСрезПоследних.ДатаВыполненияПоФакту
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(&Дата, Отдел = &Отдел) КАК РаспределениеЗадачиСрезПоследних
|ГДЕ
| РаспределениеЗадачиСрезПоследних.ЗадачаЗавершена = &ЗадачаЗавершена";
Запрос.УстановитьПараметр("ЗадачаЗавершена", Ложь);
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Запрос.УстановитьПараметр("Отдел", ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел);
Рез = Запрос.Выполнить();
ТзВрем = Рез.Выгрузить();
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
Диаграмма = ЭлементыФормы.Диаграмма;

Для Каждого СтрокаРаспределениеЗадачи Из ТзВрем Цикл
СтрокаТабличнойЧасти = ЭтотОбъект.ВремяВыполненияЗадач.Добавить();
СтрокаТабличнойЧасти.ПолучательЗадачи = СтрокаРаспределениеЗадачи.ПолучательЗадачи;
СтрокаТабличнойЧасти.Отдел = СтрокаРаспределениеЗадачи.Отдел;
СтрокаТабличнойЧасти.ПользовательСистемы = СтрокаРаспределениеЗадачи.Пользователь;
СтрокаТабличнойЧасти.НаименованиеЗадачи = СтрокаРаспределениеЗадачи.НаименованиеЗадачи;
СтрокаТабличнойЧасти.Приоритет = СтрокаРаспределениеЗадачи.Приоритет;
СтрокаТабличнойЧасти.ДатаНачалаВыполнения = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
СтрокаТабличнойЧасти.ДатаВыполненияЗадачи=СтрокаРаспределениеЗадачи.ДатаВыполнения;
СтрокаТабличнойЧасти.ИсполнительЗадачи = СтрокаРаспределениеЗадачи.ИсполнительЗадачи;

ДатаНачала = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
ДатаКонца = СтрокаРаспределениеЗадачи.ДатаВыполнения;

КоличествоДнейНаВыполнение = РазностьДат(ДатаКонца,ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = РазностьДат(ТекущаяДата(),ДатаНачала);
Если ТекущаяДата()>ДатаКонца тогда
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени="100 %";
Иначе
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
СтрокаТабличнойЧасти.ПроцентОставшегосяВремени = Строка(СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени)+ " ";
КонецЦикла;
Для Каждого Колонка Из ТзВрем.Колонки Цикл
Если ТзВрем.Колонки.Индекс(Колонка)<>0 Тогда
Диаграмма.Серии.Добавить(Колонка.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого СтрТзВрем Из ТзВрем Цикл
Точка = Диаграмма.Точки.Добавить(СтрТзВрем.НаименованиеЗадачи);
Индекс = 0;
Для Каждого Серия Из Диаграмма.Серии Цикл
Индекс = Индекс + 1;
Диаграмма.УстановитьЗначение(Точка, Серия, СтрТзВрем.Получить(Индекс));
КонецЦикла;
КонецЦикла;


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

E_Migachev
03.06.2010 19:51Ответ № 2
Вот этот пример смотрела? *09
bless18
03.06.2010 20:59Ответ № 3
(2) E_Migachev, смотрела, мне нужно добавить поле ПроцентОставшегося времени, которого нет в регистре сведений, но есть в табличном поле. Это поле, по которому будет строиться диаграмма, но оно не найдено, хотя я его программно добавляю.
Для теста в строчку
Код 1C v 8.х
 Диаграмма.Серии[КоличествоСерий].Текст = Выборка.ИмяПользователя;    
. При захождении в цикл выдается ошибка Итератор для значения не определен.. *11
E_Migachev
07.06.2010 12:52Ответ № 4
(3) bless18, а ты хочешь видеть диаграмму как -то так:

Название задачи
Задача 1 |||||||||||||||||||||||||||||||||||||||||
Задача 2 ||||||||||||||||||||||||||
Задача 3 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задача 4 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задача 5 ||||||||||||||||||
10 20 30 40 50 60 70 80 90 100 Процент оставшегося времени
E_Migachev
07.06.2010 17:07Ответ № 5
(0) bless18, посмотрел твою обработку ), делай так:
1. Тип Диаграммы ставь как "Гистограмма горизонтальная"
2. Используя эту процедуру далее пишешь:
Код 1C v 8.х
 //ЭтотОбъект.ВремяВыполненияЗадач.Очистить();
ЭтотОбъект.Дата = ТекущаяДата();
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ПолучательЗадачи,
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи,
| РаспределениеЗадачиСрезПоследних.Пользователь,
| РаспределениеЗадачиСрезПоследних.Приоритет,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения,
| РаспределениеЗадачиСрезПоследних.Отдел,
| РаспределениеЗадачиСрезПоследних.ДатаВыполненияПоФакту
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(&Дата, Отдел = &Отдел) КАК РаспределениеЗадачиСрезПоследних
|ГДЕ
| РаспределениеЗадачиСрезПоследних.ЗадачаЗавершена = &ЗадачаЗавершена";
Запрос.УстановитьПараметр("ЗадачаЗавершена", Ложь);
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Запрос.УстановитьПараметр("Отдел", ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел);
Рез = Запрос.Выполнить();
ТзВрем = Рез.Выгрузить();
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
Диаграмма = ЭлементыФормы.Диаграмма;

Для Каждого СтрокаРаспределениеЗадачи Из ТзВрем Цикл
СтрокаТабличнойЧасти = ЭтотОбъект.ВремяВыполненияЗадач.Добавить();
СтрокаТабличнойЧасти.ПолучательЗадачи = СтрокаРаспределениеЗадачи.ПолучательЗадачи;
СтрокаТабличнойЧасти.Отдел = СтрокаРаспределениеЗадачи.Отдел;
СтрокаТабличнойЧасти.ПользовательСистемы = СтрокаРаспределениеЗадачи.Пользователь;
СтрокаТабличнойЧасти.НаименованиеЗадачи = СтрокаРаспределениеЗадачи.НаименованиеЗадачи;
СтрокаТабличнойЧасти.Приоритет = СтрокаРаспределениеЗадачи.Приоритет;
СтрокаТабличнойЧасти.ДатаНачалаВыполнения = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
СтрокаТабличнойЧасти.ДатаВыполненияЗадачи=СтрокаРаспределениеЗадачи.ДатаВыполнения;
СтрокаТабличнойЧасти.ИсполнительЗадачи = СтрокаРаспределениеЗадачи.ИсполнительЗадачи;

ДатаНачала = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
ДатаКонца = СтрокаРаспределениеЗадачи.ДатаВыполнения;

КоличествоДнейНаВыполнение = РазностьДат(ДатаКонца,ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = РазностьДат(ТекущаяДата(),ДатаНачала);
Если ТекущаяДата()>ДатаКонца тогда
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени="100 %";
Иначе
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
СтрокаТабличнойЧасти.ПроцентОставшегосяВремени = Строка(СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени)+ " ";
КонецЦикла;
ПостроитьДиаграмму(ВремяВыполненияЗадач.Выгрузить(),Диаграмма);

И все красиво формируется как я предложил в (4)
bless18
17.06.2010 21:00Ответ № 6
Спасибо Вас большое! )
bless18
17.06.2010 21:02Ответ № 7
Вопрос закрыт!
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.