|
Можно ли сделать так? | ☑ | ||
---|---|---|---|---|
0
espanol
09.10.12
✎
17:43
|
Вывожу в виде иерархии данные в отчет.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НАЧАЛОПЕРИОДА(УРВ_СостояниеРабот.Период, ДЕНЬ) КАК Период, | УРВ_СостояниеРабот.РабочееМесто КАК РабочееМесто, | УРВ_СостояниеРабот.Сотрудник КАК Сотрудник, | УРВ_СостояниеРабот.ПакетРабот КАК ПакетРабот, | УРВ_СостояниеРабот.Статус КАК Статус, | УРВ_СостояниеРабот.Период КАК ВремяНачала |ИЗ | РегистрСведений.УРВ_СостояниеРабот КАК УРВ_СостояниеРабот |ГДЕ | (УРВ_СостояниеРабот.Период МЕЖДУ &ДатаНачала И &ДатаОкончания) | И (НЕ УРВ_СостояниеРабот.Статус = ЗНАЧЕНИЕ(Перечисление.УРВ_СтатусыРабот.Запланировано)) | |СГРУППИРОВАТЬ ПО | УРВ_СостояниеРабот.РабочееМесто, | УРВ_СостояниеРабот.Сотрудник, | УРВ_СостояниеРабот.ПакетРабот, | НАЧАЛОПЕРИОДА(УРВ_СостояниеРабот.Период, ДЕНЬ), | УРВ_СостояниеРабот.Период, | УРВ_СостояниеРабот.Статус | |УПОРЯДОЧИТЬ ПО | Период, | РабочееМесто, | Сотрудник, | ПакетРабот, | ВремяНачала, | Статус |ИТОГИ ПО | Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНачала, &ДатаОкончания), | РабочееМесто, | Сотрудник, | ПакетРабот"; Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ЭлементыФормы.ДатаНачала.Значение)); Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ЭлементыФормы.ДатаОкончания.Значение)); Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ТабличныйДокумент.НачатьАвтогруппировкуСтрок(); Для Каждого СтрПУ Из Результат.Строки Цикл ОбластьСтрока.Параметры.Заполнить(СтрПУ); ОбластьСтрока.Параметры.ВремяПростоя = ""; ОбластьСтрока.Параметры.ВремяРаботы = ""; ОбластьСтрока.Параметры.Период = Формат(СтрПУ.Период, "ДФ=dd.MM.yyyy"); ТабличныйДокумент.Вывести(ОбластьСтрока, 1); Для Каждого СтрВУ Из СтрПУ.Строки Цикл ОбластьСтрока.Параметры.Заполнить(СтрВУ); ОбластьСтрока.Параметры.ВремяПростоя = ""; ОбластьСтрока.Параметры.ВремяРаботы = ""; ОбластьСтрока.Параметры.Период = Формат(СтрВУ.Период, "ДФ=dd.MM.yyyy"); ТабличныйДокумент.Вывести(ОбластьСтрока, 2); Для Каждого СтрТУ Из СтрВУ.Строки Цикл ОбластьСтрока.Параметры.Заполнить(СтрТУ); ОбластьСтрока.Параметры.ВремяПростоя = ""; ОбластьСтрока.Параметры.ВремяРаботы = ""; ОбластьСтрока.Параметры.Период = Формат(СтрТУ.Период, "ДФ=dd.MM.yyyy"); ТабличныйДокумент.Вывести(ОбластьСтрока, 3); Для Каждого СтрЧУ Из СтрТУ.Строки Цикл ОбластьСтрока.Параметры.Заполнить(СтрЧУ); ОбластьСтрока.Параметры.ВремяПростоя = ""; ОбластьСтрока.Параметры.ВремяРаботы = ""; ОбластьСтрока.Параметры.Период = Формат(СтрЧУ.Период, "ДФ=dd.MM.yyyy"); ОбластьСтрока.Параметры.ПакетРабот = СокрЛП(СтрЧУ.ПакетРабот.Номер); ТабличныйДокумент.Вывести(ОбластьСтрока, 4); Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Период"); Таблица.Колонки.Добавить("РабочееМесто"); Таблица.Колонки.Добавить("Сотрудник"); Таблица.Колонки.Добавить("ПакетРабот"); Таблица.Колонки.Добавить("Статус"); Таблица.Колонки.Добавить("ВремяНачала"); Таблица.Колонки.Добавить("ВремяРаботы"); Таблица.Колонки.Добавить("ВремяПростоя"); Таблица.Колонки.Добавить("ВремяПроцесса"); Таблица.Колонки.Добавить("ТПростоя"); Таблица.Колонки.Добавить("ТРаботы"); Для Каждого СтрПтУ Из СтрЧУ.Строки Цикл СтрТабл = Таблица.Добавить(); ЗаполнитьЗначенияСвойств(СтрТабл, СтрПтУ); СтрТабл.Период = Формат(СтрПтУ.Период, "ДФ=dd.MM.yyyy"); СтрТабл.ПакетРабот = СокрЛП(СтрПтУ.ПакетРабот.Номер); СтрТабл.ВремяНачала = СтрПтУ.ВремяНачала; КонецЦикла; ВычислитьВремя(ТабличныйДокумент, ОбластьСтрока, Таблица); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок(); ТабличныйДокумент.ПоказатьУровеньГруппировокСтрок(3); Дело в следующем, запросом выгрузить данные в том виде, что необходимо выводить в отчет невозможно! Поэтому приходится на последнем уровне делать сложный расчет и выводить эти данные. Но еще требуется для каждого более высокого уровня выводить итоги... как это сделать, коли по они уже выведены в табличный документ? |
|||
1
DrShad
09.10.12
✎
17:44
|
[Дело в следующем, запросом выгрузить данные в том виде, что необходимо выводить в отчет невозможно! ] и ты это утверждаешь с таким кодом!?
|
|||
2
and2
09.10.12
✎
17:46
|
чем тебе код не нравится?
автор, сейчас зовем Печонкина. он от 100 тыщ дает |
|||
3
espanol
09.10.12
✎
17:46
|
(1) да, а ты видимо решил начать строить из себя гуру, мол код не нравится?
как меня замучили такие выпендрежники, этот код только разрабатывается и еще будет оптимизироваться |
|||
4
Rovan
гуру
09.10.12
✎
17:46
|
(0) не знаешь как время в Запросе вычислять ?
|
|||
5
espanol
09.10.12
✎
17:48
|
(4) знаю, а ты задачу знаешь или тоже строить из себя решил бога адинасса?
|
|||
6
aleks-id
09.10.12
✎
17:48
|
а на СКД не судьба сделать?
|
|||
7
DrShad
09.10.12
✎
17:48
|
(3) [Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ЭлементыФормы.ДатаНачала.Значение));]
одно это уже сильно радует, да и о невозможности ты первый начал, так что расслабься и получай удовольствие |
|||
8
espanol
09.10.12
✎
17:48
|
(6) не судьба
|
|||
9
espanol
09.10.12
✎
17:50
|
Как всегда все свелось к тому что никто не знает решения или строит из себя гуру... но никто не хочет помогать.... форум катится к чертям ))
|
|||
10
espanol
09.10.12
✎
17:53
|
(7) лять, у нас че конкурс на самый правильный код что ли?!
|
|||
11
DrShad
09.10.12
✎
17:53
|
(9) ты бы задачу озвучил, а гадать по твоему коду что должно получиться - все равно что на кофейной гуще
|
|||
12
Deon
09.10.12
✎
17:57
|
(10) Перевожу: "Твой вопрос непонятен, перефразируй"
|
|||
13
Classic
09.10.12
✎
18:04
|
(0)
Грузи в ТЗ и обратно в запрос |
|||
14
espanol
09.10.12
✎
18:06
|
(12) ну попробую.
когда выводим данные в отче в виде иерархии, как известно мы сперва заполняем и выводим в табличный документ, 1 уровень, потом 2 уровень и т.д. но иногда возникают довольно сложные расчеты, которые невозможно сделать при помощи запроса (если бы запрос позволял делать все, то все только запросами бы и составляли, просто код был бы не нужен). В моем случае тоже сложный расчет, на самом последнем уровне я получаю данные, делаю расчет и вывожу все это в нижний уровень. но, мне также нужны итоги по всем уровням, которые будут отталкиваться от того расчета который был проведен на нижнем уровне. У меня канечно есть идея, забабахать одну ТЗ адскую и уже при помощи нее вывод делать, но можно ли обойтись и без нее? |
|||
15
Classic
09.10.12
✎
18:08
|
(14)
Вариант с ТЗ самый правильный. Как минимум потому, что у тебя данные расчета на верхнем уровне будут валяться где-то еще. И в случае чего к ним можно будет обратиться. |
|||
16
pumbaEO
09.10.12
✎
18:08
|
Ну а теперь включаем логику:
необходимые данные есть на самом нижнем уровне, когда рассчитывается верхний уровень данных еще нет. |
|||
17
DrShad
09.10.12
✎
18:09
|
(14) с использованием пакетника можно хоть сто раз вниз вперед бегать и считать
|
|||
18
DrShad
09.10.12
✎
18:09
|
(15) самый древний вариант - наука ушла далеко вперед
|
|||
19
espanol
09.10.12
✎
18:13
|
(17) что ты имеешь ввиду под пакетником?
|
|||
20
DrShad
09.10.12
✎
18:15
|
(19) использовать временные таблицы в запросе
|
|||
21
espanol
09.10.12
✎
18:16
|
(20) ну он мне тут скорее всего не поможет
|
|||
22
Classic
09.10.12
✎
18:16
|
(18)
И что ты в пакетник засунешь? |
|||
23
DrShad
09.10.12
✎
18:18
|
(22) да все что угодно - у меня у одного клиента пакетником премия считается сотрудникам, а в расчете 43 нелинейных показателя
|
|||
24
pumbaEO
09.10.12
✎
18:19
|
(22) ну в теории соединить по УРВ_СостояниеРабот.Период < УРВ_СостояниеРаботСледующиее.Период и сгрупировать по времени окончания мин...
Но что у ему за расчеты нужны, пока не понятно. |
|||
25
Classic
09.10.12
✎
18:20
|
Ты где рассчитанные данные по верхним уровням хранить будешь?
Вопрос ведь не в "считается", а в "выводится" |
|||
26
Classic
09.10.12
✎
18:21
|
(24)
Та фиг его знает, что делает та процедура, почему это процедура, а не функция, но "маемо шо маемо" |
|||
27
pumbaEO
09.10.12
✎
18:24
|
(26) насколько понимаю
Таблица.Колонки.Добавить("ВремяРаботы"); Таблица.Колонки.Добавить("ВремяПростоя"); Таблица.Колонки.Добавить("ВремяПроцесса"); Таблица.Колонки.Добавить("ТПростоя"); Таблица.Колонки.Добавить("ТРаботы"); А вообще, (0) ТС - дешево и сердито до определенного момента: результат запроса в выгрузить в дерево значений посчитать нижнее уровни, рекурсией пройтись наверх и потом только делать вывод отчет. |
|||
28
espanol
09.10.12
✎
18:26
|
ну запрос только вытаскивает данные, а мне еще нужно их добавлять в зависимости от выполнения или не выполнения условий...
там еще идет просмотр по статусам если в верхней строке такой то статус а в нижней такой то то высчитать такое то время, если там что-то еще то это время будет или простоем или работой и т.п... и т.п... |
|||
29
espanol
09.10.12
✎
18:27
|
(27) я так и думал сделать
|
|||
30
Classic
09.10.12
✎
18:27
|
(28)
Самая общая идея - сначала все посчитать, а потом уже выводить |
|||
31
pumbaEO
09.10.12
✎
18:28
|
(28) Выбор когда
Смотри какая несправедливость в запросах есть Case, а в языке 1С нет, приходится ИначеЕсли пользоваться. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |