|
Группировка в запросе | ☑ | ||
---|---|---|---|---|
0
spapin87
28.06.13
✎
11:35
|
Подскажите один момент, пытаюсь сделать группировку по ЗаказПоставщику_PI и ЗаказПоставщику_BO (3 уровень). ДокументОплатыВЭД (4 уровень). Сейчас группировка по Сделка, группировка надо сделать внутри этой групировки
Вот в принципе код(за комментировано условие, по которому пытаюсь найти нужные документы и сгруппировать для 3 уровня): Перем СуммаПеревода; Перем СуммаРасхода; Перем СуммаКонвертации; Перем СуммаТрансфер; Перем ЗаказПоставщикуBO; Перем ЗаказПоставщикуPI; Перем ЗаказПоставщикуCI; Перем ЗаказПоставщикуSK; ЗаказПоставщикуBO = 0; ЗаказПоставщикуPI = 0; ЗаказПоставщикуCI = 0; ЗаказПоставщикуSK = 0; СуммаПеревода = 0; СуммаРасхода = 0; СуммаКонвертации = 0; СуммаТрансфер = 0; Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет"); Запрос = Новый Запрос; текстзапроса = "ВЫБРАТЬ | ЗаказыПоставщикамВЭДОстаткиИОбороты.Контрагент, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику, | ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриход, | ЗаказыПоставщикамВЭДОстаткиИОбороты.Сделка КАК Сделка, | 0 КАК СуммаПеревода, | 0 КАК СуммаКонвертация, | 0 КАК СуммаТрансфер, | 0 КАК СуммаДокумента, | NULL КАК докоплаты, | 0 КАК КоэффОчистки, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_PI | ИЛИ ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_BO | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ КАК ЗаказПоставщикуPI, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_BO | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ КАК ЗаказПоставщикуBO, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_CI | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход + ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаФрахт | ИНАЧЕ 0 | КОНЕЦ КАК ЗаказПоставщикуCI, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_SK | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ КАК ЗаказПоставщикуSK, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента КАК ЗаказПоставщикуСуммаДокументаBO, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента КАК ЗаказПоставщикуСуммаДокументаCI, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента КАК ЗаказПоставщикуСуммаДокументаPI, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента КАК ЗаказПоставщикуСуммаДокументаSK, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаФрахт, | NULL КАК ДатаОплаты |ИЗ | РегистрНакопления.ЗаказыПоставщикамВЭД.ОстаткиИОбороты(&ДатаНачала, &ДатаКонца, Период, , ) КАК ЗаказыПоставщикамВЭДОстаткиИОбороты |ГДЕ | 1 = 1 | И 3 = 3 | |СГРУППИРОВАТЬ ПО | ЗаказыПоставщикамВЭДОстаткиИОбороты.Контрагент, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику, | ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход, | ЗаказыПоставщикамВЭДОстаткиИОбороты.Сделка, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_BO | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_SK | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_PI | ИЛИ ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_BO | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику ССЫЛКА Документ.ЗаказПоставщику_CI | ТОГДА ЗаказыПоставщикамВЭДОстаткиИОбороты.СуммаВзаиморасчетовПриход + ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаФрахт | ИНАЧЕ 0 | КОНЕЦ, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаФрахт, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента, | ЗаказыПоставщикамВЭДОстаткиИОбороты.ЗаказПоставщику.СуммаДокумента | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ДокументОплатыВЭД.Контрагент, | NULL, | 0, | ДокументОплатыВЭД.Сделка, | ДокументОплатыВЭД.СуммаПеревода, | ДокументОплатыВЭД.СуммаКонвертация, | ДокументОплатыВЭД.СуммаТрансфер, | ДокументОплатыВЭД.СуммаДокумента, | ДокументОплатыВЭД.Ссылка, | NULL, | NULL, | NULL, | NULL, | NULL, | NULL, | NULL, | NULL, | NULL, | NULL, | ДокументОплатыВЭД.Дата |ИЗ | Документ.ДокументОплатыВЭД КАК ДокументОплатыВЭД |ГДЕ | 2 = 2 | И 4 = 4 | И ДокументОплатыВЭД.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | |СГРУППИРОВАТЬ ПО | ДокументОплатыВЭД.Контрагент, | ДокументОплатыВЭД.Сделка, | ДокументОплатыВЭД.СуммаПеревода, | ДокументОплатыВЭД.СуммаКонвертация, | ДокументОплатыВЭД.СуммаТрансфер, | ДокументОплатыВЭД.СуммаДокумента, | ДокументОплатыВЭД.Ссылка, | ДокументОплатыВЭД.Дата |ИТОГИ | СУММА(СуммаВзаиморасчетовПриход), | СУММА(СуммаПеревода), | СУММА(СуммаКонвертация), | СУММА(СуммаТрансфер), | СУММА(СуммаДокумента), | СУММА(ЗаказПоставщикуPI), | СУММА(ЗаказПоставщикуBO), | СУММА(ЗаказПоставщикуCI), | СУММА(ЗаказПоставщикуSK) |ПО | Сделка"; Если ЭлементыФормы.Контрагент.Значение <> Справочники.Контрагенты.ПустаяСсылка() тогда Запрос.УстановитьПараметр("Контрагент", Контрагент); текстзапроса = СтрЗаменить(текстзапроса,"1 = 1","ЗаказыПоставщикамВЭДОстаткиИОбороты.Контрагент = &Контрагент"); текстзапроса = СтрЗаменить(текстзапроса,"2 = 2","ДокументОплатыВЭД.Контрагент = &Контрагент"); КонецЕсли; Если ЭлементыФормы.Сделка.Значение <> Справочники.СделкиВЭД.ПустаяСсылка() тогда Запрос.УстановитьПараметр("Сделка", Сделка); текстзапроса = СтрЗаменить(текстзапроса,"3 = 3","ЗаказыПоставщикамВЭДОстаткиИОбороты.Сделка = &Сделка"); текстзапроса = СтрЗаменить(текстзапроса,"4 = 4","ДокументОплатыВЭД.Сделка = &Сделка"); КонецЕсли; Запрос.УстановитьПараметр("ДатаКонца", КонецДня(ДатаКонца)); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.Текст = текстзапроса; Результат = Запрос.Выполнить(); ТЗРезультата = Результат.Выгрузить(); ТЗРезультата.Колонки.Добавить("ДатаДок"); ТЗРезультата.Колонки.Добавить("Уровень"); ТЗРезультата.Колонки.Добавить("Комментарий"); ТЗРезультата.Колонки.Добавить("ДокументДвижения"); Для каждого стрТЗРезультата из ТЗРезультата цикл Если (стрТЗРезультата.заказпоставщику = null) и (стрТЗРезультата.ДокОплаты = null) тогда стрТЗРезультата.уровень = 1; Иначе стрТЗРезультата.уровень = 2; Если стрТЗРезультата.заказПоставщику <> null тогда стрТЗРезультата.ДатаДок = Формат(стрТЗРезультата.заказПоставщику.дата, "ДФ=dd.MM.yyyy"); стрТЗРезультата.Комментарий = стрТЗРезультата.заказПоставщику.Комментарий; стрТЗРезультата.ДокументДвижения = стрТЗРезультата.заказПоставщику; КонецЕсли; Если стрТЗРезультата.ДокОплаты <> null тогда стрТЗРезультата.ДатаДок = Формат(стрТЗРезультата.ДокОплаты.дата, "ДФ=dd.MM.yyyy"); стрТЗРезультата.Комментарий = стрТЗРезультата.ДокОплаты.Комментарий; стрТЗРезультата.ДокументДвижения = стрТЗРезультата.ДокОплаты; КоэффОчистки = стрТЗРезультата.СуммаДокумента / стрТЗРезультата.СуммаКонвертация; КонецЕсли; КонецЕсли; // Если (ТипЗнч(стрТЗРезультата.ДокументДвижения) = Тип("ДокументСсылка.ЗаказПоставщику_PI")) ИЛИ // (ТипЗнч(стрТЗРезультата.ДокументДвижения) = Тип("ДокументСсылка.ЗаказПоставщику_BO")) Тогда // стрТЗРезультата.уровень = 3; //КонецЕсли; КонецЦикла; ТЗРезультата.Сортировать("Сделка,ДатаДОк"); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьСделка = Макет.ПолучитьОбласть("Сделка"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ОбластьИтого = Макет.ПолучитьОбласть("Итого"); ОбластьИтоги = Макет.ПолучитьОбласть("Итоги"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаСделка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Для каждого ВыборкаСделка из ТЗРезультата цикл ОбластьСделка.Области.ДеталиЦветное.ЦветФона = новый Цвет(0,160,255); Если ВыборкаСделка.СуммаПеревода <> 0 ИЛИ ВыборкаСделка.СуммаДокумента <> 0 ИЛИ ВыборкаСделка.СуммаКонвертация <> 0 ИЛИ ВыборкаСделка.СуммаТрансфер <> 0 Тогда ОбластьДетальныхЗаписей.Области.ЦветБежевый.ЦветФона = новый Цвет (255,150,64); Иначе ОбластьДетальныхЗаписей.Области.ЦветБежевый.ЦветФона = новый Цвет (255,255,255); КонецЕсли; Если ВыборкаСделка.уровень=1 тогда ОбластьСделка.Параметры.Заполнить(ВыборкаСделка); Если ВыборкаСделка.СуммаДокумента <> 0 И ВыборкаСделка.СуммаКонвертация <> 0 Тогда ОбластьСделка.Параметры.КоэффОчистки = ВыборкаСделка.СуммаДокумента / ВыборкаСделка.СуммаКонвертация; КонецЕсли; ТабДок.Вывести(ОбластьСделка, ВыборкаСделка.Уровень); иначе ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаСделка); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаСделка.Уровень); СуммаПеревода = СуммаПеревода + ВыборкаСделка.СуммаПеревода; СуммаРасхода = СуммаРасхода + ВыборкаСделка.СуммаДокумента; СуммаКонвертации = СуммаКонвертации + ВыборкаСделка.СуммаКонвертация; СуммаТрансфер = СуммаТрансфер + ВыборкаСделка.СуммаТрансфер; Если НЕ (ПустаяСтрока(ВыборкаСделка.ЗаказПоставщикуBO) И ПустаяСтрока(ВыборкаСделка.ЗаказПоставщикуPI) И ПустаяСтрока(ВыборкаСделка.ЗаказПоставщикуCI) И ПустаяСтрока(ВыборкаСделка.ЗаказПоставщикуSK)) Тогда ЗаказПоставщикуPI = ЗаказПоставщикуPI + ВыборкаСделка.ЗаказПоставщикуPI; ЗаказПоставщикуCI = ЗаказПоставщикуCI + ВыборкаСделка.ЗаказПоставщикуCI; ЗаказПоставщикуSK = ЗаказПоставщикуSK + ВыборкаСделка.ЗаказПоставщикуSK; КонецЕсли; КонецЕсли; КонецЦикла; ОбластьИтого.Параметры.ЗаказПоставщикуPI = ЗаказПоставщикуPI; ОбластьИтого.Параметры.ЗаказПоставщикуCI = ЗаказПоставщикуCI; ОбластьИтого.Параметры.ЗаказПоставщикуSK = ЗаказПоставщикуSK; ОбластьИтого.Параметры.ИтогоСуммаПеревода = СуммаПеревода; ОбластьИтого.Параметры.ИтогоРасход = СуммаРасхода; ОбластьИтого.Параметры.ИтогоСуммаКонвертация = СуммаКонвертации; ОбластьИтого.Параметры.ИтогоСуммаТрансфер = СуммаТрансфер; ОбластьИтоги.Параметры.ИтогоСуммаПеревода = СуммаПеревода; ОбластьИтоги.Параметры.ИтогоРасход = СуммаРасхода; ОбластьИтого.Области.ДеталиЦветноеИтого.ЦветФона = новый цвет(255,255,0); ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ПоказатьУровеньГруппировокСтрок(0); ТабДок.Вывести(ОбластьИтого); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); ТабДок.Вывести(ОбластьИтоги); |
|||
1
salvator
28.06.13
✎
11:37
|
Это назывыается "Итоги", а не "группировка".
Добавь итоги по нужным полям. |
|||
2
Mitriy
28.06.13
✎
11:37
|
о, сколько буков...
|
|||
3
salvator
28.06.13
✎
11:38
|
А вообще по коду - ужаснах.
Можно сделать проще и короче, имхо. |
|||
4
spapin87
28.06.13
✎
11:42
|
Так?
|СГРУППИРОВАТЬ ПО | ДокументОплатыВЭД.Контрагент, | ДокументОплатыВЭД.Сделка, | ДокументОплатыВЭД.СуммаПеревода, | ДокументОплатыВЭД.СуммаКонвертация, | ДокументОплатыВЭД.СуммаТрансфер, | ДокументОплатыВЭД.СуммаДокумента, | ДокументОплатыВЭД.Ссылка, | ДокументОплатыВЭД.Дата |ИТОГИ | СУММА(СуммаВзаиморасчетовПриход), | СУММА(СуммаПеревода), | СУММА(СуммаКонвертация), | СУММА(СуммаТрансфер), | СУММА(СуммаДокумента), | СУММА(ЗаказПоставщикуPI), | СУММА(ЗаказПоставщикуBO), | СУММА(ЗаказПоставщикуCI), | СУММА(ЗаказПоставщикуSK) |ПО | Сделка, | ЗаказПоставщикуСуммаДокументаBO, | ЗаказПоставщикуСуммаДокументаPI"; |
|||
5
salvator
28.06.13
✎
11:51
|
По итогам - да, так.
А дальше что ты там в выборке делаешь, даже разбираться лень. |
|||
6
spapin87
28.06.13
✎
12:11
|
Получается мне нужно сделать еще один цикл в выборке по документам?
|
|||
7
Nenaviwu1c20
28.06.13
✎
12:23
|
Выборка = запрос.выбрать(обходрезультатазапроса.погруппировкам);
Пока выборка.следующий() цикл ВыборкаЗаказПоставщикуСуммаДокументаBO = выборка.выбрать(обходрезультатазапроса.погруппировкам); пока ВыборкаЗаказПоставщикуСуммаДокументаBO.следующий() цикл ВыборкаЗаказПоставщикуСуммаДокументаPI = ВыборкаЗаказПоставщикуСуммаДокументаBO.выбрать(обходрезультатазапроса.погруппировкам); Пока ВыборкаЗаказПоставщикуСуммаДокументаBO.СЛедующий() цикл конеццикла конеццикла; конеццикла; ну и т.д. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |