Имя: Пароль:
1C
 
Как вывести итоги не по всем группировкам?
0 serg161
 
24.04.08
16:40
В запросе есть группировки, например: Организация, Подразделение, Заказ, Номенклатура и суммируемые ресурсы, например: Количество, Стоимость, СуммаОплаты. В итогах по Количеству и Стоимости нужны результаты по всем группировкам, а вот по СуммеОплаты только по Заказу и Выше. Можно ли как то обойти вывод итогов СуммыОплаты по Номенклатуре?
1 Valiko77
 
24.04.08
16:44
да, если делаешь в консоли отчетов, просто очисти эти поля в фиксированном макете
2 serg161
 
24.04.08
16:54
Это уже только при выводе, не подходит.
Условно Ситуация такая:
Есть Заказ, по нему реализовано 2 Номенклатуры по 10 руб. По Заказу есть поступление Денежных средств - 20 руб. В запросе объединяю 2 регистра(Продажи и ДДС) по Заказу, в итогах отчета получается на каждую номенклатуру оплата по 20 руб., а на уровне Заказа уже 40. Т.е просто тупо суммируется. Можно как то прописать в запросе, что итоги нужно суммировать начинаю с уровня группировки Заказ?
3 Immortal
 
24.04.08
19:38
(2)1. объединением запросов с группировками по тем измерениям. по которым надо получить итоги
2. ручной расчёт итогов припомощиконструкции вида ВЫБОР КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИмяГруппировкиНестандартныхИтогов)
смотри в КЗ статью Расчет нестандартных итогов  в запросе
4 serg161
 
25.04.08
11:10
Чего-то не получается. Прописываю в итогах ВЫБОР КОГДА ...
Выводить итоги начиная с Заказа получилось, но он все равно суммирует с самого низа.Т.е.:

         Изначально     Получилось                Надо              
                                          либо            либо
Контрагент   - 40          - 40            - 20            - 20    
Заказ        - 40          - 40            - 20            - 20
Док. продажи - 40          -               - 20            -
Номенкл.     - 20          -               - 20            -
Номенкл.     - 20          -               - 20            -

Ключевая проблема в том, что Сумма оплаты = 20 в регистре без разбивки на номенклатуру. Пробовал и объединять по разному - все равно в Итогах выводит, начиная с Номенклатуры (искусственно присваивая каждой ном. оплату = 20 и потом все это суммирует).
5 Immortal
 
25.04.08
17:56
(4)
ВЫБРАТЬ * ИЗ (
ВЫБРАТЬ
ЗапросСОднимиГруппировками
СГРУППИРОВАТЬ ПО
Нужные
Объединить
ВЫБРАТЬ
ЗАпросСДругимиГруппировками
СГРУППИРОВАТЬ ПО
Нужные)
6 serg161
 
28.04.08
15:23
Чего то совсем никак, в конец запутался. Пишу (примерно):

ВЫБРАТЬ * ИЗ (
ВЫБРАТЬ
Подразделение,
Заказ,
ДокПродажи,
Номенклатура,
КолВо,
СуммаПродаж
СГРУППИРОВАТЬ ПО
Подразделение
Заказ
ДокПродажи
Номенклатура

Объединить

ВЫБРАТЬ
0,
Сделка,
0,
0,
0,
0,
СуммаОплаты

СГРУППИРОВАТЬ ПО
Сделка)

Выводит сначала Сделки с СуммамиОплат, потом Заказы со своими показателями. Заказ со Сделкой в одну строку не объединяет.
7 Immortal
 
28.04.08
15:37
если заказ и сделка - разные по типу поля то объединения не произойдёт.
8 Immortal
 
28.04.08
15:37
вернее произойдёт п оследующей схеме : NUll Заказ
                                      Сделка NULL
9 serg161
 
28.04.08
15:53
Заказ - это ЗаказПокупателя, а Сделка имеет составной тип, в т.ч. и ЗаказПокупателя (это ведь не считается как разные типы)?
10 serg161
 
28.04.08
15:59
В данном случае совпадение Заказа и Сделки в обоих запросах - достаточно ведь для объединения в одну строку?
11 Immortal
 
28.04.08
17:48
(9) условие во втором Запросе попробуй ГДЕ Сделка ССЫЛКА Документ.ЗаказПокупателя
12 serg161
 
29.04.08
09:23
Неа, не помогло, только думать дольше стал. Максимум результата пока - итоги по Подразделению (по первой группировке).
13 butterbean
 
29.04.08
09:35
(0) в итогах можно написать
ВЫБОР КОГДА Номенклатура ЕСТЬ NULL ТОГДА
Сумма(СуммаОплаты)/Количство(СуммаОплаты)
ИНАЧЕ 0
КОНЕЦ КАК СуммаОплаты
14 serg161
 
29.04.08
09:59
Это больше похоже на правду, только не совсем корректно суммирует в группировках выше подразделения, например:

В Подр_1 10 шт. с итогом 100 р., в Подр_2 5 шт. с итогом 50 р., получается не 100/10 + 50/5 = 20, а (100+50)/15 = 10.

Но все равно спасибо, буду дальше пробовать.
15 Фауст
 
29.04.08
10:15
Для суммы оплаты используй агрегатную функцию МАКСИМУМ или МИНИМУМ вместо СУММА, не будет суммироваться.
16 butterbean
 
29.04.08
10:19
(15) автору надо чтобы суммировалось, но выше опредленного уровня группировок
17 serg161
 
29.04.08
10:29
Именно! Группировки: Организация,Подразделение, Менеджер, Контрагент, Заказ, ДокументПродажи, Номенклатура. Оплату я могу получить только целиком для Заказа. А данные по продажам нужно выводить с детализацией до Номенклатуры. Поэтому нужно чтобы до Заказа (Номенкл., ДокПродажи, Заказ) выводился МАКСИМУМ а дальше, от Заказа этот МАКСИМУМ начал бы суммироваться, причем не по количеству Номенклатуры, а по количеству элементов на каждом уровне итогов.
18 butterbean
 
29.04.08
10:39
а (13) точно не подходит, у меня работает подобная схема нормально на 5 уровнях
19 butterbean
 
29.04.08
10:39
(18) + это вопрос :-)
20 serg161
 
29.04.08
11:10
К сожалению.
Итоги Номенклатуры как и надо пропускает.
А по след итогам на всех уровнях просто все суммирует и делит на общее количество. Не позаказно, как надо (14).
21 butterbean
 
29.04.08
11:38
(20) на общее количество ЧЕГО?
22 serg161
 
29.04.08
11:49
Количество итоговых записей первого после номенклатуры уровня.
23 Immortal
 
29.04.08
12:00
(21) ты в (13) правильных общих итогов не получишь
24 Dionisious
 
29.04.08
12:02
Через СКД надо. Или через ОБЪЕДЕНИТЬ.
25 serg161
 
29.04.08
12:08
СКД - это как?
26 Dionisious
 
29.04.08
12:11
Система компоновки данных.
27 Dionisious
 
29.04.08
12:13
28 serg161
 
29.04.08
12:16
Объединять пробовал, не объединяет, выводит итоги отдельно от разворота по номенклатуре(с пустым подразделением):
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ЗапросОбщий.ЗаказПокупателя.Организация КАК Организация,
   ЗапросОбщий.Подразделение КАК Подразделение,
   ЗапросОбщий.ЗаказПокупателя.Ответственный КАК Ответственный,
   ЗапросОбщий.ЗаказПокупателя.Контрагент КАК Контрагент,
   ЗапросОбщий.ЗаказПокупателя КАК ЗаказПокупателя,
   ВЫБОР
       КОГДА ЗапросОбщий.ДокументПродажи = &ПустойДокумент
           ТОГДА "Дополнительные материалы"
       ИНАЧЕ ЗапросОбщий.ДокументПродажи
   КОНЕЦ КАК ДокументПродажи,
   ЗапросОбщий.Номенклатура КАК Номенклатура,
   ЗапросОбщий.СуммаПродаж КАК СуммаПродаж,
   ЗапросОбщий.СуммаСебестоимости КАК СуммаСебестоимости,
   ЗапросОбщий.СуммаПродаж - ЗапросОбщий.СуммаСебестоимости КАК ВаловаяПрибыль,
   ВЫБОР
       КОГДА ЗапросОбщий.СуммаПродаж <> 0
           ТОГДА (ЗапросОбщий.СуммаПродаж - ЗапросОбщий.СуммаСебестоимости) / ЗапросОбщий.СуммаПродаж * 100
       ИНАЧЕ 0
   КОНЕЦ КАК Рентабельность,
   ЗапросОбщий.Количество КАК Количество,
   ЗапросОбщий.СуммаОплаты КАК СуммаОплаты
ИЗ
   (ВЫБРАТЬ
       ЗапросДоп.Подразделение КАК Подразделение,
       ЗапросДоп.ЗаказПокупателя КАК ЗаказПокупателя,
       ЗапросДоп.ДокументПродажи КАК ДокументПродажи,
       ЗапросДоп.Номенклатура КАК Номенклатура,
       ЗапросДоп.СуммаПродаж КАК СуммаПродаж,
       ЗапросДоп.СуммаСебестоимости КАК СуммаСебестоимости,
       ЗапросДоп.Количество КАК Количество,
       МАКСИМУМ(ЗапросДоп.СуммаОплаты) КАК СуммаОплаты
   ИЗ
       (ВЫБРАТЬ
           ЗапросЛинейный.Подразделение КАК Подразделение,
           ЗапросЛинейный.ЗаказПокупателя КАК ЗаказПокупателя,
           ЗапросЛинейный.ДокументПродажи КАК ДокументПродажи,
           ЗапросЛинейный.Номенклатура КАК Номенклатура,
           СУММА(ЗапросЛинейный.СуммаПродаж) КАК СуммаПродаж,
           СУММА(ЗапросЛинейный.СуммаСебестоимости) КАК СуммаСебестоимости,
           СУММА(ЗапросЛинейный.Количество) КАК Количество,
           0 КАК СуммаОплаты
       ИЗ
           (ВЫБРАТЬ
               ПродажиСлужебный.Подразделение КАК Подразделение,
               ПродажиСлужебный.ЗаказПокупателя КАК ЗаказПокупателя,
               ПродажиСлужебный.ДокументПродажи КАК ДокументПродажи,
               ПродажиСлужебный.Номенклатура КАК Номенклатура,
               ПродажиСлужебный.СуммаПродаж КАК СуммаПродаж,
               ПродажиСлужебный.СуммаСебестоимости КАК СуммаСебестоимости,
               ПродажиСлужебный.Количество КАК Количество
           ИЗ
               РегистрСведений.ПродажиСлужебный КАК ПродажиСлужебный
           ГДЕ
               ПродажиСлужебный.Пользователь = &ВыбПользователь) КАК ЗапросЛинейный
       ГДЕ
           (ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
                   ИЛИ ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслугСО
                   ИЛИ ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.ВозвратТоваровОтПокупателя)
       
       СГРУППИРОВАТЬ ПО
           ЗапросЛинейный.Подразделение,
           ЗапросЛинейный.ЗаказПокупателя,
           ЗапросЛинейный.ДокументПродажи,
           ЗапросЛинейный.Номенклатура
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           0,
           ДДС.Сделка,
           0,
           0,
           0,
           0,
           0,
           МАКСИМУМ(ДДС.СуммаОплаты)
       ИЗ
           РегистрСведений.ПродажиСлужебный КАК ПродажиСлужебный
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ДвиженияДенежныхСредствОбороты.Сделка КАК Сделка,
                   СУММА(ДвиженияДенежныхСредствОбороты.СуммаУпрОборот) КАК СуммаОплаты
               ИЗ
                   РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДвиженияДенежныхСредствОбороты
               
               СГРУППИРОВАТЬ ПО
                   ДвиженияДенежныхСредствОбороты.Сделка) КАК ДДС
               ПО ПродажиСлужебный.ЗаказПокупателя = ДДС.Сделка
       ГДЕ
           ПродажиСлужебный.Пользователь = &ВыбПользователь
       
       СГРУППИРОВАТЬ ПО
           ДДС.Сделка) КАК ЗапросДоп
   
   СГРУППИРОВАТЬ ПО
       ЗапросДоп.ЗаказПокупателя,
       ЗапросДоп.Подразделение,
       ЗапросДоп.ДокументПродажи,
       ЗапросДоп.Номенклатура,
       ЗапросДоп.СуммаПродаж,
       ЗапросДоп.СуммаСебестоимости,
       ЗапросДоп.Количество) КАК ЗапросОбщий
ИТОГИ
   СУММА(СуммаПродаж),
   СУММА(СуммаСебестоимости),
   СУММА(СуммаПродаж) - СУММА(СуммаСебестоимости) КАК ВаловаяПрибыль,
   ВЫБОР
       КОГДА СУММА(СуммаПродаж) <> 0
           ТОГДА (СУММА(СуммаПродаж) - СУММА(СуммаСебестоимости)) / СУММА(СуммаПродаж) * 100
       ИНАЧЕ 0
   КОНЕЦ КАК Рентабельность,
   СУММА(Количество),
   СУММА(СуммаОплаты)
ПО
   ОБЩИЕ,
   Организация,
   Подразделение,
   Ответственный,
   Контрагент,
   ЗаказПокупателя,
   ДокументПродажи,
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
29 serg161
 
29.04.08
13:48
А все таки без СКД как то можно? Есть готовый отчет, формируемый построиетелем, надо то всего лишь на определенном уровне добавить один показатель и вывести по нему итоги, переписывать весь отчет очень не хочется.
30 serg161
 
29.04.08
14:38
А если Объединять, то как? Уже все варианты перепробовал.
31 serg161
 
29.04.08
14:44
И потом в запросе потом опять будет стоять СуммаОплаты в каждой номенклатурной записи и при подсчете итогово опять криво проссумируется.
32 serg161
 
30.04.08
10:18
Я так понимаю никто так и не решил данную проблему?
33 Immortal
 
30.04.08
10:19
гм..неправильно понимаешь.
34 Immortal
 
30.04.08
10:21
ВЫБРАТЬ
               ПродажиСлужебный.Подразделение КАК Подразделение,
               ПродажиСлужебный.ЗаказПокупателя КАК ЗаказПокупателя,

              ПродажиСлужебный.ДокументПродажи КАК ДокументПродажи,
              ПродажиСлужебный.Номенклатура КАК Номенклатура,
              ПродажиСлужебный.СуммаПродаж КАК СуммаПродаж,
              ПродажиСлужебный.СуммаСебестоимости КАК СуммаСебестоимости,

               ПродажиСлужебный.Количество КАК Количество
           ИЗ
               РегистрСведений.ПродажиСлужебный КАК ПродажиСлужебный
           ГДЕ
               ПродажиСлужебный.Пользователь = &ВыбПользователь) КАК ЗапросЛинейный
       ГДЕ
           (ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг

                  ИЛИ ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслугСО
                  ИЛИ ЗапросЛинейный.ДокументПродажи ССЫЛКА Документ.ВозвратТоваровОтПокупателя)

       
       СГРУППИРОВАТЬ ПО
           ЗапросЛинейный.Подразделение,
           ЗапросЛинейный.ЗаказПокупателя,
           ЗапросЛинейный.ДокументПродажи,
           ЗапросЛинейный.Номенклатура
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           0,
           ДДС.Сделка,
           0,
           0,
           0,
           0,
           0,
           МАКСИМУМ(ДДС.СуммаОплаты)
       ИЗ
           РегистрСведений.ПродажиСлужебный КАК ПродажиСлужебный

вот например здесь у тебя ошибка : ты во втором запросе пытаешься соединить записи второго запроса с 0 с записями NULL первого запроса..результат объединения конечно не будет работать так как ты хочешь
35 serg161
 
30.04.08
10:23
Ну так как же быть? Как проссуммировать итоги от итогов по 3-й группировке?
36 serg161
 
30.04.08
10:27
Не совсем понял, почему с NULL?
37 serg161
 
30.04.08
10:31
Откуда NULL в первом запросе?
38 Immortal
 
30.04.08
10:33
(37) вернее так : потому что пустое значение ссылки(или поля ссылочного типа) в таблице NULL а не 0
39 serg161
 
30.04.08
10:35
Все равно не понятно, как надо то, например?
40 Immortal
 
30.04.08
10:45
ВЫБРАТЬ
Заказ КАК Заказ //поле ссылочного типа
ИЗ бла
ОБЪЕДИНИТЬ
ВЫБРАТЬ //а здесь у нас нет этого поля
NULL
ИЗ бла1
41 serg161
 
30.04.08
10:57
Так ведь и так пробовал результат тот же, при объединении выводит отдельно оплаты по заказу с нулевым подразделением, и отдельно суммы по тому же заказу, но с подразделением первого запроса:

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

СГРУППИРОВАТЬ ПО
   ЗапросДоп.ЗаказПокупателя,
   ЗапросДоп.Подразделение,
   ЗапросДоп.ДокументПродажи,
   ЗапросДоп.Номенклатура
42 serg161
 
30.04.08
11:05
Может где то в другом ошибка?
А потом даже если запросы и объединятся как хотелось не получится ли опять тупое суммирование всех детальных записей в итогах?
43 Immortal
 
30.04.08
11:18
СГРУППИРОВАТЬ ПО
   ЗапросДоп.ЗаказПокупателя,
   ЗапросДоп.Подразделение,
   ЗапросДоп.ДокументПродажи,
   ЗапросДоп.Номенклатура опять ошибка - верхней в таком случае должна юыть группировка по подразделению..
44 Immortal
 
30.04.08
11:20
впрочем сути дела это не меняет
45 Immortal
 
30.04.08
11:22
так если у тебя подразделение NULL во втором запросе, нахрен по нему объединять?
46 serg161
 
30.04.08
11:46
Почтииии.

Только теперь такая проблемка. При группировке по Заказу я должен для остальных измерений проставить МАКСИМУМ. Так? Но тогда теряется вся детализация по ДокументуПродажи и Номенклатуре(выводится ведь только Максимум)?
47 serg161
 
30.04.08
14:40
То есть опять тот же тупик - либо правильные итоги, либо детализация по номенклатуре.Все опять сводится к проблеме подсчета итогов по определенным уровням группировки.
48 serg161
 
05.05.08
10:04
Вновь поднимаю данный вопрос, т.к. решение так и не найдено. Огромная просьба, если кто знает КАК подскажите.
49 Freddy
 
05.05.08
10:13
Каждый уровень в итогах тупо использует детальные записи, а не результаты предыдущего... Так уж устроено...
50 serg161
 
05.05.08
10:18
А обойти это совсем никак? Должно же что то быть.
51 Freddy
 
05.05.08
10:42
что по номенклатуре должно выводиться? только количество?
52 serg161
 
05.05.08
10:48
По номенклатуре должно выводиться все что касается Продаж (Количество, СуммаПродаж, Рентабельность и т.д.) с итогами по всем уровням соотв., СуммаОплат в итогах должна выводится только с группировки Заказа(см. выше).
53 Freddy
 
05.05.08
10:53
Как я понимаю первый запрос в объединении это и есть данные по номенклатуре, а второй это оплата по заказам?
54 serg161
 
05.05.08
10:54
именно
55 Freddy
 
05.05.08
11:01
группировки колонки используются?
56 serg161
 
05.05.08
11:05
Нет
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан