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

Диаграмма Ганта

Автор Новенькая, 16 авг 2013, 11:28

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

Новенькая

Сейчас имею на форме элемент ДиаграммаГанта. По кнопке выполняется след-й код:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени,
| РабочееВремяРаботниковОрганизаций.Период,
| РабочееВремяРаботниковОрганизаций.Сотрудник,
| РабочееВремяРаботниковОрганизаций.Сотрудник.ПодразделениеОрганизации КАК Подразделение
|ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
|ГДЕ
| РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени <> &Явка
|
|УПОРЯДОЧИТЬ ПО
| РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование";

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

Пока ВыборкаРезультата.Следующий() цикл
  ТекущаяСерия=Диаграмма.УстановитьСерию(ВыборкаРезультата.ВидИспользованияРабочегоВремени,ВыборкаРезультата.ВидИспользованияРабочегоВремени);
  ТекущаяТочка = Диаграмма.УстановитьТочку(ВыборкаРезультата.Сотрудник, ВыборкаРезультата.Сотрудник);
  ТекущееЗначение = Диаграмма.ПолучитьЗначение(ТекущаяТочка,ТекущаяСерия);
 
  ТекущийИнтервал = ТекущееЗначение.Добавить();
  ТекущийИнтервал.Начало = ВыборкаРезультата.Период;
  ТекущийИнтервал.Конец = ВыборкаРезультата.Период+24*60*60;
КонецЦикла;
 
  Диаграмма.Обновление = Истина;


Но ее никак нельзя вывести на печать((( Как ее можно вывести на табличное поле? Уже добавляла элемент ТабличноеПоле на форму...пробовала вот так:
/  Рисунок = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
////  КартинкаГант = Диаграмма.ПолучитьКартинку();
////  Рисунок.Картинка = КартинкаГант;
////  Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
////  ОбластьРисунка = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Область("R1C1:R50C50");
////  Рисунок.Расположить(ОбластьРисунка);

но выводится ерунда, диаграмма обрезается((( подскажите, может кто-то сталкивался...

markgenuine

Для начала, какая конфигурация? во-вторых, можно скриншот что у вас там выводится? и в третьих это обычные формы или управляемые?

Новенькая

Конфигурация "Зарплата и Управление Персоналом, редакция 2.5 (2.5.65.1)". Формы обычные. К чему в итоге пришла:
имею макет, на него добавила элемент "ДиграммаГанта", на форму поместила табличноеПоле.
По кнопке Сформировать след. код:
Процедура КнопкаВыполнитьНажатие(Кнопка)

ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Очистить();
Макет=ПолучитьМакет("Макет");

табДок= новый табличныйДокумент;

Область=Макет.получитьОбласть("ОбластьДиаграммы");

табДок.вывести(Область);
СформироватьОтчет(табДок.Рисунки.Диаграмма.Объект,табДок);

ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Вывести(ТабДок);

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


Процедура СформироватьОтчет(Диаграмма,табДок) Экспорт

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени,
    | РабочееВремяРаботниковОрганизаций.Период,
    | РабочееВремяРаботниковОрганизаций.Сотрудник,
    | РабочееВремяРаботниковОрганизаций.Сотрудник.ПодразделениеОрганизации КАК Подразделение
    |ИЗ
    | РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
    |ГДЕ
    | РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
    | И РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени <> &Явка
    |
    |УПОРЯДОЧИТЬ ПО
    | РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос.УстановитьПараметр("Явка", Справочники.КлассификаторИспользованияРабочегоВремени.Работа);

     ВыборкаРезультата = Запрос.Выполнить().Выбрать();
     
     // Запретить обновление диаграммы

     Диаграмма.Обновление = Ложь;
     Диаграмма.Очистить();
     Диаграмма.ОтображатьЗаголовок = Ложь;
     //заполнить диаграмму
     Диаграмма.ЕдиницаПериодическогоВарианта   = ТипЕдиницыШкалыВремени.День;

Диаграмма.ОтображатьПустыеЗначения=Ложь;
Диаграмма.ОтображениеИнтервала = ОтображениеИнтервалаДиаграммыГанта.Плоский;

Диаграмма.АвтоОпределениеПолногоИнтервала = ложь;
    Диаграмма.РастягиваниеПоВертикали= РастягиваниеПоВертикалиДиаграммыГанта.РастягиватьСтрокиИДанные;
Диаграмма.УстановитьПолныйИнтервал(НачалоПериода, КонецПериода+24*60*60);


    ЭлементыШкалыВремени = Диаграмма.ОбластьПостроения.ШкалаВремени.Элементы;

// очистим коллекцию
ПервыйЭлемент = ЭлементыШкалыВремени[0];// нельзя полностью очитить коллекцию (один элемент будет всегда)
Для Н = 1 по ЭлементыШкалыВремени.Количество()-1 Цикл
ЭлементыШкалыВремени.Удалить(ЭлементыШкалыВремени[1]);
КонецЦикла;


ПервыйЭлемент.Единица = ТипЕдиницыШкалыВремени.Месяц;
ПервыйЭлемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Сплошная, 1);

Элемент = ЭлементыШкалыВремени.Добавить();
Элемент.Единица = ТипЕдиницыШкалыВремени.Неделя;
Элемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Точечная, 1);

Элемент = ЭлементыШкалыВремени.Добавить();
Элемент.Единица = ТипЕдиницыШкалыВремени.День;
Элемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Пунктир, 1);
Элемент.ФорматДня =  ФорматДняШкалыВремени.ДеньМесяца;



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

ТекущийИнтервал = ТекущееЗначение.Добавить();
ТекущийИнтервал.Начало = ВыборкаРезультата.Период;
ТекущийИнтервал.Конец = ВыборкаРезультата.Период+24*60*60;
КонецЦикла;

Диаграмма.ПоказатьУровеньТочек(0);
 
    Диаграмма.Обновление = Истина;

ОбластьЯчеек = табДок.Область(табДок.ВысотаТаблицы + 3, 1, табДок.ВысотаТаблицы + 20, табДок.ШиринаТаблицы + 3);

КонецПроцедуры // СформироватьОтчет()



Сейчас вроде выводится все, НО размер ДиаграммыГанта автоматически не растягивается, как я его растянула вниз такой он и есть. Т.е. например 100 сотрудников выводятся хорошо, 3 растягиваются на всю эту область, а 200 обрезаются...Как сделать так, чтобы высота как-то автоматом регулировалась. И как сюда скриншот прикрепить? Спасибо за помощь...
Добавлено: 19 авг 2013, 12:07


Попробовала код из типовой взять:
    Диаграмма = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.ДиаграммаГанта);
Диаграмма.Объект.Обновление = Ложь;
Диаграмма.Объект.Очистить();
Диаграмма.Объект.ОтображатьЗаголовок = Ложь;
//заполнить диаграмму
Диаграмма.Объект.ЕдиницаПериодическогоВарианта   = ТипЕдиницыШкалыВремени.День;
Диаграмма.Объект.ОтображатьПустыеЗначения=Ложь;
    Диаграмма.Объект.ОтображениеИнтервала = ОтображениеИнтервалаДиаграммыГанта.Плоский;

    Диаграмма.Объект.АвтоОпределениеПолногоИнтервала = ложь;
    Диаграмма.Объект.УстановитьПолныйИнтервал(НачалоПериода, КонецПериода+24*60*60);
   
    ЭлементыШкалыВремени = Диаграмма.Объект.ОбластьПостроения.ШкалаВремени.Элементы;
   
   ...
    Диаграмма.Объект.ПоказатьУровеньТочек(0);
 
    Диаграмма.Объект.Обновление = Истина;

КоличествоКолонок = 1;
ШиринаДиаграммы = 115;
ШиринаКолонки = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Область(, КоличествоКолонок, , КоличествоКолонок).ШиринаКолонки;
ШиринаДиаграммы = ШиринаДиаграммы - ?(ШиринаКолонки = 0, 9, ШиринаКолонки);
Пока ШиринаДиаграммы > 0 Цикл
КоличествоКолонок = КоличествоКолонок + 1;
ШиринаКолонки = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Область(, КоличествоКолонок, , КоличествоКолонок).ШиринаКолонки;
ШиринаДиаграммы = ШиринаДиаграммы - ?(ШиринаКолонки = 0, 9, ШиринаКолонки);
КонецЦикла;

ТаблицаДанных = Запрос.Выполнить().Выгрузить();
КоличествоСтрок = ТаблицаДанных.Количество(); ОбластьЯчеек        = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.Область(ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.ВысотаТаблицы + 3, 1, Окр(ЭтаФорма.ЭлементыФормы.ТабличныйДокумент.ВысотаТаблицы + 3 + 1.5*(КоличествоСтрок)+3), КоличествоКолонок + 3);
ОбластьЯчеек.ВысотаСтроки=1;
ОбластьЯчеек.Защита = Ложь;
Диаграмма.Расположить(ОбластьЯчеек);

Но выводятся лишние пустые строки снизу, скорее всего из-за того что стоит не выводить пустые значения...как правильно расположить эту таблицу?(

Теги:

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

Рейтинг@Mail.ru

Поиск