Имя: Пароль:
1C
 
Из одного поля извлечь данные три раза в запросе
,
0 GoStopFan
 
29.02.16
13:47
Добрый день! Только начинаю прогать в 1С. Имеется документ Событие. Я по нему делаю отчет, в который мне надо получить следующие данные: Основной менеджер, К-во встреч, К-во встреч с выявленным интересом, кол-во звонков.
В этом документе Событие есть нужные реквизиты: ОсновнойМенеджер, ВидСобытия (звонок/встреча/письмо и т.д....), Статус(Завершено/Отложено/Выявлен интерес и т.д...).

Помогите, как мне одним запросом получить данные во все эти колонки? А то все, что я смог сделать - это одним запросом посчитать либо встречи, либо встречи с интересом, либо звонки.

Вот текст процедуры, которую я сделал
Запрос = Новый Запрос;
    
    Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.ДатаНачала.Значение);
    Запрос.УстановитьПараметр("ДатаКонца", ЭлементыФормы.ДатаКонца.Значение);
    Запрос.УстановитьПараметр("VIP", ЭлементыФормы.ПолеВводаVIP.Значение);
    Запрос.УстановитьПараметр("Область", ЭлементыФормы.ПолеВводаОбласть.Значение);
    Запрос.УстановитьПараметр("ОснМенеджер", ЭлементыФормы.ПолеВводаОсновнойМенеджер.Значение);
    Запрос.УстановитьПараметр("Регион", ЭлементыФормы.ПолеВводаРегион.Значение);
    Запрос.УстановитьПараметр("Контрагент", ЭлементыФормы.ПолеВводаКонтрагент.Значение);
    Запрос.УстановитьПараметр("Встреча", Перечисления.ВидыСобытий.ЛичнаяВстреча);
    Запрос.УстановитьПараметр("Статус", Перечисления.СостоянияСобытий.CRM_ВыявленИнтерес);
    Запрос.Текст=
    "ВЫБРАТЬ
    |    Событие.ВидСобытия КАК ЛичныеВстречи,
    |    Событие.Контрагент.ОсновнойМенеджерПокупателя КАК ОсновнойМенеджер,
    |    Событие.Контрагент.ОсновнойМенеджерЗапасныеЧасти КАК ОсновнойМенеджерЗапасныеЧасти,
    |    Событие.Контрагент КАК Контрагент,
    |    Событие.СостояниеСобытия,
    |    Событие.Контрагент.ПриоритетВРаботе КАК ПриоритетВРаботе,
    |    Событие.Регион,
    |    Событие.Дата КАК Дата,
    |    Событие.ВидСобытия КАК ВидСобытия
    |ИЗ
    |    Документ.Событие КАК Событие
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
    |                ТОГДА Событие.Контрагент = &Контрагент
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |    И ВЫБОР
    |            КОГДА &VIP <> ЗНАЧЕНИЕ(Справочник.ПриоритетРаботы.ПустаяСсылка)
    |                ТОГДА Событие.Контрагент.ПриоритетВРаботе = &VIP
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |    И ВЫБОР
    |            КОГДА &ОснМенеджер <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
    |                ТОГДА Событие.Контрагент.ОсновнойМенеджерПокупателя = &ОснМенеджер
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |    И ВЫБОР
    |            КОГДА &Регион <> ЗНАЧЕНИЕ(Справочник.Регионы.ПустаяСсылка)
    |                ТОГДА Событие.Регион = &Регион
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |    И Событие.Дата >= &ДатаНачала
    |    И Событие.Дата <= &ДатаКонца
    |    И Событие.ВидСобытия = &Встреча
    |
    |СГРУППИРОВАТЬ ПО
    |    Событие.Контрагент.ОсновнойМенеджерПокупателя,
    |    Событие.Контрагент.ОсновнойМенеджерЗапасныеЧасти,
    |    Событие.СостояниеСобытия,
    |    Событие.Контрагент.ПриоритетВРаботе,
    |    Событие.Регион,
    |    Событие.Дата,
    |    Событие.ВидСобытия,
    |    Событие.Контрагент,
    |    Событие.ВидСобытия
    |
    |УПОРЯДОЧИТЬ ПО
    |    Контрагент
    |ИТОГИ
    |    КОЛИЧЕСТВО(ЛичныеВстречи)
    |ПО
    |    Контрагент ИЕРАРХИЯ,
    |    ОсновнойМенеджер
    |АВТОУПОРЯДОЧИВАНИЕ";    
    
    Выборка = Запрос.Выполнить();
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    Макет = ПолучитьМакет("Макет");
    ОбластьДата = Макет.ПолучитьОбласть("ШапкаДата");
    ОбластьНазвание = Макет.ПолучитьОбласть("ШапкаНазвание");
    ОбластьОбласть = Макет.ПолучитьОбласть("ШапкаОбласть");
    ОбластьVIP = Макет.ПолучитьОбласть("ШапкаVIP");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДанные = Макет.ПолучитьОбласть("Данные");
    ОбластьИтоги = Макет.ПолучитьОбласть("ИТОГИ");
    ТабДок.Очистить();
    ОбластьДата.Параметры.ДатаОтчета = ТекущаяДата();
    ТабДок.Вывести(ОбластьДата);
    ТабДок.Вывести(ОбластьНазвание);
    ОбластьОбласть.Параметры.Область = ЭлементыФормы.ПолеВводаОбласть.Значение;
    Табдок.Вывести(ОбластьОбласть);
    ОбластьVIP.Параметры.VIP = ЭлементыФормы.ПолеВводаVIP.Значение;
    ТабДок.Вывести(ОбластьVIP);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    
    ВыборкаКонтрагент = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    Пока ВыборкаКонтрагент.Следующий() Цикл
        
        ОбластьДанные.Параметры.ЛичныеВстречи = 0;
        ОбластьДанные.Параметры.ВстречиИнтерес = 0;
        ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры, ВыборкаКонтрагент);
        ТабДок.Вывести(ОбластьДанные,1);
    КонецЦикла;    
    
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
КонецПроцедуры
1 Tateossian
 
