Имя: Пароль:
1C
 
Разгруппировать в запросе
, ,
0 shira84
 
17.05.19
10:33
В регистре Продажи есть запись:
Бананы 5 шт на сумму 50 руб.
Простой запрос
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.Сумма КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи
Как перестроить запрос, так чтобы на выходе получить пять строк, а не одну?
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
1 shira84
 
17.05.19
10:43
Надеюсь понятно написал, так чтобы было столько же строк сколько продано по количеству со средней ценой. Нужно для расчета з/п в УНФ (там только запросом), руководитель решил премировать сотрудников при превышении количественного плана продаж.
2 palsergeich
 
17.05.19
10:49
Тебе нужны не остатки, а обороты.
Ну сгруппировать приходы и расходы, я думаю сможешь
3 palsergeich
 
17.05.19
10:51
А все понял, у тебя физически одна строка
4 palsergeich
 
17.05.19
10:52
Ну, вопрос зачем? такие вещи делаются в постобработке обычно
5 los_hooliganos
 
17.05.19
10:54
Соедини строку с самой собой и подели на "Количество штук продано"
6 shira84
 
17.05.19
10:55
Постобработкой никак это в УНФ показатель расчета з/п, там только запрос
7 los_hooliganos
 
17.05.19
10:55
Чуть сложнее это сделать таблицу агрегированной. И в ней делать уже деление, соединяя саму с собой
8 shadow_sw
 
17.05.19
10:55
если нужно контролировать по продажам сотрудников, сделай вывод по регистратору, там будет понятно все
9 palsergeich
 
17.05.19
10:56
(7) Не надо студентам про такие вещи рассказывать.
10 shira84
 
17.05.19
10:56
(5) это как?
11 los_hooliganos
 
17.05.19
10:57
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество/Делитель.Количество КАК Количество,
    Продажи.Сумма/Делитель.Количество КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.Сумма КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи) КАК Делитель ПО Номенклатура = Номенклатура
12 los_hooliganos
 
17.05.19
10:58
(11) Да вот только строка будет 1 вместо 5 :)
13 palsergeich
 
17.05.19
10:58
(5) Но так не получишь 5 строк из одной.
(10) В запросе из строки можно получить среднее значение, то есть цена этой строки банана = 50/5 = среднее 10
И дальше использовать в алгоритмах
14 RomanYS
 
17.05.19
10:58
(11) Эээ... если была одна запись, то она и останется в результате
15 RomanYS
 
17.05.19
11:00
(0) Получить можно, соединив с таблицей-счетчиком. Но зачем - не понятно.
(6) Зачем там 10 записей. Продажи и количество - это реальный пример?
16 los_hooliganos
 
17.05.19
11:01
(13) Да, для пяти/n- строк нужно будет сделать вспомогательную таблицу с числом максимальное количество проданных.
17 shadow_sw
 
17.05.19
11:03
коллеги, вы слишком глубоко копаете...ТС сам не понимает, что ему надо..ну есть агрегат  - добавь детализацию и получишь, что хочется
18 shira84
 
17.05.19
11:03
(16) да я тож в эту сторону думаю
19 Zmich
 
17.05.19
11:03
Создать последовательность натуральных чисел 1, 2, 3, ... (обрубить на максимальном возможном значении), запихать во временную таблицу, соединить твои записи с этой ВТ по условию Продажи.Количество >= числа из ВТ.
20 los_hooliganos
 
17.05.19
11:08
(19) Кросс джин, условие в ГДЕ и "<="
21 palsergeich
 
17.05.19
11:13
(20) Ставлю сотку, среднего в этой задаче будет достаточно
22 shira84
 
17.05.19
11:19
(19) пытаюсь сделать так
23 Zmich
 
17.05.19
11:28
(20). Соединение левое, условие не в ГДЕ, а в условии соединения, не "<=", а ">=".
        ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0)));
    ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2)));
    СтрТЗ = ТЗ.Добавить();
    СтрТЗ.Количество = 10;
    СтрТЗ.Сумма = 500;
    НР = Новый ТаблицаЗначений;
    НР.Колонки.Добавить("Счетчик", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0)));
    Для Счетчик = 1 По 100 Цикл
        СтрНР = НР.Добавить();
        СтрНР.Счетчик = Счетчик;
    КонецЦикла;
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ТЗ.Количество КАК Количество,
    |    ТЗ.Сумма КАК Сумма
    |ПОМЕСТИТЬ ВремТЗ
    |ИЗ &ТЗ КАК ТЗ;
    |
    |ВЫБРАТЬ
    |    НР.Счетчик КАК Счетчик
    |ПОМЕСТИТЬ ВремНР
    |ИЗ &НР КАК НР;
    |
    |ВЫБРАТЬ
    |    1 КАК Количество1,
    |    ВремТЗ.Сумма/ВремТЗ.Количество КАК СуммаСредняя
    |ИЗ
    |   ВремТЗ
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |        ВремНР
    |    ПО
    |        ВремТЗ.Количество >= ВремНР.Счетчик";
    Запрос.УстановитьПараметр("ТЗ", ТЗ);
    Запрос.УстановитьПараметр("НР", НР);

Результат:

1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
24 Вася Теркин
 
17.05.19
11:41
(11) Чем отличается от
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество/Продажи.Количество КАК Количество,
    Продажи.Сумма/Продажи.Количество КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи
?
25 shira84
 
17.05.19
12:06
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.Сумма КАК Сумма
ПОМЕСТИТЬ ВРТЗ
ИЗ
    РегистрНакопления.Продажи КАК Продажи;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    10 * t1.a + t2.b КАК Поле1
ПОМЕСТИТЬ ВРНР
ИЗ
    (ВЫБРАТЬ
        0 КАК a
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        9) КАК t1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            1 КАК b
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            10) КАК t2
        ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Количество,
    ВРТЗ.Номенклатура КАК Номенклатура,
    ВРТЗ.Сумма / ВРТЗ.Количество КАК Цена
ИЗ
    ВРТЗ КАК ВРТЗ
        ЛЕВОЕ СОЕДИНЕНИЕ ВРНР КАК ВРНР
        ПО (ВРТЗ.Количество >= ВРНР.Поле1)
26 shira84
 
17.05.19
12:06
(23) Спасибо!