Имя: Пароль:
1C
 
Создание диаграммы в 1С 7.7
0 sergei123654
 
07.09.09
12:29
Здравствуйте, подскажите чайнику! Есть таблица значений, которая заполнена данными - Группа товара, Фактические колво и плановые колво. нужно построить диаграмму которая бы по Y(игрику) отражала количества, а по Х(иксу) группу товара(фактический столбец и плановый столбец).
пробую так:
   Диаграмма.Обновление(0);
   Серия = 1;
   Точка = 1;
ТЗитог.Свернуть("РодительТовара","Факт,План");
   ТЗитог.Сортировать("РодительТовара");
   ТЗитог.ВыбратьСтроки();  
   Пока ТЗитог.ПолучитьСтроку() = 1 Цикл
       Диаграмма.УстановитьИмяСерии(Серия,ТЗитог.РодительТовара);
       Диаграмма.ЦветСерии(Серия,153,153,255);    
       Диаграмма.УстановитьЗначение(Точка,Серия,ТЗитог.Факт);
       Серия = Серия + 1;
          КонецЦикла;

результат - получаю столбец с фактическим количеством и имя этого столбца в легенде.

Не знаю как к столбцу с фактическим количеством добавить столбец с плановым количеством, и добавить этим двум колонкам с низу имя этой группы.

куда копать?
1 Kreont
 
07.09.09
12:59
Копать лучше среди стандартных отчетов там есть работы с диаграмами
2 Ёпрст
 
гуру
07.09.09
13:00
3 sergei123654
 
07.09.09
13:06
(1) среди стандартных что то уж слишком все мудрЁнно(я, как малоопытный, долго там ковыряться буду) думал может что то попроще есть..
(2) спасибо, читаю...
4 sergei123654
 
07.09.09
20:25
продвижений не каких, прочитал (2) кучу раз, перепробовал все... но все безрезультатно... Может у ого нибудь есть пример построения диаграмм по двум сериям?
5 sergei123654
 
07.09.09
21:33
по всей видимости вот эта конструкция строит нужную мне диаграмму
   ТЗ.Свернуть("Родитель","План,Факт");  
   ТЗ.Сортировать("Родитель");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       Диаграмма.УстановитьИмяСерии(Серия,ТЗ.Родитель);
       Точка = 1;
       Пока <<Условие>> Цикл  //??????????????????????????
           Диаграмма.УстановитьЗначение(Точка,Серия,<<Значение>>);
           Если Серия = 1 Тогда
               Диаграмма.УстановитьИмяТочки(Точка,<<Имя точки>>); //?????????????????????????????
           КонецЕсли;
           Точка = Точка + 1;
       КонецЦикла;
       Серия = Серия + 1;    
   КонецЦикла;

Подскажите, что должно быть во втором цикле?
6 Alexander Shevchuck
 
07.09.09
22:23
Могу сбросить пример
7 Alexander Shevchuck
 
07.09.09
22:24
Я строил диаграмы с двумя сериями по таблице значений
8 Alexander Shevchuck
 
07.09.09
22:24
если он тебе, конечно еще нужен
9 sergei123654
 
07.09.09
22:33
Alexander Shevchuck БУДУ ВЕСЬМА ПРИЗНАТЕЛЕН, если вы скините свои примеры, куда вам удобней?
10 Alexander Shevchuck
 
07.09.09
22:35
Если я правильно понял, у тебя есть Таблица значений с тремя колонками
Родитель - это ссылка на элемент справочника;
План - число и Факт - число.
Серий тебе нужно две (план и факт).
Я все правильно понял
P.S. Можешь называть меня на "ты" :)
11 Alexander Shevchuck
 
07.09.09
22:37
У тебя вышло построить хоть какуюто диаграму? Если да - то половина роботы сделана, если нет я розкажу как
12 sergei123654
 
07.09.09
22:40
(10) да совершенно верно, проблема еще в наименновании точек, то есть план и факт отнсятся к одному родителю.. но это думаю пол беды
13 Alexander Shevchuck
 
07.09.09
22:42
Чтобы точки не наименовались автоматически, навсякий случай напиши перед циклом
Диаграмма.АвтоУстановкаИменТочек(0);
14 Alexander Shevchuck
 
07.09.09
22:45
Потом в цыкле пишешь
Диаграмма.УстановитьИмяТочки(<номер точки>,<метка>)
15 sergei123654
 
07.09.09
22:45
(13) наисал
(5) что можно сделать с вопросом из 5?
16 Alexander Shevchuck
 
07.09.09
22:46
Во первых нужен один цикл, насколько видно с твоего алгоритма, количество серий в твоей диаграме будет равно количеству строк в таблице значений, тоесть количеству родителей
17 sergei123654
 
07.09.09
22:53
(16) я тоже думал так... пробовал писать это:
   Серия1 = 1; Серия2 = 2;
   Точка1 = 1; Точка2 = 1;
   ТЗитог.Свернуть("РодительТовара","Факт,План");
   ТЗитог.Сортировать("РодительТовара");
   ТЗитог.ВыбратьСтроки();
   Пока ТЗитог.ПолучитьСтроку() = 1 Цикл  
       Диаграмма.КоличествоСерий(2);
       Диаграмма.УстановитьИмяСерии(Серия1,ТЗитог.РодительТовара);
       Диаграмма.УстановитьИмяСерии(Серия2,ТЗитог.РодительТовара);
       Диаграмма.ЦветСерии(Серия1,153,153,255);    
   
       Диаграмма.ЦветСерии(Серия2,217,0,234);
       Диаграмма.УстановитьЗначение(Точка1,Серия1,ТЗитог.План);
       Диаграмма.УстановитьЗначение(Точка2,Серия2,ТЗреализ.Факт);
       Точка1 = Точка1 + 1;
       Точка2 = Точка2 + 1;
       Серия1 = Серия1 + 1;
       Серия2 = Серия2 + 2;
   КонецЦикла

результат - куча не понятно каких столбцов диаграммы..
18 Alexander Shevchuck
 
07.09.09
22:59
//==========ПОПРОБУЙ ТАК=======================
Диаграмма.Обновление(0);
Диаграмма.Заголовок = "ПЛАН-ФАКТ АНАЛИЗ ("+ПериодСтр(НачДата,КонДата)+")";
Диаграмма.УстановитьИмяСерии(1,"План");
Диаграмма.УстановитьИмяСерии(2,"Факт");
А = 1;

ТЗ.Свернуть("Родитель","План,Факт");  
   ТЗ.Сортировать("Родитель");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
     Диаграмма.УстановитьИмяТочки(А,ТЗ.Родитель);
     Диаграмма.УстановитьЗначение(А, 1, ТЗ.План);
     Диаграмма.УстановитьЗначение(А, 2,ТЗ.Факт);
     А = А+1;
   КонецЦикла;
Диаграмма.Обновление(1);
19 Alexander Shevchuck
 
07.09.09
23:00
Цвета потом подбирешь по вкусу
20 Alexander Shevchuck
 
07.09.09
23:01
//====== Я ДЕЛАЛ ТАК=========

Перем НачДата, КонДата, ТаблНаз, ТаблСырья;

Процедура ПриОткрытии()
   НачДата = НачГода(ДобавитьМесяц(РабочаяДата(),-36));
   КонДата = КонГода(ДобавитьМесяц(РабочаяДата(),-12));
   ТаблНаз = СоздатьОбъект("ТаблицаЗначений");
   ТаблНаз.НоваяКолонка("Дата");
   //------------------------------------------------------
   ТаблСырья = СоздатьОбъект("ТаблицаЗначений");
   ТаблСырья.НоваяКолонка("Дата");
   ТаблСырья.НоваяКолонка("БазисВес");
   ТаблСырья.НоваяКолонка("Сумма");
   ТаблСырья.УдалитьСтроки();
   //------------------------------------------------------
   ТаблНаз.УдалитьСтроки();
   Период=ПериодСтр(НачДата,КонДата);
КонецПроцедуры
//----------------------------------------------
Процедура ИзмПериодПлюс()
   НачДата = НачГода(ДобавитьМесяц(НачДата,12));
   КонДата = КонГода(ДобавитьМесяц(КонДата,12));
   //------------------------------------------
   Если НачДата > ПолучитьДатуТА() Тогда
       Предупреждение("Начало периода не может быть больше "+ ПолучитьДатуТА()+" !!!");
       Пока НачДата > ПолучитьДатуТА() Цикл
           НачДата = НачГода(ДобавитьМесяц(НачДата,-12));                            
           КонДата = КонГода(ДобавитьМесяц(КонДата,-12));
       КонецЦикла;
   КонецЕсли;
   //------------------------------------------
   Если КонДата > ПолучитьДатуТА() Тогда
       КонДата = КонМесяца(ДобавитьМесяц(ПолучитьДатуТА(),-1));
   КонецЕсли;
//    Сообщить(КонецПериодаБИ());
   //------------------------------------------
   Период=ПериодСтр(НачДата,КонДата);
КонецПроцедуры
//----------------------------------------------
Процедура ИзмПериодМинус()
   НачДата = НачГода(ДобавитьМесяц(НачДата,-12));
   КонДата = КонГода(ДобавитьМесяц(КонДата,-12));
   Период=ПериодСтр(НачДата,КонДата);
КонецПроцедуры


//*******************************************
Процедура СформироватьДиаграмму(Диаграмма1)
   

   
   // Блокируем обновление, пока обрабатываются данные
   Диаграмма1.Обновление(0);
   Диаграмма1.Заголовок = "Среднемесячная цена молока ("+ПериодСтр(НачДата,КонДата)+")";
   Диаграмма1.УстановитьИмяСерии(1, "Цена за 1 кг "+ПериодСтр(НачДата,КонГода(НачДата)));
   Диаграмма1.УстановитьИмяСерии(2, "Цена за 1 кг "+ПериодСтр(НачГода(ДобавитьМесяц(НачДата,12)),КонГода(НачГода(ДобавитьМесяц(НачДата,12)))));
   Диаграмма1.УстановитьИмяСерии(3, "Цена за 1 кг "+ПериодСтр(НачГода(ДобавитьМесяц(НачДата,24)),КонГода(НачГода(ДобавитьМесяц(НачДата,24)))));
   Диаграмма1.АвтоУстановкаИменТочек(1);

   // Заполним диаграмму значениями    
   Рег = СоздатьОбъект("Регистр.Поставщики");
   Рег.УстановитьФильтр(,,,Константа.ОсновноеСырье);
   Рег.ВыбратьДвижения(НачДата,КонДата);
   Пока Рег.ПолучитьДвижение() = 1 Цикл  
        ТаблСырья.НоваяСтрока();
           ТаблСырья.Дата = НачМесяца(Рег.ТекущийДокумент().ДатаДок);
           ТаблСырья.БазисВес = Рег.БазисВес ;
           ТаблСырья.Сумма = Рег.Сумма + Рег.СуммаНДС + Рег.СуммаДотации ;
   КонецЦикла;
       ТаблСырья.Свернуть("Дата","БазисВес,Сумма");
   А = 1;
   Б = 1;
   В = 1;
   ТаблСырья.ВыбратьСтроки();
   Пока ТаблСырья.ПолучитьСтроку() = 1 Цикл
       //***********************************************************************
      Если (ТаблСырья.Дата >= НачДата) И (ТаблСырья.Дата <= КонГода(НачДата)) Тогда
             Диаграмма1.УстановитьЗначение(А, 1, ТаблСырья.Сумма/ТаблСырья.БазисВес);
                 А = А+1;
      КонецЕсли;
      //-----------------------------------------------------------------------------------------------------------------
      Если (ТаблСырья.Дата >= НачГода(ДобавитьМесяц(НачДата,12))) И (ТаблСырья.Дата <= КонГода(НачГода(ДобавитьМесяц(НачДата,12)))) Тогда
                 Диаграмма1.УстановитьЗначение(Б, 2, ТаблСырья.Сумма/ТаблСырья.БазисВес);
                 Б = Б+1;
      КонецЕсли;
   //---------------------------------------------------------------------------------------------------------------------
   Если (ТаблСырья.Дата >= НачГода(ДобавитьМесяц(НачДата,24))) И (ТаблСырья.Дата <= КонГода(НачГода(ДобавитьМесяц(НачДата,24)))) Тогда
                 Диаграмма1.УстановитьЗначение(В, 3,ТаблСырья.Сумма/ТаблСырья.БазисВес);
                 В = В+1;
      КонецЕсли;
     
         //-----------------------------------------------------------------------------------------------------------------
   КонецЦикла;
       
       //***********************************************************************
   //----------------------------------------------------------------
   
   Диаграмма1.Обновление(1);



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

Процедура Печать()
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Диаграма");
   ТаблНаз.УдалитьСтроки();
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Диаграма");
КонецПроцедуры
21 Alexander Shevchuck
 
07.09.09
23:06
Если что непонял пиши
22 sergei123654
 
07.09.09
23:07
(20) о ёй ёй)))) я всего третий месяц в 7-ке, пока очень тяжело все дается.
(19) работает, спасибо большое. на именами снизу надо по колдовать еще чуть чуть и отлично, спасибо еще раз!
23 Alexander Shevchuck
 
07.09.09
23:08
Диаграмма.УстановитьИмяТочки(А,ТЗ.Родитель); - это разве непомогло?
24 Alexander Shevchuck
 
07.09.09
23:09
Хотя я там не отменил автонаименование
25 Alexander Shevchuck
 
07.09.09
23:11
//==========ПОПРОБУЙ ЕЩЕ ТАК=======================

Диаграмма.Обновление(0);
Диаграмма.Заголовок = "ПЛАН-ФАКТ АНАЛИЗ ("+ПериодСтр(НачДата,КонДата)+")";
Диаграмма.УстановитьИмяСерии(1,"План");
Диаграмма.УстановитьИмяСерии(2,"Факт");
Диаграмма.АвтоУстановкаИменТочек(0);
А = 1;

ТЗ.Свернуть("Родитель","План,Факт");  
   ТЗ.Сортировать("Родитель");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
     Диаграмма.УстановитьИмяТочки(А,ТЗ.Родитель);
     Диаграмма.УстановитьЗначение(А, 1, ТЗ.План);
     Диаграмма.УстановитьЗначение(А, 2,ТЗ.Факт);
     А = А+1;
   КонецЦикла;
Диаграмма.Обновление(1);
26 sergei123654
 
07.09.09
23:12
(23) выходят не все имена
(24) (25) проблема не решена
27 Alexander Shevchuck
 
07.09.09
23:14
ааа...., забыл зказать, выводит только те которые помещаются, растяни мышью диаграму в таблице (как один из вариантов)
28 sergei123654
 
07.09.09
23:16
(27) да да, сижу раздвигаю))
а авто раздвигания как я понял нет...
Спасибо за помощь Alexander Shevchuck!
29 Alexander Shevchuck
 
07.09.09
23:18
Как вариант, можешь подписать цифрами (самый простой споб автонумерация), а внизу построить таблицу с расшифровкой. Смотрится довольно неплохо
30 sergei123654
 
07.09.09
23:20
(29) наверно расшивровку добавлю, и при нажании на столбец будет открываться имя это этого столбца, иа шрифт наименнований сницу, уменьшу до 6..
а там уже как клиент скажет.
Спасибо, вопрос решен!
31 Alexander Shevchuck
 
07.09.09
23:21
Пиши если что
AdBlock убивает бесплатный контент. 1Сергей