29.02.16
13:51
Вот это убери:
ЭлементыФормы.ДатаНачала.Значение на ДатаНачала, так как это противоречит паттерну MVC
2 Лефмихалыч
 
29.02.16
13:51
ЯННП.

Зачем в твоем запросе все эти ВЫБОРКОГДАТОГДА?
3 Rie
 
29.02.16
13:53
(0) Вместо ИТОГИ используй агрегатные функции.
4 GoStopFan
 
29.02.16
13:58
(2) В форме есть отбор по критериям. Если поле заполенно, то по нему отбираем. если нет - то пропускаем этот пункт. (3) Так вот я не понимаю как.
5 FIXXXL
 
29.02.16
14:00
(4) лучше начинай СКД осваивать
6 GoStopFan
 
29.02.16
14:01
(5) Начальник сказал не через СКД делать
7 Rie
 
29.02.16
14:10
(4) В секции КОГДА укажи все условия.
Текст запроса можешь формировать программно - и тогда просто не включай в него соответствующее условие, если оно не задано на форме.
8 GoStopFan
 
29.02.16
14:15
(7) На форме указывается только ВИП, Регион, контрагент, менеджер. Вот в секции КОГДА я вроде как все это и записал. По факту сейчас выводит частично то, что мне надо - это контрагента и его менеджера, исходя из заданных критериев. Тут все норм работает. Вопрос в том, как сделать, чтобы просматривались все значения реквизита ВидСобытия. И если это втреча - то плюсовалось в одну колонку, если звонок - в другую..
9 Rie
 
29.02.16
17:50
(8) Что на форме указывается - это дело десятое. Каким-то образом данные получены.
Что касается "в разные колонки" - создай подзапрос. В котором будут два поля в ВЫБОР, превращающие ВидСобытия в 1 или в 0. И потом - СУММА().
10 ВРедная
 
29.02.16
18:00
(9) Зачем человека плохому учишь. Подзапросы...

Сделай отдельные колонки полей прямо в запросе, типа:
Выбор когда Событие.ВидСобытия = &ПервоеСобытие тогда 1 Иначе 0 конец КАК ПервоеСобытие,
Выбор когда Событие.ВидСобытия = &ВтороеСобытие тогда 1 Иначе 0 конец КАК ВтороеСобытие


И т.д.
А в итогах сложи. Если если нужно сгруппировать - в группировках тоже сложи эти поля.
11 GoStopFan
 
01.03.16
10:19
(10) Спасибо огромное) Теперь все работает