|
Автогруппировка строк. Работа над ошибками. | ☑ | ||
---|---|---|---|---|
0
Nykos
01.09.15
✎
20:24
|
Здравствуйте, не кидайте сильно камнями, помогите исправить ошибки при построении макета с группировками.
1. ИтогПоВид почему-то подбивается в самом конце как общий итог. 2. Над шапкой формируется строка с суммами, происхождение которых мне до сих пор неизвестно... Чессслово, я просто не понимаю как это работает логически и в какой последовательности нужно группировать. Я готов получить любую оценку моих умственных способностей, но прошу - объясните, научите!! или посоветуете литературу для идиотов) Код ниже, спасибо заранее.... ТабДок = Новый ТабличныйДокумент; Макет = Отчеты.ОтчетПоРаботам.ПолучитьМакет("Макет"); ТабДок.НачатьАвтогруппировкуСтрок(); Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.Владелец = Владелец; Шапка.Параметры.НачДата = Формат(НачПериода,"ДФ=dd.MM.yy"); Шапка.Параметры.КонДата = Формат(КонПериода,"ДФ=dd.MM.yy"); ТабДок.Вывести(Шапка); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | СчетаИАктыОстаткиИОбороты.Владелец, | СчетаИАктыОстаткиИОбороты.Заказчик, | СчетаИАктыОстаткиИОбороты.ВыписанАкт, | СчетаИАктыОстаткиИОбороты.ВидУслуги КАК ВидУслуги, | СчетаИАктыОстаткиИОбороты.НачДата, | СчетаИАктыОстаткиИОбороты.КонДата, | СчетаИАктыОстаткиИОбороты.Наименование, | СчетаИАктыОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость, | СчетаИАктыОстаткиИОбороты.НалогКонечныйОстаток КАК Налог, | СчетаИАктыОстаткиИОбороты.ВыручкаКонечныйОстаток КАК Выручка, | СчетаИАктыОстаткиИОбороты.ВыручкаМенеджераКонечныйОстаток КАК ВыручкаМенеджера |ИЗ | РегистрНакопления.СчетаИАкты.ОстаткиИОбороты КАК СчетаИАктыОстаткиИОбороты |ГДЕ | СчетаИАктыОстаткиИОбороты.Дата МЕЖДУ &НачПериода И &КонПериода //| И СчетаИАктыОстаткиИОбороты.Владелец = &Владелец | И СчетаИАктыОстаткиИОбороты.ВыписанАкт = &флВыписанАкт |ИТОГИ | СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера) |ПО | ОБЩИЕ, | ВидУслуги"; //Запрос.УстановитьПараметр("Владелец",Владелец()); Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачалоМесяца(НачПериода))); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонецМесяца(КонПериода))); Запрос.УстановитьПараметр("флВыписанАкт",Истина); Выборка = Запрос.Выполнить().Выбрать(); Строка = Макет.ПолучитьОбласть("Строка"); СтоимостьИтог = 0; ВыручкаИтог = 0; ОплатаИтог = 0; Ном = 0; ИтогПоВид = ""; Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда Если ИтогПоВид <> "" Тогда ТабДок.Вывести(ИтогПоВид,1,,Ложь); КонецЕсли; Итог = Макет.ПолучитьОбласть("Подвал"); //Итог.Параметры.ИтогоВидУслуги = "ИТОГО ПО " + Выборка.ВидУслуги; Итог.Параметры.СтоимостьИтог = Выборка.Стоимость; Итог.Параметры.ВыручкаИтог = Выборка.Выручка; Итог.Параметры.ОплатаИтог = Выборка.ВыручкаМенеджера; ОбластьВид = Макет.ПолучитьОбласть("Вид"); ОбластьВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОбластьВид,1,,Ложь); Ном = 0; Продолжить; КонецЕсли; Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка-Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = Ном+1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка,2,,Ложь); СтоимостьИтог = СтоимостьИтог + Выборка.Стоимость; ВыручкаИтог = ВыручкаИтог + Выборка.Выручка; ОплатаИтог = ОплатаИтог + Выборка.ВыручкаМенеджера; КонецЦикла; Если ИтогПоВид <> "" Тогда ТабДок.Вывести(ИтогПоВид); КонецЕсли; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ОбластьИтог = Макет.ПолучитьОбласть("Подвал"); //ОбластьИтог.Параметры.ИтогоВидУслуги = "ИТОГО"; ОбластьИтог.Параметры.СтоимостьИтог = СтоимостьИтог; ОбластьИтог.Параметры.ВыручкаИтог = ВыручкаИтог; ОбластьИтог.Параметры.ОплатаИтог = ОплатаИтог; ТабДок.Вывести(ОбластьИтог); ТабДок.АвтоМасштаб = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Табдок.ОтображатьЗаголовки = Ложь; Табдок.ОтображатьСетку = Ложь; ТабДок.Показать(); |
|||
1
Tatitutu
01.09.15
✎
20:42
|
Вместо
НачатьАвтогруппировкуСтрок Пиши НачатьГруппировкуСтрок() |
|||
2
Nykos
01.09.15
✎
21:20
|
(1) у меня в 8.1 есть либо НачатьАвтогруппировкуСтрок() либо НачатьГруппуСтрок(). По крайней мере другого я не нашел.. Если использовать НачатьГруппуСтрок(), то их получается нужно несколько раз проставлять по коду в тех местах где необходима группировка. Эдакий ручной режим. Правильно я понял?
|
|||
3
Tatitutu
01.09.15
✎
21:50
|
(2) да именно так.это я,напутал с телефона пишу
Там 2 параметра Имя группировки - не очень обчзательно Второй - истина или ложь - раскрывать и сворачивать группу. |
|||
4
Nykos
01.09.15
✎
21:51
|
(3) спасибо,попробую этот вариант
|
|||
5
Nykos
02.09.15
✎
10:16
|
(3) Мучал я его, мучал, так ничего и не намучал...
Как сгруппировать по ВидУслуги так и не разобрался.. ТабДок = Новый ТабличныйДокумент; ТабДок.ПолеСправа = 20; ТабДок.ПолеСлева = 20; ТабДок.ПолеСнизу = 10; Табдок.ПолеСверху = 15; ТабДок.ОтображатьСетку = Ложь; ТабДок.ОтображатьГруппировки = Истина; ТабДок.АвтоМасштаб = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Табдок.ОтображатьЗаголовки = Ложь; Табдок.ОтображатьСетку = Ложь; Макет = Отчеты.ОтчетПоРаботам.ПолучитьМакет("Макет"); Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.Владелец = Владелец; Шапка.Параметры.НачДата = Формат(НачПериода,"ДФ=dd.MM.yy"); Шапка.Параметры.КонДата = Формат(КонПериода,"ДФ=dd.MM.yy"); Итого = Макет.ПолучитьОбласть("Итог"); Строка = Макет.ПолучитьОбласть("Строка"); ТабДок.Вывести(Шапка); ОблВид = Макет.ПолучитьОбласть("Вид"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | СчетаИАктыОстаткиИОбороты.Владелец, | СчетаИАктыОстаткиИОбороты.Заказчик, | СчетаИАктыОстаткиИОбороты.ВыписанАкт, | СчетаИАктыОстаткиИОбороты.ВидУслуги КАК ВидУслуги, | СчетаИАктыОстаткиИОбороты.НачДата, | СчетаИАктыОстаткиИОбороты.КонДата, | СчетаИАктыОстаткиИОбороты.Наименование, | СчетаИАктыОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость, | СчетаИАктыОстаткиИОбороты.НалогКонечныйОстаток КАК Налог, | СчетаИАктыОстаткиИОбороты.ВыручкаКонечныйОстаток КАК Выручка, | СчетаИАктыОстаткиИОбороты.ВыручкаМенеджераКонечныйОстаток КАК ВыручкаМенеджера |ИЗ | РегистрНакопления.СчетаИАкты.ОстаткиИОбороты КАК СчетаИАктыОстаткиИОбороты |ГДЕ | СчетаИАктыОстаткиИОбороты.Дата МЕЖДУ &НачПериода И &КонПериода //| И СчетаИАктыОстаткиИОбороты.Владелец = &Владелец | И СчетаИАктыОстаткиИОбороты.ВыписанАкт = &флВыписанАкт |ИТОГИ | СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера) |ПО | ОБЩИЕ, | ВидУслуги"; //Запрос.УстановитьПараметр("Владелец",Владелец()); Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачалоМесяца(НачПериода))); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонецМесяца(КонПериода))); Запрос.УстановитьПараметр("флВыписанАкт",Истина); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); СтоимостьИтог = 0; Пока Выборка.Следующий() Цикл ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(,Истина); Ном = 0; Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = Ном + 1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка); ТабДок.ЗакончитьГруппуСтрок(); //Итого.Параметры.СтоимостьИтог = 555; //ТабДок.Вывести(Итого); //Итог = Итог + КолИ; КонецЦикла; //Итого.Параметры.СтоимостьИтог = СтоимостьИтог; //ТабДок.Вывести(Итого); //ОбластьИтог = Макет.ПолучитьОбласть("Итог"); //ОбластьИтог.Параметры.ИтогоВидУслуги = "ИТОГО"; //ОбластьИтог.Параметры.СтоимостьИтог = СтоимостьИтог; //ОбластьИтог.Параметры.ВыручкаИтог = ВыручкаИтог; //ОбластьИтог.Параметры.ОплатаИтог = ОплатаИтог; //ТабДок.Вывести(ОбластьИтог); ТабДок.Показать(); |
|||
6
Nykos
02.09.15
✎
14:09
|
Никто не подскажет где почитать или видеоуроки посмотреть по группировкам?
|
|||
7
Franchiser
гуру
02.09.15
✎
15:02
|
правой кнопкой конструктор с обработкой результат
|
|||
8
Franchiser
гуру
02.09.15
✎
15:03
|
ты неправильно делаешь, нужно было с иерархией перебирать (см. как делает конструктор)
Выборка = Запрос.Выполнить().Выбрать(); - удали вставь Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); |
|||
9
Franchiser
гуру
02.09.15
✎
15:05
|
ОбщийИтог из запроса удали из Секции Итогов, он тебе не нужен
|
|||
10
Nykos
02.09.15
✎
15:08
|
(7) не понял...
Вроде как сделал я чтобы группировало как мне надо Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); СтоимостьИтог = 0; Пока Выборка.Следующий() Цикл ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(); Ном = 0; Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = Ном + 1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка); ТабДок.ЗакончитьГруппуСтрок(); КонецЦикла; НО, если я использую конструкцию Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); или Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); то в отладчике в значении Выборка все численные значения имеют тип Число, а остальные NULL. А если я просто использую Выполнить().Выбрать(), тогда теряется вся группировка.. (9)вот, я как раз хотел об этом спросить..спасибо что откликнулся |
|||
11
Nykos
02.09.15
✎
15:10
|
(9) Общий итог удалил тоже
|
|||
12
Franchiser
гуру
02.09.15
✎
15:11
|
"то в отладчике в значении Выборка все численные значения имеют тип Число, а остальные NULL."
Потому что нужно использовать агрегатную функцию Максимум для остальных полей |
|||
13
Franchiser
гуру
02.09.15
✎
15:12
|
|ИТОГИ
| СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера), |МАКСИМУМ(СчетаИАктыОстаткиИОбороты.Заказчик) |ПО | ОБЩИЕ, | ВидУслуги"; |
|||
14
Franchiser
гуру
02.09.15
✎
15:13
|
зачем тебе ПоГруппировкамСИерархией, это имеет смысл для Иерархических справочников
|
|||
15
Franchiser
гуру
02.09.15
✎
15:15
|
еще раз скоппируй текст запроса, правой кнопкой щелкни в коде и открой "Конструктой с обработкой результата", тебе все код и макет сгенерируется, потом его подредактируешь
|
|||
16
Franchiser
гуру
02.09.15
✎
15:17
|
"Строка.Параметры.Заказчик = Выборка.Заказчик;" - чтобы это все не писать:
Есть функция ЗаполнитьЗначенияСвойств() |
|||
17
Franchiser
гуру
02.09.15
✎
15:17
|
ЗаполнитьЗначенияСвойств(Строка,Выборка)
|
|||
18
Franchiser
гуру
02.09.15
✎
15:19
|
это же элементарные вещи, вроде не новичок
|
|||
19
Nykos
02.09.15
✎
15:27
|
(14) уяснил
(15) в 8.2 такая штука есть, а в 8.1 кажется нету... (16) (17) спасибо, буду иметь ввиду (18) я с группировкой первый раз столкнулся... к тому же я немного тугодум( |
|||
20
Franchiser
гуру
02.09.15
✎
15:36
|
(19) в целях изучения такого рода запросов тогда рекомендую поставить 1с 8.2
|
|||
21
Nykos
02.09.15
✎
15:47
|
(20) в университете факультатив с 8.1 был, я так и продолжаю с ней баловаться...
У меня осталась последняя проблема: как мне сделать чтобы в отчете строки не сворачивались по сумме, а то запросом выбирает из документа, который содержит таблицу, и вытягивает итог таблицы, а не отдельно каждую стр из тч... Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ //| СчетаИАктыОстаткиИОбороты.Владелец, | СчетаИАктыОстаткиИОбороты.Заказчик КАК Заказчик, | СчетаИАктыОстаткиИОбороты.ВыписанАкт, | СчетаИАктыОстаткиИОбороты.ВидУслуги КАК ВидУслуги, | СчетаИАктыОстаткиИОбороты.НачДата КАК НачДата, | СчетаИАктыОстаткиИОбороты.КонДата КАК КонДата, | СчетаИАктыОстаткиИОбороты.Наименование КАК Наименование, | СчетаИАктыОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость, | СчетаИАктыОстаткиИОбороты.НалогКонечныйОстаток КАК Налог, | СчетаИАктыОстаткиИОбороты.ВыручкаКонечныйОстаток КАК Выручка, | СчетаИАктыОстаткиИОбороты.ВыручкаМенеджераКонечныйОстаток КАК ВыручкаМенеджера |ИЗ | РегистрНакопления.СчетаИАкты.ОстаткиИОбороты КАК СчетаИАктыОстаткиИОбороты |ГДЕ | СчетаИАктыОстаткиИОбороты.Дата МЕЖДУ &НачПериода И &КонПериода //| И СчетаИАктыОстаткиИОбороты.Владелец = &Владелец | И СчетаИАктыОстаткиИОбороты.ВыписанАкт = &флВыписанАкт |ИТОГИ | СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера), |МАКСИМУМ(СчетаИАктыОстаткиИОбороты.Заказчик), |МАКСИМУМ(СчетаИАктыОстаткиИОбороты.Наименование), |МАКСИМУМ(СчетаИАктыОстаткиИОбороты.НачДата), |МАКСИМУМ(СчетаИАктыОстаткиИОбороты.КонДата) |ПО | ВидУслуги"; //Запрос.УстановитьПараметр("Владелец",Владелец()); Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачалоМесяца(НачПериода))); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонецМесяца(КонПериода))); Запрос.УстановитьПараметр("флВыписанАкт",Истина); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); СтоимостьИтог = 0; Пока Выборка.Следующий() Цикл ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(); Ном = 0; Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = Ном + 1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка); ТабДок.ЗакончитьГруппуСтрок(); КонецЦикла; |
|||
22
sash-ml
02.09.15
✎
16:10
|
Пока Выборка.Следующий() Цикл
ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(); Ном = 0; Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = Ном + 1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка); //////////////////Выборка Строк ////////////////// ВыборкаДеталей = Выборка.Выбрать(); // вот тут обход внутри одной группировки Пока ВыборкаДеталей.Следующий() Цикл; ТабДок.НачатьГруппуСтрок(); ТабДок.Вывести(...); // тут детальные записи ТабДок.ЗакончитьГруппуСтрок(); КонецЦикла; ////////////////// ////////////////// ТабДок.ЗакончитьГруппуСтрок(); КонецЦикла; |
|||
23
Franchiser
гуру
02.09.15
✎
16:12
|
На этапе перебора сумм:
ВыборкаДеталей = Выборка.Выбрать(); |
|||
24
sash-ml
02.09.15
✎
16:13
|
+(22) хотя группировка внутри цикла по ходу не нужна
|
|||
25
Nykos
02.09.15
✎
16:17
|
(23) (24) Спасибо большое вам за помощь, ребята!
|
|||
26
Nykos
02.09.15
✎
16:31
|
Найдите, пожалуйста ошибку:
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл СтоимостьИтог = 0; ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(); Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = 0; Ном = Ном + 1; Строка.Параметры.Ном = Ном; ТабДок.Вывести(Строка); ВыборкаДеталей = Выборка.Выбрать(); Пока ВыборкаДеталей.Следующий() Цикл; ТабДок.Вывести(Строка); КонецЦикла; ТабДок.ЗакончитьГруппуСтрок(); СтоимостьИтог = СтоимостьИтог + Выборка.Стоимость; Итого.Параметры.СтоимостьИтог = СтоимостьИтог; ТабДок.Вывести(Итого); КонецЦикла; Я уверен что она где-то тут Пока ВыборкаДеталей.Следующий() Цикл; ТабДок.Вывести(Строка); КонецЦикла; но я не понимаю что нужно выводить в табдок? |
|||
27
Nykos
02.09.15
✎
16:32
|
(26) Потому что выводит по количеству строк все правильно, а по содержанию - они просто много раз дублируются
|
|||
28
Nykos
03.09.15
✎
09:19
|
http://6.firepic.org/6/images/2015-09/03/x9i1nr5fj204.jpg
Верхняя строчка в каждой группе лишняя. В последней колонке все строки заполняются суммой из итогов. Подскажите пожалуйста, как исправить эти ошибки?.. |
|||
29
Nykos
03.09.15
✎
11:10
|
С первой проблемой разобрался. Дважды выводил область "Строка".
Осталась проблема только в последней колонке - почему-то в каждой строке сумма из итогов... ТабДок = Новый ТабличныйДокумент; ТабДок.ПолеСправа = 20; ТабДок.ПолеСлева = 20; ТабДок.ПолеСнизу = 10; Табдок.ПолеСверху = 15; ТабДок.ОтображатьСетку = Ложь; ТабДок.ОтображатьГруппировки = Истина; ТабДок.АвтоМасштаб = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Табдок.ОтображатьЗаголовки = Ложь; Табдок.ОтображатьСетку = Ложь; Макет = Отчеты.ОтчетПоРаботам.ПолучитьМакет("Макет"); Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.Владелец = Владелец; Шапка.Параметры.НачДата = Формат(НачПериода,"ДФ=dd.MM.yy"); Шапка.Параметры.КонДата = Формат(КонПериода,"ДФ=dd.MM.yy"); ТабДок.Вывести(Шапка); Итого = Макет.ПолучитьОбласть("Итог"); Строка = Макет.ПолучитьОбласть("Строка"); ОблВид = Макет.ПолучитьОбласть("Вид"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ //| СчетаИАктыОстатки.Владелец, | СчетаИАктыОстатки.Заказчик КАК Заказчик, | СчетаИАктыОстатки.ВыписанАкт, | СчетаИАктыОстатки.ВидУслуги КАК ВидУслуги, | СчетаИАктыОстатки.НачДата КАК НачДата, | СчетаИАктыОстатки.КонДата КАК КонДата, | СчетаИАктыОстатки.Наименование КАК Наименование, | СчетаИАктыОстатки.СтоимостьОстаток КАК Стоимость, | СчетаИАктыОстатки.НалогОстаток КАК Налог, | СчетаИАктыОстатки.ВыручкаОстаток КАК Выручка, | СчетаИАктыОстатки.ВыручкаМенеджераОстаток КАК ВыручкаМенеджера |ИЗ | РегистрНакопления.СчетаИАкты.Остатки КАК СчетаИАктыОстатки |ГДЕ | СчетаИАктыОстатки.Дата МЕЖДУ &НачПериода И &КонПериода //| И СчетаИАктыОстатки.Владелец = &Владелец | И СчетаИАктыОстатки.ВыписанАкт = &флВыписанАкт |ИТОГИ | СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера), |МАКСИМУМ(СчетаИАктыОстатки.Заказчик), |МАКСИМУМ(СчетаИАктыОстатки.Наименование), |МАКСИМУМ(СчетаИАктыОстатки.НачДата), |МАКСИМУМ(СчетаИАктыОстатки.КонДата) |ПО | ВидУслуги"; //Запрос.УстановитьПараметр("Владелец",Владелец()); Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачалоМесяца(НачПериода))); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонецМесяца(КонПериода))); Запрос.УстановитьПараметр("флВыписанАкт",Истина); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(); Строка.Параметры.Заказчик = Выборка.Заказчик; Строка.Параметры.Наименование = Выборка.Наименование; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); Строка.Параметры.Стоимость = Выборка.Стоимость; Строка.Параметры.Выручка = Выборка.Выручка - Выборка.Налог; Строка.Параметры.Оплата = Выборка.ВыручкаМенеджера; Ном = 0; СтоимостьИтог = 0; ВыручкаИтог = 0; ОплатаИтог = 0; Строка.Параметры.Ном = Ном; ВыборкаДеталей = Выборка.Выбрать(); Пока ВыборкаДеталей.Следующий() Цикл Ном = Ном + 1; Строка.Параметры.Ном = Ном; Строка.Параметры.Заполнить(ВыборкаДеталей); ТабДок.Вывести(Строка); КонецЦикла; ТабДок.ЗакончитьГруппуСтрок(); СтоимостьИтог = СтоимостьИтог + Выборка.Стоимость; ВыручкаИтог = ВыручкаИтог + Выборка.Выручка; ОплатаИтог = ОплатаИтог + Выборка.ВыручкаМенеджера; Итого.Параметры.СтоимостьИтог = СтоимостьИтог; Итого.Параметры.ВыручкаИтог = ВыручкаИтог; Итого.Параметры.ОплатаИтог = ОплатаИтог; ТабДок.Вывести(Итого); КонецЦикла; ТабДок.Показать(); КонецПроцедуры; |
|||
30
Franchiser
гуру
03.09.15
✎
12:39
|
Добавь в цикле по деталям строку:
Строка.Параметры.Оплата = ВыборкаДеталей.ВыручкаМенеджера; |
|||
31
Nykos
03.09.15
✎
13:21
|
(30) Спасибо. Получается в первом цикле вообще не имеет смысла объявлять параметры? Все лежит в Заполнить(ВыборкаДеталей)?
|
|||
32
Nykos
04.09.15
✎
09:02
|
Посоветуйте пожалуйста, как сделать группировку по владельцу с тем условием, что группироваться по владельцу должно в первую очередь? (у меня закомменченный кусок в цикле). Владельца то выводит, но не группирует...
Должно быть Владелец -> ВидУслуги -> Строки. А получается как на картинке: http://2.firepic.org/2/images/2015-09/04/l4rmd7kecx6s.jpg ТабДок = Новый ТабличныйДокумент; ТабДок.ПолеСправа = 20; ТабДок.ПолеСлева = 20; ТабДок.ПолеСнизу = 10; Табдок.ПолеСверху = 15; ТабДок.ОтображатьСетку = Ложь; ТабДок.ОтображатьГруппировки = Истина; ТабДок.АвтоМасштаб = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Табдок.ОтображатьЗаголовки = Ложь; Табдок.ОтображатьСетку = Ложь; Макет = Отчеты.ОтчетПоРаботам.ПолучитьМакет("Макет"); Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.НачДата = Формат(НачПериода,"ДФ=dd.MM.yy"); Шапка.Параметры.КонДата = Формат(КонПериода,"ДФ=dd.MM.yy"); ТабДок.Вывести(Шапка); Итого = Макет.ПолучитьОбласть("Итог"); //ИтогоВсего = Макет.ПолучитьОбласть("ИтогВсего"); Строка = Макет.ПолучитьОбласть("Строка"); ОблВид = Макет.ПолучитьОбласть("Вид"); ОблВлад = Макет.ПолучитьОбласть("Влад"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | СчетаИАктыОстатки.Владелец, | СчетаИАктыОстатки.Заказчик КАК Заказчик, | СчетаИАктыОстатки.ВыписанАкт, | СчетаИАктыОстатки.ВидУслуги КАК ВидУслуги, | СчетаИАктыОстатки.НачДата КАК НачДата, | СчетаИАктыОстатки.КонДата КАК КонДата, | СчетаИАктыОстатки.Наименование КАК Наименование, | СчетаИАктыОстатки.СтоимостьОстаток КАК Стоимость, | СчетаИАктыОстатки.НалогОстаток КАК Налог, | СчетаИАктыОстатки.ВыручкаОстаток КАК Выручка, | СчетаИАктыОстатки.ВыручкаМенеджераОстаток КАК ВыручкаМенеджера |ИЗ | РегистрНакопления.СчетаИАкты.Остатки КАК СчетаИАктыОстатки |ГДЕ | СчетаИАктыОстатки.Дата МЕЖДУ &НачПериода И &КонПериода | И СчетаИАктыОстатки.Владелец В (&Владелец) | И СчетаИАктыОстатки.ВыписанАкт = &флВыписанАкт |ИТОГИ | СУММА(Стоимость), | СУММА(Налог), | СУММА(Выручка), | СУММА(ВыручкаМенеджера), |МАКСИМУМ(СчетаИАктыОстатки.Заказчик), |МАКСИМУМ(СчетаИАктыОстатки.Наименование), |МАКСИМУМ(СчетаИАктыОстатки.НачДата), |МАКСИМУМ(СчетаИАктыОстатки.КонДата), |МАКСИМУМ(СчетаИАктыОстатки.Владелец) |ПО | ВидУслуги"; Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачалоМесяца(НачПериода))); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонецМесяца(КонПериода))); Запрос.УстановитьПараметр("флВыписанАкт",Истина); Если Владельцы.Количество() = 0 Тогда Влад = Новый СписокЗначений; Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(1)); Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(2)); Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(3)); Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(4)); Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(6)); Влад.Добавить(Справочники.Владельцы.НайтиПоКоду(7)); Иначе Влад = Новый СписокЗначений; Для Каждого Вл из Владельцы Цикл Влад.Добавить(Вл.Владелец) КонецЦикла; КонецЕсли; Запрос.УстановитьПараметр("Владелец", Влад); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл //ОблВлад.Параметры.Владелец = Выборка.Владелец; //ТабДок.Вывести(ОблВлад); ОблВид.Параметры.ВидУслуги = Выборка.ВидУслуги; ТабДок.Вывести(ОблВид); ТабДок.НачатьГруппуСтрок(,Ложь); Ном = 0; СтоимостьИтог = 0; ВыручкаИтог = 0; ОплатаИтог = 0; Строка.Параметры.Ном = Ном; ВыборкаДеталей = Выборка.Выбрать(); Пока ВыборкаДеталей.Следующий() Цикл Ном = Ном + 1; Строка.Параметры.Ном = Ном; Строка.Параметры.Заполнить(ВыборкаДеталей); Строка.Параметры.Оплата = ВыборкаДеталей.ВыручкаМенеджера; Строка.Параметры.Период = Формат(Выборка.НачДата,"ДФ=dd.MM.yy") + ?(ПустоеЗначение(Выборка.НачДата) ИЛИ ПустоеЗначение(Выборка.КонДата),""," - ") + Формат(Выборка.КонДата,"ДФ=dd.MM.yy"); ТабДок.Вывести(Строка); КонецЦикла; ТабДок.ЗакончитьГруппуСтрок(); СтоимостьИтог = СтоимостьИтог + Выборка.Стоимость; ВыручкаИтог = ВыручкаИтог + Выборка.Выручка; ОплатаИтог = ОплатаИтог + Выборка.ВыручкаМенеджера; Итого.Параметры.СтоимостьИтог = СтоимостьИтог; Итого.Параметры.ВыручкаИтог = ВыручкаИтог; Итого.Параметры.ОплатаИтог = ОплатаИтог; ТабДок.Вывести(Итого); КонецЦикла; //ТабДок.Вывести(ИтогоВсего); ТабДок.Показать(); |
|||
33
sash-ml
04.09.15
✎
09:19
|
|ИТОГИ
.... |ПО | Владелец, | ВидУслуги"; .... ВыборкаВладелец = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВладелец.Следующий() цикл ... ВыборкаУслуги = ВыборкаВладелец Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУслуги .Следующий() цикл ... ВыборкаДеталей = ВыборкаУслуги .Выбрать(); Пока ВыборкаДеталей .Следующий() цикл ... |
|||
34
Nykos
04.09.15
✎
09:57
|
(33) Все сделал! Еще добавил группировку по владельцу, итоги по владельцу, и общие итоги... Отчет готов! Большое спасибо за помощь!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |