Имя: Пароль:
1C
1С v8
Группировки в СКД
0 Rom_Kat
 
20.08.18
15:15
Требуется вывести значение группировку так, чтобы итоги по верхней группировке считались только в разрезе верхней группировки.
Как можно построить так? Если просто выводить группировку, то итоги в верхней группировке умножаются на количество значений в нижней группировке.
Нужно и вывести значения группировки и итоги в верхней вывести корректно.
1 Rom_Kat
 
20.08.18
15:25
Если Вариант использования группировки Дополнительная информация то Нужное поле не может быть использовано в группировке.
2 kittystark
 
20.08.18
15:27
раза 3 перечитал, не понятно что ты хочешь
скрин с примером в студию
3 Rom_Kat
 
20.08.18
15:32
4 Rom_Kat
 
20.08.18
15:33
так с группировкой Поставщик
5 Rom_Kat
 
20.08.18
15:35
https://yadi.sk/i/mavtNfk13aPgV6

а так без группировки Поставщик.
Надо чтобы цифры были такие как без группировки, но поставщики выводились.
6 Deon
 
20.08.18
15:39
(5) Тут надо запрос смотреть. Ибо тут явно поставщик каким левым соединением присоединяется и ресурс задваивается.
А Цыбукова - молодец, хорошие обороты делает
7 Rom_Kat
 
20.08.18
15:45
(6)с услугами это всегда так. Профит то копеечный.

запрос норм.

ВЫБРАТЬ
    ДоходыПоНаправлениямДеятельностиОбороты.КоммерческаяОперация КАК ПаспортНаПеревозку,
    ДоходыПоНаправлениямДеятельностиОбороты.СчетНаОплату КАК СчетНаОплату,
    ДоходыПоНаправлениямДеятельностиОбороты.Контрагент КАК Клиент,
    ДоходыПоНаправлениямДеятельностиОбороты.СчетНаОплату.Ответственный КАК Менеджер,
    ДоходыПоНаправлениямДеятельностиОбороты.СуммаОборот КАК СуммаДоход,
    РасходыПоНаправлениямДеятельностиОбороты.СуммаОборот КАК СуммаРасход,
    ДоходыПоНаправлениямДеятельностиОбороты.СуммаОборот - РасходыПоНаправлениямДеятельностиОбороты.СуммаОборот КАК СуммаМД
ПОМЕСТИТЬ ДоходыРасходы
ИЗ
    РегистрНакопления.ДоходыПоНаправлениямДеятельности.Обороты(&НачалоПериода, &КонецПериода, Период, ) КАК ДоходыПоНаправлениямДеятельностиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасходыПоНаправлениямДеятельности.Обороты(, , Период, ) КАК РасходыПоНаправлениямДеятельностиОбороты
        ПО ДоходыПоНаправлениямДеятельностиОбороты.СчетНаОплату = РасходыПоНаправлениямДеятельностиОбороты.СчетНаОплату
ГДЕ
    ДоходыПоНаправлениямДеятельностиОбороты.Подразделение = &Подразделение
    И РасходыПоНаправлениямДеятельностиОбороты.Подразделение = &Подразделение
{ГДЕ
    ДоходыПоНаправлениямДеятельностиОбороты.Контрагент.* КАК Клиент}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РасходыПоНаправлениямДеятельности.СчетНаОплату КАК СчетНаОплату,
    РасходыПоНаправлениямДеятельности.Контрагент КАК Поставщик
ПОМЕСТИТЬ Подразделения
ИЗ
    РегистрНакопления.РасходыПоНаправлениямДеятельности КАК РасходыПоНаправлениямДеятельности
ГДЕ
    РасходыПоНаправлениямДеятельности.Подразделение = &Подразделение
{ГДЕ
    РасходыПоНаправлениямДеятельности.Контрагент.* КАК Клиент}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДоходыРасходы.ПаспортНаПеревозку КАК ПаспортНаПеревозку,
    ДоходыРасходы.СчетНаОплату КАК СчетНаОплату,
    ДоходыРасходы.Клиент КАК Клиент,
    ДоходыРасходы.Менеджер КАК Менеджер,
    ДоходыРасходы.СуммаДоход КАК СуммаДоход,
    ДоходыРасходы.СуммаРасход КАК СуммаРасход,
    ДоходыРасходы.СуммаМД КАК СуммаМД,
    Подразделения.Поставщик КАК Поставщик
{ВЫБРАТЬ
    ПаспортНаПеревозку.*,
    СчетНаОплату.*,
    Клиент.*,
    Менеджер.*,
    СуммаДоход,
    СуммаРасход,
    СуммаМД,
    Поставщик.*}
ИЗ
    ДоходыРасходы КАК ДоходыРасходы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения КАК Подразделения
        ПО ДоходыРасходы.СчетНаОплату = Подразделения.СчетНаОплату
8 Rom_Kat
 
20.08.18
15:46
Сделаю только ЛЕВОЕ
9 kittystark
 
20.08.18
15:46
в ресурсах что прописано?
просто Сумма() или ВычислитьВыражениеСГруппировкойМассив() ?

я бы пошел по второму пути

и почему на группировке Поставщик первого скрина ячейки пустые? скорее всего над числовыми полями естьNULL надо применить
10 Rom_Kat
 
20.08.18
15:47
(9)точно. Ща ресурсы попробую
11 Rom_Kat
 
20.08.18
15:50
(9)в выбранных полях по этой группировке только поставщик. Так и надо.
12 Rom_Kat
 
20.08.18
16:16
(9) для ресурсов ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаРасход)", "Поставщик")[0]  по группировке счет. Но выводятся все элементы массива.

https://yadi.sk/i/VXdK1N4_3aPma6

https://yadi.sk/i/HhUc3E3Q3aPmhe

Как вывести первый элемент массива.
13 azernot
 
20.08.18
16:17
Явно же задваиваютс суммы по счёту.

Вот есть счёт на 1000 руб
Вот есть две записи в регистре РасходыПоНаправлениямДеятельности по этому счёту, с разными поставщиками.

Что же будет в таблице после соединения? Правильно две записи, обе на 1000 руб. Естественно 2000 руб. Что и видим в результате.

Так что хочет автор? Он хочет в итогах видеть 1000 руб, но при этом присоединить кучу поставщиков? Очевидно, что нужно добиться, чтобы в запросе сумма фигурировала только один раз (например, только в первой строке).

А лучше всё же подумать, понять задачу, что и для чего делается. Возможно есть более красивое решение.
14 Rom_Kat
 
20.08.18
16:20
(13)задача как по мне типичная. Простым формированием таблица это конечно же делается тупо и просто. Что вот в этом случае делать с СКД?
15 kittystark
 
20.08.18
16:20
по мне так от второго и третьего запроса вообще можно избавиться и дернуть данные тупо добавив нужные поля в первый запрос
16 azernot
 
20.08.18
16:22
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Подразделения.СчетНаОплату КАК СчетНаОплату,
    Максимум(Подразделения.Контрагент) КАК Поставщик
ПОМЕСТИТЬ МаксимальныеПоставщикиСчетов
ИЗ
    Подразделения
;

....
Выбор когда Подразделения.Поставщик = МаксимальныеПоставщикиСчетов.Поставщик ТОгда
ДоходыРасходы.СуммаДоход
Иначе
0 Конец КАК СуммаДоход,
...

ДоходыРасходы КАК ДоходыРасходы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения КАК Подразделения
        ПО ДоходыРасходы.СчетНаОплату = Подразделения.СчетНаОплату
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксимальныеПоставщикиСчетов КАК МаксимальныеПоставщикиСчетов
        ПО ДоходыРасходы.СчетНаОплату = МаксимальныеПоставщикиСчетов.СчетНаОплату
17 azernot
 
20.08.18
16:23
(14) Ещё раз призываю сформулировать изначальную задачу, в бизнес-терминах. Возможно, есть более красивое решение.
18 Rom_Kat
 
20.08.18
16:28
(17)не думаю, что вы хотите увидеть бизнес требования )))
в (13) вы всё верно сформулировали. Нужно получить ресурсы по счёту и к счету вывести поставщиков.
19 azernot
 
20.08.18
16:33
(18) Чтобы получить гарантированно правильную работу СКД, без извращений, нужно дать ей правильный запрос, с правильным результатом. Как пример в (16).

Но, это дурацкое решение задачи сформулированной вами в технических терминах. Возможно, ваш выбор технического решения бизнес-задачи не оптимален. Поэтому и рекомендую сформулировать бизнес требования. Что это за отчёт? Какую информауию он должен дать? Какие решения будут приниматься на основе этого отчёта? А если поставщиков сделать ресурсом, просто перечислить в отдельном поле через запятую, а не делать измерением, раз уж ресурсы в разрезе поставщиков не агрегируются?
20 Rom_Kat
 
20.08.18
16:51
(19) по варианту (16) получается то что нужно. Спасибо.
Что касается бизнес требований, то в моём случае это большая роскошь. Они примерно выглядят вот так:

https://yadi.sk/i/m1LWN_p73aPreJ

В общем где-то примерно может это всё звучать как: Вывести по счету маржинальную прибыть. При этом нужно видеть какие клиенты и поставщики эту прибыль сформировали.
21 azernot
 
20.08.18
17:00
(20) Хм.. почему бы просто не объединить данные регистров ДоходыПоНаправлениямДеятельности и РасходыПоНаправлениямДеятельности?

Из первого взять клиентов, из второго поставщиков? Тогда сумма расходов расписывалась бы по поставщикам, сумма доходов по клиентам...


Ну т.е., к примеру,  банально в первом же запросе вывести поле
РасходыПоНаправлениямДеятельности.Контрагент КАК Поставщик
и переписать получение сумм?

Всё равно же там левое соединение является по сути внутренним из-за условия.
22 kittystark
 
20.08.18
17:07
я в (15) тоже самое говорил
23 Rom_Kat
 
20.08.18
17:08
(21)пока так будет. Надо дальше идти.