Имя: Пароль:
1C
 
v7: Воронка продаж. Как нарисовать в 7-ке сам график в виде воронки? [Решено]
0 DGorgoN
 
14.08.13
13:10
Делаю воронку продаж. Про саму воронку подробно описано тут: http://infostart.ru/public/192683/

Так как покупать ничего не хочу - хочу сделать сам. В 1-ке средств мало, придумал формировать html файл и открывать его браузером. Можно конечно свою ВК написать но это дольше.

Если кто реализовывал воронку другими средствами просьба поделится мыслями/алгоритмами/обработками кому не жалко.
1 Ёпрст
 
14.08.13
13:12
берешь любой активикс, который реализует Это.. втыкаешь на форму, наслаждаешься..
Ну или вебброузер на форме и там что угодно.
2 jarett
 
14.08.13
13:15
прочитал сейчас и думаю - кому вообще может хоть иногда понадобиться такая воронка?
3 DGorgoN
 
14.08.13
13:15
(1) Любой это какой?
4 DGorgoN
 
14.08.13
13:16
(2) Для CRM нужна. Что бы в графическом виде увидеть эту якобы воронку.
5 DGorgoN
 
14.08.13
13:18
Можно конечно обычным графиком, но хотят именно воронку - якорь им в одно место..
6 palpetrovich
 
14.08.13
13:21
о, убивца 1с такое умеет: http://crm74.ru/uploads/qs2/voronka-sale.png
7 ЧеловекДуши
 
14.08.13
13:23
(6) Жесть :)
9 DGorgoN
 
14.08.13
13:24
(6) Да и 1с может по всякому. Именно в виде воронки приходится допиливать, но возможно же. Вопрос в том как допилить.
10 Ёпрст
 
14.08.13
13:25
(3) ну,   от Codejock наверняка умеет..
там этих диаграмм, как собак нерезанных.
11 Ёпрст
 
14.08.13
13:26
12 Ёпрст
 
14.08.13
13:27
13 Fragster
 
модератор
14.08.13
13:32
в 7.7 вроде тоже есть горизонтальная гистограмма
http://wstaw.org/m/2013/08/14/0_1.png

вопрос с представлением данных снимает. да даже и не горизонтальная тоже
14 Ёпрст
 
14.08.13
13:40
(13) только скриншот у тебя.. со снеговика :)
15 Ёпрст
 
14.08.13
13:41
а в 8.3 ужо есть штатная "воронка продаж"
16 Fragster
 
модератор
14.08.13
13:41
(14) и что, в клюшках нет горизонтальной гистограммы? да и горизонтальной оно не обязательно же должно быть...
17 DGorgoN
 
14.08.13
13:50
Накидаю пример, представлю для общественности.
18 Славен
 
14.08.13
13:52
из 1с в эксель делал
19 NS
 
14.08.13
13:54
(13) Есть и гистограммы и горизонтальная и вертикальная, и вообще экселевский объект на таблицу можно внедрить, и рисовать всё что возможно рисовать в экселе.
20 DGorgoN
 
14.08.13
13:55
Народ - 10-20 минут. Выставлю код без экселя.
(19) эксель мани хочет. У меня конечно он куплен. А если вдруг лицензия закончится.
21 Fragster
 
модератор
14.08.13
13:58
да вообще не понимаю того, зачем оно должно быть именно в виде "воронок", чем обычный график с областями или гистограмма не устраивает
22 DGorgoN
 
14.08.13
13:59
(21) Политика данного вопроса очень простая: Я начальник ты дурак. Нужно головной конторе. Она оооочень большая. Надо и все.
23 DGorgoN
 
14.08.13
16:43
//*******************************************
Функция ВыборЦвета(чНомерЦвета)
    чНомерЦвета_ = чНомерЦвета;
    Если чНомерЦвета_ > 9 Тогда
        чНомерЦвета_ = 9;
    КонецЕсли;
    Если чНомерЦвета_ = 1 Тогда
        Возврат("#5D8AA8");
    ИначеЕсли чНомерЦвета_ = 2 Тогда
        Возврат("#F0F8FF");
    ИначеЕсли чНомерЦвета_ = 3 Тогда
        Возврат("#E32636");
    ИначеЕсли чНомерЦвета_ = 4 Тогда
        Возврат("#EFDECD");
    ИначеЕсли чНомерЦвета_ = 5 Тогда
        Возврат("#FFBF00");
    ИначеЕсли чНомерЦвета_ = 6 Тогда
        Возврат("#8DB600");
    ИначеЕсли чНомерЦвета_ = 7 Тогда
        Возврат("#3B444B");
    ИначеЕсли чНомерЦвета_ = 8 Тогда
        Возврат("#007FFF");
    ИначеЕсли чНомерЦвета_ = 9 Тогда
        Возврат("#FAEBD7");  
    Иначе
        Возврат("#EFDECD");
    КонецЕсли;
КонецФункции

//*******************************************
Процедура Сформировать()
    //Формирование исходных данных
    тзПереговоры = СоздатьОбъект("ТаблицаЗначений");
    тзПереговоры.НоваяКолонка("Объект", "Справочник.CRMСтатусПереговоров");
    тзПереговоры.НоваяКолонка("Значение", "Число", 16, 4);
    тзПереговоры.НоваяКолонка("Ширина", "Число", 16, 0);
    тзПереговоры.НоваяКолонка("Процент", "Число", 16, 2);
    тзПереговоры.Сортировать("Объект");
                    
    CRMСтатусПереговоров = СоздатьОбъект("Справочник.CRMСтатусПереговоров");
    CRMСтатусПереговоров.ВыбратьЭлементы();
    Пока CRMСтатусПереговоров.ПолучитьЭлемент()=1 Цикл
        Если CRMСтатусПереговоров.ПометкаУдаления()=0 Тогда
            тзПереговоры.НоваяСтрока();
            тзПереговоры.Объект = CRMСтатусПереговоров.ТекущийЭлемент();
        КонецЕсли;
    КонецЦикла;
    
    
    чИтого = 0;
    CRMПереговоры = СоздатьОбъект("Документ.CRMПереговоры");
    CRMПереговоры.ВыбратьДокументы(НачДата, КонДата);
    Пока CRMПереговоры.ПолучитьДокумент() = 1 Цикл
        CRMПереговоры.ВыбратьСтроки();
        Пока CRMПереговоры.ПолучитьСтроку() = 1 Цикл    
            чПоз = 0;        
            Если тзПереговоры.НайтиЗначение(CRMПереговоры.СтатусПереговоров, чПоз, "Объект") = 1 Тогда
                тзПереговоры.УстановитьЗначение(чПоз, "Значение", тзПереговоры.ПолучитьЗначение(чПоз, "Значение") + 1);  
                чИтого = чИтого + 1;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;  
    
    Если чИтого = 0 Тогда    
        Сообщить("Нет статусов за данный период");
        Возврат;
    КонецЕсли;
    
    //Построение воронки
    чСередина = 200;
    чСмещениеВысота = 50;    
    чШирина = чСередина / чИтого;
    Процент = 100 / чИтого;
    тзПереговоры.ВыбратьСтроки();
    Пока тзПереговоры.ПолучитьСтроку() = 1 Цикл
        тзПереговоры.Процент     = Процент * тзПереговоры.Значение;        
        тзПереговоры.Ширина     = Окр(чШирина * тзПереговоры.Значение, 0);
    КонецЦикла;
    
    Текст_инет = СоздатьОбъект("Текст");
    Текст_инет.ДобавитьСтроку("<html><head><title>canvasExample</title></head><body><canvas height='800' width='600' id='example'>Обновите браузер</canvas><script>");
    Текст_инет.ДобавитьСтроку("var example = document.getElementById('example'); var ctx = example.getContext('2d'); example.height = 800; example.width = 600;");
        
    ПредШирина = 0;
    чНом = 0;    
    чСледВысота = 0;  
    
    тзПереговоры.ВыбратьСтроки();
    Пока тзПереговоры.ПолучитьСтроку() = 1 Цикл
        чНом = чНом + 1;
        чСледВысота = чСледВысота + чСмещениеВысота;  
        
        Если чНом = 1 Тогда
            ПредШирина = тзПереговоры.Ширина;    
        КонецЕсли;  
        Текст_инет.ДобавитьСтроку("ctx.fillStyle = '"+ВыборЦвета(чНом)+"';");
        //Текст_инет.ДобавитьСтроку("ctx.strokeStyle = '"+ВыборЦвета(чНом)+"';"); //Если нужно разукрасить линии    
                                                  
        КоординатаНачТочкиХ1     = чСередина - ПредШирина;
        КоординатаКонТочкиХ1     = чСередина + ПредШирина;

        КоординатаНачТочкиХ2     = чСередина - тзПереговоры.Ширина;
        КоординатаКонТочкиХ2     = чСередина + тзПереговоры.Ширина;
        
        КоординатаНачТочкиУ        = чСледВысота;
        КоординатаКонТочкиУ        = чСледВысота + чСмещениеВысота;
          
        Текст_инет.ДобавитьСтроку("ctx.beginPath();");
        Текст_инет.ДобавитьСтроку("ctx.moveTo("+СокрЛП(КоординатаНачТочкиХ1)+", "+СокрЛП(КоординатаНачТочкиУ)+");"); //перемешаем в начальную точку
        Текст_инет.ДобавитьСтроку("ctx.lineTo("+СокрЛП(КоординатаКонТочкиХ1)+", "+СокрЛП(КоординатаНачТочкиУ)+");");
        Текст_инет.ДобавитьСтроку("ctx.lineTo("+СокрЛП(КоординатаКонТочкиХ2)+", "+СокрЛП(КоординатаКонТочкиУ)+");");
        Текст_инет.ДобавитьСтроку("ctx.lineTo("+СокрЛП(КоординатаНачТочкиХ2)+", "+СокрЛП(КоординатаКонТочкиУ)+");");
        Текст_инет.ДобавитьСтроку("ctx.lineTo("+СокрЛП(КоординатаНачТочкиХ1)+", "+СокрЛП(КоординатаНачТочкиУ)+");");
        Текст_инет.ДобавитьСтроку("ctx.fill();");
        Текст_инет.ДобавитьСтроку("ctx.stroke();");  
        
        ТекстЛегенды = СокрЛП(тзПереговоры.Объект) + ": " + СокрЛП(тзПереговоры.Значение) + " (" + СокрЛП(тзПереговоры.Процент) + ") %";
        
        Текст_инет.ДобавитьСтроку("ctx.fillStyle = '#000000';");
        Текст_инет.ДобавитьСтроку("ctx.strokeStyle = '#000000';");
        Текст_инет.ДобавитьСтроку("ctx.font = 'bold 15px sans-serif';");
        Текст_инет.ДобавитьСтроку("ctx.strokeText('"+ТекстЛегенды+"', 400, "+СокрЛП(КоординатаКонТочкиУ-25)+");");
        
        ПредШирина = тзПереговоры.Ширина;
    КонецЦикла;
    Текст_инет.ДобавитьСтроку("</script></body></html>");        
    Текст_инет.КодоваяСтраница(0);
    Текст_инет.Записать("c:\1\voronka.html");
    ЗапуститьПриложение("c:\1\voronka.html");    
    
КонецПроцедуры
24 DGorgoN
 
14.08.13
16:44
Вначале заполнение данных, потом заполнение HTML (Нужен браузер с поддержкой HTML5).
25 NS
 
14.08.13
16:46
(20) АктивX вроде бесплатен.
26 Fragster
 
модератор
14.08.13
17:06
(25) нет, бесплатен ADO-ODBC драйвер
27 Ёпрст
 
14.08.13
17:07
(23) нафига через запустить приложение ?
Проще в самой форме показать.
28 acsent
 
14.08.13
17:08
Можно не воронкой, а лесенкой нарисовать.
Хотя можно и воронкой
29 acsent
 
14.08.13
17:10
30 DGorgoN
 
14.08.13
17:21
(27) Этот вопрос уже касателен допиливания под свои нужды. Тут ценен сам код и сам алгоритм.
31 DGorgoN
 
14.08.13
17:23
(28) Некрасиво ))) Вон глянь мою: http://vfl.ru/fotos/0891cb152891007.html
32 DGorgoN
 
14.08.13
17:24
Вообще "красяво"
33 acsent
 
14.08.13
17:25
(32) какая то странная у тебя воронка
34 Попытка1С
 
14.08.13
17:27
Всегда было интересно, кому нафиг эти графики нужны.
Ну вот гистограмму еще как-то могу понять, но воронка и прочее.. имхо все излишества.
35 КонецЦикла
 
14.08.13
17:58
(31) Это шприц сложной формы
(34) Визуализация помогает тупым топ-манагерам. Гистограмму тут они не осилят
36 Fragster
 
модератор
14.08.13
18:00
(35) т.е. (13) слишком сложно?
37 КонецЦикла
 
14.08.13
18:02
(36) Мозг должен достроить зеркальное отражение и скруглить квадратики :)
38 DGorgoN
 
14.08.13
18:12
(33) Ну какая есть, такая есть )))) Это не на всех данных - просто тест.
39 DGorgoN
 
14.08.13
18:20
(36) А зачем?
40 DGorgoN
 
14.08.13
18:20
Хотят же воронку.
41 Злопчинский
 
15.08.13
00:27
вот графика всякая штатно в клюшках.
http://infostart.ru/public/71675/
вообще не вижу проблемы нарисовать воронку на обычном отчете комбинайие клеточек...
42 DGorgoN
 
15.08.13
09:08
(41) Она у тебя секциями будет.
43 Злопчинский
 
15.08.13
11:35
(42) ну и что? выглядит так как надо пользователю..