Имя: Пароль:
1C
1С v8
V8: Помогите разобраться с объединением в запросе
0 Sasha_1CK
 
28.04.14
07:08
Че то ни как не могу сообразить как сделать запрос
Есть 2 РН - заявки и продажи с одинаковым комплектом измерений.
Нужно объединить данные из обоих регистров по измерениеям и затем вывести вес заявки, вес продажи и отклонение.

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

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Заказ,
    ВложенныйЗапрос.Продажа

Вот примерно как то так.

И все бы ничего - но результат объединения регистров не сворачивается по измерениям при объединении - в итоге получается, что заказ идет первой строчкой, а продажа идет 2-й строчкой.

Чето я где то забыл сделать - но туплю  что
1 Wobland
 
28.04.14
07:09
используй силу соединения, Люк
2 AlexTim03
 
28.04.14
07:12
Вот это неверно:
СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Заказ,
    ВложенныйЗапрос.Продажа

ТОлько по ноненклатуре
3 Sasha_1CK
 
28.04.14
07:14
(2)
Это я уже увидел
Работает
4 Sasha_1CK
 
28.04.14
07:16
(2)
А вот когда пытаюсь отдельно рассчитать перегруз и недогруз

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

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура

Получается одновременно и перегруз и недогруз в одной строке
5 Wobland
 
28.04.14
07:21
считай разницу одним полем
6 Sasha_1CK
 
28.04.14
07:30
(5)   а потом?
Надо то именно разделить перегруз\недогруз
7 Sasha_1CK
 
28.04.14
07:32
(5)
Я вот думаю если результат вложенного запроса поместить в ВТ - ее можно как то свернуть по измерениям - что бы потом к ней сделать запрос?
8 Cube
 
28.04.14
07:33
(7) Думаю, нужно начать с (1)...
9 Defender aka LINN
 
28.04.14
07:37
(7) Можно и без ВТ - вложенным запросом
10 Мимохожий Однако
 
28.04.14
07:43
ОФФ: Внятное описание результирующей таблицы на отдельном листочке перед созданием текста запроса позволяет избежать подобных веток
11 Sasha_1CK
 
28.04.14
09:21
(9)  Наверное можно - но почему то не доходит

(10)  Вот описание результирующей таблицы:
                          Заказ | Продажа | Недогруз | Перегруз
Измерение 1
Измерение 2
...
Измерение N

Недогруз = Заказ - продажа когда Заказ > продажа
Перегруз  = Продажа - Заказ когда Продажа > Заказ

Если выгрузить результат запроса с объединением
в Тз и тупо ее свернуть по измерением, а потом посчитать недогруз и перегруз - то желаемый результат достижим.

Но это как то не кошерно - поэтому хочется получиться сразу нужный результат запроса - но тут где то собака порылась - а где не пойму.