Имя: Пароль:
1C
 
Условие к функции в запросе
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
Или так. Вопрос привычки.
Успехов, тезка!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан