![]() |
![]() |
![]() |
|
Условие к функции в запросе | ☑ | ||
---|---|---|---|---|
0
Ната
11.10.04
✎
15:03
|
Подскажите, пожалуйста, как в запросе к журналу расчетов написать условие к функции, что результат принадлежит сотруднику
|Функция Итог=Сумма(ПоОкладу) Когда ( ????); |
|||
1
СамиЗнаетеКто
11.10.04
✎
15:12
|
а что, показывать весь текст запроса уже немодно?
|
|||
2
Ната
11.10.04
✎
15:15
|
Я показала так Волшебник закрыл
Флаг3=Запрос2.Выполнить( "//{{Запрос2() |Период с НачДата по КонДата; |ПД=ЖурналРасчетов.Зарплата.ПериодДействия; |Сотрудник=ЖурналРасчетов.Зарплата.Объект; |ВР=ЖурналРасчетов.Зарплата.ВидРасч; |Объекты=ЖурналРасчетов.Зарплата.Объекты; |Часы=ЖурналРасчетов.Зарплата.Часы; |ПоОкладу= ЖурналРасчетов.Зарплата.Результат; |Условие((ВР=ВидРасчета.ПоТарифу) или (ВР=ВидРасчета.ЗаСовмещение)); |Группировка Объекты Все ВошедшиеВЗапрос; |Группировка ПД Все ВошедшиеВЗапрос; |Группировка Сотрудник Все ВошедшиеВЗапрос; |Функция Итог=Сумма(ПоОкладу) Когда (); |Функция ИтогДней=Сумма(Часы); |" ); Если (Флаг1=0) или (Флаг2= 0) или (Флаг3=0) Тогда Возврат; КонецЕсли; |
|||
3
СамиЗнаетеКто
11.10.04
✎
15:18
|
а какому сотруднику должен принадлежать результат?
|
|||
4
GrayT
11.10.04
✎
15:22
|
Когда (Сотрудник = ВыбСотрдник)
ВыбСотрудник = см. 3 |
|||
5
Ната
11.10.04
✎
15:23
|
Есть сотрудники которые работали на объектах, так вот запрос общий резульат по сотруднику собирает, а по объекту суммирует результаты всех сотрудников по этому объекту.
|
|||
6
Valery
11.10.04
✎
15:24
|
Условие предполагает наличие двух переменных. Одна определена в запросе, а вторая где?
|
|||
7
Ната
11.10.04
✎
15:27
|
Нету у меня другой переменной только с Дата1 по Дата2. Что с этим запросом делать ума не приложу
|
|||
8
Valery
11.10.04
✎
15:27
|
Тогда условие получается по объекту. Объекты=ВыбОбъект.
|
|||
9
Valery
11.10.04
✎
15:29
|
(7) ну как так. Нету второй. На форму повесь. Всеравно без нее не обойдешся.
|
|||
10
Ната
11.10.04
✎
15:31
|
А что я могу повесить если за произвольное количество периодов по всем сотрудникам и объектам, подскажи буду счастлива
|
|||
11
Valery
11.10.04
✎
15:39
|
Если в (5) я правильно понял, то условия не надо. В группировке Объекты будут данные по всем сотрудникам
|
|||
12
Ната
11.10.04
✎
15:45
|
Ничего подобного.Тройной запрос Первый выводит Периоды действия и общие итоги, Второй Сотрудников и общие итоги по ним. Третий объекты на которых работали сотрудники и суммы по объектам и вот как раз по объектам третий запрос и врет
|
|||
13
Valery
11.10.04
✎
15:49
|
Что значит тройной запрос?
|
|||
14
Ната
11.10.04
✎
15:54
|
Флаг1, Флаг2, Флаг3
Нужно получить вот такой отчет ФИО Период1 | Период2 <СОТРУДНИК> ВСЕГО < Наименование Объекта> < Наименование Объекта> <СОТРУДНИК> ВСЕГО < Наименование Объекта> < Наименование Объекта> ИТОГО Три одинаковых запроса с разными группировками 1. Период, 2. Сотрудник и период, 3. Объекты и период |
|||
15
Valery
11.10.04
✎
16:17
|
В зависимости от значений флага, менять группировку.
н-р Если Флаг1=1 Тогда Запрос=Запрос+" |Группировка Объекты Все ВошедшиеВЗапрос; |Группировка ПД Все ВошедшиеВЗапрос; |Группировка Сотрудник Все ВошедшиеВЗапрос; " иначеесли флаг2=1 тогда Запрос=Запрос+" так вот думаю |Группировка ПД Все ВошедшиеВЗапрос; |Группировка Объекты Все ВошедшиеВЗапрос; |Группировка Сотрудник Все ВошедшиеВЗапрос; " |
|||
16
Ната
11.10.04
✎
16:41
|
Так у меня так и есть. Только когда цепляешь секции
Пока Запрос2.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Секция_3|Наименование"); Пока Запрос2.Группировка(2)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); А когда добавляешь Пока Запрос2.Группировка(3)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); Тогда запрос цепляет лишние секции по количеству сотрудников |
|||
17
Шапокляк
11.10.04
✎
16:44
|
Значит порядок группировок такой - если сотрудник в 3-ей группировке, то и плодятся секции по числу сотрудников.
|
|||
18
Ната
11.10.04
✎
16:48
|
А если в первой тогда объекты выводит целую кучу раз
|
|||
19
Valery
11.10.04
✎
16:53
|
А лишние - это какие?
Можно так н-р Пока Запрос2.Группировка(3)=1 Цикл Если Запрос.итог >0 тогда Таб.ПрисоединитьСекцию("Секция_3|Начислено"); конецесли; |
|||
20
Valery
11.10.04
✎
16:55
|
т.е если Сотрудник работал на данном объекте, то Итог >0
|
|||
21
Шапокляк
11.10.04
✎
16:58
|
Я же не оспариваю порядок группировок. Нужно чтобы сотрудник в 3-ей был - ради бога. Но Вы же сами
Пока Запрос2.Группировка(3)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); присоединяете секции Начислено при переборе сотрудников. Так зачем удивляться, что они присоединились? |
|||
22
Ната
11.10.04
✎
17:04
|
Так он может на этом объекте 5 раз в месяц работать.
Попробовала Пока Запрос2.Группировка(3)=1 Цикл Если Запрос.итог >0 тогда Таб.ПрисоединитьСекцию("Секция_3|Начислено"); конецесли; Врет запрос. цепляет лишние секции и все равно плюсует результы других сотрудников по этому объекту |
|||
23
Ната
11.10.04
✎
17:05
|
(Для Шапокляк) Я не удивляюсь, а спрашиваю что делать?
|
|||
24
Шапокляк
11.10.04
✎
17:09
|
А нету ошибочки в (22)? Если Запрос.итог >0 тогда
Вроде Запрос2 крутится? А если у всех сотрудников нечто >0, правильно ли присоединять секцию начислено? |
|||
25
Ната
11.10.04
✎
17:20
|
Ошибку я вижу просто уже не знаю что с ним делать, я вещи и подурнее пробовала. Просто ни где аналогий таких запросов не видела вот и бьюсь
|
|||
26
Шапокляк
11.10.04
✎
17:24
|
Вы сознательно при обработке результатов ЗАПРОСА2 в условии "Если Запрос.итог >0 тогда " используете СОВСЕМ другой запрос - ЗАПРОС?
Что находится в секции Начислено? Это такой творческий замысел, что при обработке данных по сотрудникам все их суммы (или что там есть в секции Начислено - я ж ее не видела!) в одну строчку растягивать? Если в столбик хочется, то не "Присоединитьсекцию", а "ВывестиСекцию". |
|||
27
Ната
11.10.04
✎
17:30
|
Объекты (названия)выводятся в секции, а к ним Присоединяются итоги (по периоду)
|
|||
28
Шапокляк
11.10.04
✎
17:37
|
Упражнение для тренировки терпения.
Пока Запрос2.Группировка(3)=1 Цикл Если Запрос.итог >0 тогда Таб.ПрисоединитьСекцию("Секция_3|Начислено"); конецесли; Это (22). Предположим на объекте(вышестоящая группировка) работали все сотрудники. Предположим, ВывестиСекцию из вышестоящей группировки выводит секцию с названием объекта. Далее Вы пере бираете всех сотрудников в группировке №3 и выводите их подряд в одну строчку. Перед этим Вы проверяете, не равны ли нулю данные совсем другого запроса, и если не равны, то как раз и удлиняете эту строчку, присоединяя к ней очередной кусок. |
|||
29
Ната
11.10.04
✎
17:41
|
Ну я же не дурочка
Пока Запрос2.Группировка(3)=1 Цикл Если Запрос2.итог >0 тогда Таб.ПрисоединитьСекцию("Секция_3|Начислено"); конецесли; |
|||
30
Шапокляк
11.10.04
✎
17:49
|
"Ну я же не дурочка". Заметьте, Ваши слова.
БОЖЕ МОЙ! ПрисоединитьСекцию добавляет кусок строки ВПРАВО!!! (27) Объекты (названия)выводятся в секции, а к ним Присоединяются итоги (по периоду) Да не по периоду они присоединяются, а по каждому сотруднику, это же очевидно! |
|||
31
Ната
11.10.04
✎
17:54
|
Таблица строится прекрасно если не добавлять (Пока Запрос2.Группировка(3)=1 Цикл) , но запрос считает не коректно, я же хотела узнать возможно ли не добавляя эту группировку получить корректные итоги по объектам
|
|||
32
Шапокляк
11.10.04
✎
18:02
|
Ну вот. 30 с лишним постов и тут только выясняется чего хотелось. Правда не в полном объеме.
Я так поняла объект добавлен в число реквизитов ЖР? Если нужно таблицу в виде колонок Объект,ПД1, ПД2 и т.д., то я бы сделала 1-ю группировку по объекту, а вторую по ПД и все дела В 1-м цикле выводила бы ВывестиСекцию("Строка|Объект"), а во 2-й гр. присоединяла бы ПрисоединитьСекцию("Строка|ПД"). И Когда () убрала бы. |
|||
33
Ната
11.10.04
✎
18:11
|
Наверное так будет проще:
Запрос=СоздатьОбъект("Запрос"); Запрос1=СоздатьОбъект("Запрос"); Запрос2=СоздатьОбъект("Запрос"); Флаг1=Запрос.Выполнить( "//{{Запрос() |Период с НачДата по КонДата; |ПД=ЖурналРасчетов.Зарплата.ПериодДействия; |Сотрудник=ЖурналРасчетов.Зарплата.Объект.ТекущийЭлемент; |ВР=ЖурналРасчетов.Зарплата.ВидРасч; |Объекты=ЖурналРасчетов.Зарплата.Объекты; |Часы=ЖурналРасчетов.Зарплата.Часы; |ПоОкладу= ЖурналРасчетов.Зарплата.Результат; |Условие((ВР=ВидРасчета.ПоТарифу) или (ВР=ВидРасчета.ЗаСовмещение)); |Группировка ПД Все; |Функция Итог=Сумма(ПоОкладу); |Функция ИтогДней=Сумма(Часы); |"//}}Запрос ); Флаг2=Запрос1.Выполнить( "//{{Запрос1() |Период с НачДата по КонДата; |ПД=ЖурналРасчетов.Зарплата.ПериодДействия; |Сотрудник=ЖурналРасчетов.Зарплата.Объект.ТекущийЭлемент; |ВР=ЖурналРасчетов.Зарплата.ВидРасч; |Объекты=ЖурналРасчетов.Зарплата.Объекты; |Часы=ЖурналРасчетов.Зарплата.Часы; |ПоОкладу= ЖурналРасчетов.Зарплата.Результат; |Условие((ВР=ВидРасчета.ПоТарифу) или (ВР=ВидРасчета.ЗаСовмещение)); |Группировка Сотрудник Все ВошедшиеВЗапрос; |Группировка ПД Все ВошедшиеВЗапрос ; |Функция Итог=Сумма(ПоОкладу); |Функция ИтогДней=Сумма(Часы); |" ); Флаг3=Запрос2.Выполнить( "//{{Запрос2() |Период с НачДата по КонДата; |ПД=ЖурналРасчетов.Зарплата.ПериодДействия; |Сотрудник=ЖурналРасчетов.Зарплата.Объект; |ВР=ЖурналРасчетов.Зарплата.ВидРасч; |Объекты=ЖурналРасчетов.Зарплата.Объекты; |Часы=ЖурналРасчетов.Зарплата.Часы; |ПоОкладу= ЖурналРасчетов.Зарплата.Результат; |Условие((ВР=ВидРасчета.ПоТарифу) или (ВР=ВидРасчета.ЗаСовмещение)); |Группировка Объекты Все ВошедшиеВЗапрос; |Группировка ПД Все ВошедшиеВЗапрос; |Группировка Сотрудник Все ВошедшиеВЗапрос; |Функция Итог=Сумма(ПоОкладу) Когда (Сотрудник=Сотрудник); |Функция ИтогДней=Сумма(Часы); |" ); Если (Флаг1=0) или (Флаг2= 0) или (Флаг3=0) Тогда Возврат; КонецЕсли; Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Секция_1|Наименование"); Пока Запрос.Группировка(1)=1 Цикл Таб.ПрисоединитьСекцию("Секция_1|Начислено"); КонецЦикла; Пока Запрос1.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Секция_2|Наименование"); Пока Запрос1.Группировка(2)=1 Цикл Таб.ПрисоединитьСекцию("Секция_2|Начислено"); КонецЦикла; Пока Запрос2.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Секция_3|Наименование"); Пока Запрос2.Группировка(2)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); КонецЦикла; КонецЦикла; КонецЦикла; Таб.ВывестиСекцию("Секция_4|Наименование"); Пока Запрос.Группировка(1)=1 Цикл Таб.ПрисоединитьСекцию("Секция_4|Начислено"); КонецЦикла; |
|||
34
Шапокляк
11.10.04
✎
18:29
|
Итак, Запрос нужен для печати заголовка и общих сумм по периодам. Напечатали.
Далее внешний цикл (гр.1) Запроса1 - перебор сотрудников и печать наименования сотрудника. Следующий цикл Запроса1 (гр2) - начисления сотрудника по ПД - присоединяем секции. Не выходя из цикла по сотрудникам Запроса1 обрабатываем запрос2 - по объектам и ПД. А третья-то группировка там сотрудник. А за каким таким. Сделайте Вы ее первой группировкой и при цикле обработки первой группировки поставьте условие Если Запрос2.Сотрудник <>Запрос1.Сотрудник Тогда Продолжить, а Пока Запрос2.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Секция_3|Наименование"); Пока Запрос2.Группировка(2)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); КонецЦикла; КонецЦикла; исправьте на Пока Запрос2.Группировка(2)=1 Цикл Таб.ВывестиСекцию("Секция_3|Наименование"); Пока Запрос2.Группировка(3)=1 Цикл Таб.ПрисоединитьСекцию("Секция_3|Начислено"); КонецЦикла; КонецЦикла; Вот тогда у вас будет такая таблица какая Вам нужна - сотрудник по периодам с разбивкой по объектам. Если Вам надо принципиально другого (30), например, вообще без сотрудников, то читайте мой предыдущий пост. Успехов |
|||
35
Ната
11.10.04
✎
19:28
|
(Шапокляк) Спасибо огромное!
Единственное Продолжить не надо и Если Запрос2.Сотрудник =Запрос1.Сотрудник |
|||
36
Шапокляк
11.10.04
✎
19:36
|
Или так. Вопрос привычки.
Успехов, тезка! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |