Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 16:25
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Диаграмма Ганта  (Прочитано 7090 раз)

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

Оффлайн Новенькая

  • ****
  • Сообщений: 250
  • РЕПУТАЦИЯ: 21
  • КПД: 8%
  • Регистрация: 2011-02-21
  • Сайт: 
  • Профессия: Программист 1С
Сейчас имею на форме элемент ДиаграммаГанта. По кнопке выполняется след-й код:
Запрос = Новый Запрос;
 Запрос.Текст =
 "ВЫБРАТЬ РАЗРЕШЕННЫЕ
 | РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени,
 | РабочееВремяРаботниковОрганизаций.Период,
 | РабочееВремяРаботниковОрганизаций.Сотрудник,
 | РабочееВремяРаботниковОрганизаций.Сотрудник.ПодразделениеОрганизации КАК Подразделение
 |ИЗ
 | РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
 |ГДЕ
 | РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
 | И РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени <> &Явка
 |
 |УПОРЯДОЧИТЬ ПО
 | РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование";
 
 Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
 Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
 Запрос.УстановитьПараметр("Явка", Справочники.КлассификаторИспользованияРабочегоВремени.Работа);
  ВыборкаРезультата = Запрос.Выполнить().Выбрать();
 
  Диаграмма = ЭлементыФормы.ДиаграммаГанта;
  Диаграмма.Обновление = Ложь;
  Диаграмма.Очистить();
  Диаграмма.ОтображатьЗаголовок = Ложь;
  //заполнить диаграмму
  Диаграмма.ЕдиницаПериодическогоВарианта   = ТипЕдиницыШкалыВремени.День;
 
  Диаграмма.ОтображатьПустыеЗначения=Ложь;
   Диаграмма.ОтображениеИнтервала            = ОтображениеИнтервалаДиаграммыГанта.Плоский;
 Диаграмма.АвтоОпределениеПолногоИнтервала = ложь;
 Диаграмма.УстановитьПолныйИнтервал(НачалоПериода, КонецПериода);

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

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

Последний раз редактировалось: MuI_I_Ika; 16 Авг 2013, 11:46


Оффлайн markgenuine

  • ***
  • Сообщений: 217
  • РЕПУТАЦИЯ: 18
  • КПД: 8%
  • Регистрация: 2012-11-17
  • Сайт: 
Re: Диаграмма Ганта
« Ответ #1: 17 Авг 2013, 19:10 »
Для начала, какая конфигурация? во-вторых, можно скриншот что у вас там выводится? и в третьих это обычные формы или управляемые?

Оффлайн Новенькая

  • ****
  • Сообщений: 250
  • РЕПУТАЦИЯ: 21
  • КПД: 8%
  • Регистрация: 2011-02-21
  • Сайт: 
  • Профессия: Программист 1С
Re: Диаграмма Ганта
« Ответ #2: 19 Авг 2013, 08:28 »
Конфигурация "Зарплата и Управление Персоналом, редакция 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;
ОбластьЯчеек.Защита = Ложь;
Диаграмма.Расположить(ОбластьЯчеек);
Но выводятся лишние пустые строки снизу, скорее всего из-за того что стоит не выводить пустые значения...как правильно расположить эту таблицу?(

Последний раз редактировалось: MuI_I_Ika; 19 Авг 2013, 12:45


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
184 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
40 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 695
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal