Имя: Пароль:
1C
1С v8
Суммирование в запросе по различным строкам
, ,
0 Kaperang
 
27.08.12
11:56
Имеется результат запроса типа

Сотрудник  ПродолжительностьСмены
---------------------------------
Иванов      9
Петров      8
Сидоров     12

Мне нужно получить на выходе дерево значений, где в корневой ветке будет посчитано общее количество часов бригады, а в подчиненных строках - детализация.
В данном случае общее количество часов бригады рассчитать в запросе просто:
"ИТОГИ
Сумма(ПродолжительностьСмены)
ПО
Сотрудник"  
дает правильный результат -29

Далее, имеем результат запроса типа:

Сотрудник  Работа     Загрузка    ПродолжительностьСмены
---------------------------------------------------------
Иванов      Работа1       3                 9
Петров      Работа2       4                 8
Петров      Работа3       2                 8
Сидоров     Работа4       5                 12

Мне точно также необходимо получить дерево запросов с общим количеством часов бригады в корневой ветке.
Конструкция  
"ИТОГИ
Сумма(ПродолжительностьСмены)
ПО
Сотрудник" дает 37.
Правильное количество - 29
Чего то никак не соображу, как получить правильное количество часов :(
1 Kaperang
 
27.08.12
12:09
Вроде с виду задачка-то простенькая, а чего-то никак не вкурю, с какого края за нее взяться
2 Ненавижу 1С
 
гуру
27.08.12
12:11
37 вроде как, если сложить
3 Kaperang
 
27.08.12
12:15
Мне необходимо получить сумму часов по различным строкам. Т.е. чтобы часы по Петрову считались 1 раз, а не 2.
4 rutony
 
27.08.12
12:18
Ну так сделай выборку различных по сотруднику: ВЫБРАТЬ РАЗЛИЧНЫЕ, а потом левым соединением прицепи ПродолжительностьСмены и возьми итоги суммы по сотруднику
5 Zmich
 
27.08.12
12:20
А так не сработает?
ИТОГИ МИНИМУМ(ПродолжительностьСмены)
ПО Сотрудник
6 acsent
 
27.08.12
12:23
на скд можно сделать
7 Kaperang
 
27.08.12
12:23
(5) Да на уровне детализации по сотрудникам отработает. А вот общие итоги....

"ИТОГИ
МИНИМУМ(ПродолжительностьСмены)
ПО
Общие,
Сотрудник"

выдаст заведомо не тот результат.
8 Kaperang
 
27.08.12
12:24
(6) А поподробнее можно?
9 Kaperang
 
27.08.12
12:25
(6) Пробовал с исползованием СКД:

"ПродолжительностьСмены" добавлял в ресурсы. В результате - те же яйца, только сбоку
10 Kaperang
 
27.08.12
12:29
(6)

Вот тестовый запрос, выдающий наш пример:

"ВЫБРАТЬ
   "Иванов" КАК Сотрудник,
   "Работа1" КАК Работа,
   2 КАК Загрузка,
   9 КАК ПродолжительностьСмены

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Петров" КАК Сотрудник,
   "Работа2" КАК Работа,
   4 КАК Загрузка,
   8 КАК ПродолжительностьСмены

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Петров" КАК Сотрудник,
   "Работа3" КАК Работа,
   2 КАК Загрузка,
   8 КАК ПродолжительностьСмены

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Сидоров" КАК Сотрудник,
   "Работа3" КАК Работа,
   5 КАК Загрузка,
   12 КАК ПродолжительностьСмены"

Какие настройки мне выставить в СКД, чтобы получить в общем итоге правильную цифру?
11 Kaperang
 
27.08.12
12:37
(6) Итого, судя по всему, СКД здесь тоже бессилен (((
12 mistеr
 
27.08.12
12:38
(8) Строки размножаются после соединения с другой таблицей, верно? Если соединять не в запросе, а в СКД (связи наборов данных), каждая строка будет учтена в итогах один раз.
13 acsent
 
27.08.12
12:38
(7) нужно делать через объединение:
1 запрос детальные данные, 2 запрос - данные по сотруднику обобщенно
14 Kaperang
 
27.08.12
12:39
(12) Вот, вот примерно это мне и нужно. Буду пробовать
15 nicxxx
 
27.08.12
12:55
16 Kaperang
 
27.08.12
21:51
(15) Коллега, спасибо!

Оказывается, объединение наборов данных в СКД не такая сложная штука.
Очень похоже на объединение данных в запросе, в чем то даже проще.

На тестовом примере алгоритм отладил, счас буду делать реальный отчет.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший