Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Группировки в СКД

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

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

запрос норм.

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

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

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

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

https://yadi.sk/i/VXdK1N4_3aPma6

https://yadi.sk/i/HhUc3E3Q3aPmhe

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

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

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

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

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

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

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

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

https://yadi.sk/i/m1LWN_p73aPreJ

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

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


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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует