Имя: Пароль:
1C
1С v8
Запрос ПЕРИОДАМИ с группировкой по измерению
0 slafor
 
02.08.23
13:35
Подскажите, плиз. Вроде бы вопрос простой, но что-то никак не соображу.

Есть запрос по оборотному регистру накоплений. В качестве измерения в регистре есть поле Сотрудник. Я получаю по нему итоги ПЕРИОДАМИ месяц, в итоге получаю такую таблицу:

Месяц1
  Сотрудник1
  Сотрудник2
  Сотрудник3
Месяц2
  Сотрудник1
  Сотрудник2
  Сотрудник3

А хотелось бы наоборот, чтобы сначала были группировки по сотрудниками, а уже потом - по месяцам:

Сотрудник1
  Месяц1
  Месяц2
Сотрудник2
  Месяц1
  Месяц2
Сотрудник3
  Месяц1
  Месяц2.

Ну и так далее.

Очень не хочется использовать запрос в цикле, уверен, что можно решить одним запросом. Не подскажете, как?

Регистр имеет измерение Сотрудник и числовые ресурсы.
1 asady
 
02.08.23
13:40
(0) поменяй местами группировки в настройках структуры отчета
2 slafor
 
02.08.23
13:52
(1) Но там вообще нет группировок, к тому же предложение ПЕРИОДАМИ у меня в ИТОГАХ:

ВЫБРАТЬ
ОбщиеОценкиСотрудниковОбороты.Период КАК Период,
ОбщиеОценкиСотрудниковОбороты.Сотрудник КАК Сотрудник,
ОбщиеОценкиСотрудниковОбороты.ОценкаОборот КАК ОценкаОборот
ИЗ
РегистрНакопления.ОбщиеОценкиСотрудников.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ОбщиеОценкиСотрудниковОбороты
УПОРЯДОЧИТЬ ПО
ОбщиеОценкиСотрудниковОбороты.Сотрудник.Наименование,
Период
ИТОГИ
СРЕДНЕЕ(ОценкаОборот)
ПО
Период ПЕРИОДАМИ(МЕСЯЦ, , )
3 RomanYS
 
02.08.23
13:58
ИТОГИ
СРЕДНЕЕ(ОценкаОборот)
ПО
Сотрудник,
Период ПЕРИОДАМИ(МЕСЯЦ, , )
4 1CBaseV8
 
02.08.23
14:03
ВЫБРАТЬ
    ВзаиморасчетыССотрудникамиОстатки.ФизическоеЛицо КАК ФизическоеЛицо,
    СУММА(ВзаиморасчетыССотрудникамиОстатки.СуммаВзаиморасчетовОстаток) КАК НачОст
ПОМЕСТИТЬ втНачОст
ИЗ
    РегистрНакопления.ВзаиморасчетыССотрудниками.Остатки(&грнПредНачПериода, ) КАК ВзаиморасчетыССотрудникамиОстатки

СГРУППИРОВАТЬ ПО
    ВзаиморасчетыССотрудникамиОстатки.ФизическоеЛицо

ИНДЕКСИРОВАТЬ ПО
    ФизическоеЛицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВзаиморасчетыССотрудникамиОбороты.ФизическоеЛицо КАК ФизическоеЛицо,
    КОНЕЦПЕРИОДА(ВзаиморасчетыССотрудникамиОбороты.Период, МЕСЯЦ) КАК ПериодМесяц,
    СУММА(ВзаиморасчетыССотрудникамиОбороты.СуммаВзаиморасчетовПриход) КАК СуммаВзаиморасчетовПриход,
    СУММА(ВзаиморасчетыССотрудникамиОбороты.СуммаВзаиморасчетовРасход) КАК СуммаВзаиморасчетовРасход
ПОМЕСТИТЬ втОбороты
ИЗ
    РегистрНакопления.ВзаиморасчетыССотрудниками.Обороты(&грнНачПериода, &грнКонПериода, Месяц, ) КАК ВзаиморасчетыССотрудникамиОбороты

СГРУППИРОВАТЬ ПО
    ВзаиморасчетыССотрудникамиОбороты.ФизическоеЛицо,
    КОНЕЦПЕРИОДА(ВзаиморасчетыССотрудникамиОбороты.Период, МЕСЯЦ)

ИНДЕКСИРОВАТЬ ПО
    ФизическоеЛицо,
    ПериодМесяц
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.ФизическоеЛицо КАК ФизическоеЛицо,
    ВложенныйЗапрос.ПериодМесяц КАК ПериодМесяц,
    ЕСТЬNULL(втНачОст.НачОст, 0) + ВложенныйЗапрос.ПредОборот КАК НачОст,
    ВложенныйЗапрос.Приход КАК Приход,
    ВложенныйЗапрос.Расход КАК Расход,
    ЕСТЬNULL(втНачОст.НачОст, 0) + ВложенныйЗапрос.ПредОборот + ВложенныйЗапрос.Приход - ВложенныйЗапрос.Расход КАК КонОст
ИЗ
    (ВЫБРАТЬ
        втОбороты.ФизическоеЛицо КАК ФизическоеЛицо,
        втОбороты.ПериодМесяц КАК ПериодМесяц,
        МАКСИМУМ(втОбороты.СуммаВзаиморасчетовПриход) КАК Приход,
        МАКСИМУМ(втОбороты.СуммаВзаиморасчетовРасход) КАК Расход,
        СУММА(ЕСТЬNULL(втОбороты1.СуммаВзаиморасчетовПриход, 0) - ЕСТЬNULL(втОбороты1.СуммаВзаиморасчетовРасход, 0)) КАК ПредОборот
    ИЗ
        втОбороты КАК втОбороты
            ЛЕВОЕ СОЕДИНЕНИЕ втОбороты КАК втОбороты1
            ПО втОбороты.ФизическоеЛицо = втОбороты1.ФизическоеЛицо
                И втОбороты.ПериодМесяц > втОбороты1.ПериодМесяц
    
    СГРУППИРОВАТЬ ПО
        втОбороты.ФизическоеЛицо,
        втОбороты.ПериодМесяц) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ втНачОст КАК втНачОст
        ПО ВложенныйЗапрос.ФизическоеЛицо = втНачОст.ФизическоеЛицо
5 slafor
 
02.08.23
14:07
(3) Спасибо, работает!
(4) Тоже, наверное, хорошо, но очень уж мудрено, мне для моей простой задачи это не потребуется :)