Имя: Пароль:
1C
1С v8
Группировка в запросе
0 prtx
 
11.06.15
15:22
Опять у меня проблемы(((

Люди есть регистр сведений ПрайсыПоставшиков. В нем хранятся данные о ценах товаров.

Я делаю "диво-дивное" для формирования заказа. Т.Е. мне нужно достать из этого регистра данные в иерархии. Что бы в дальнейшем я делаю перебор записей и создавал для каждого поставщика отдельный документ заказа.

Вот мой запрос:

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

СГРУППИРОВАТЬ ПО
    ПоставляемаяНоменклатура.Поставщик,
    Потребность.Номенклатура,
    Потребность.КоличествоЦелое,
    ПоставляемаяНоменклатура.Код
ИТОГИ ПО
    Номенклатура ТОЛЬКО ИЕРАРХИЯ


Сейчас у меня идет одна выборка, а мне нужно я две выборки. т.е. я делаю выборку по поставщикам и создаю документ, дальше делаю выборку записей номенклатуры и записываю их в этот документ, потом следующий поставщик и т.д.

Нужно получить что типа этого:

    Пока Выборка.Следующий() Цикл
        
        ВыборкаТоварыПоставщика = Выборка.ТоварыНаСкладах.Выбрать();

        Пока ВыборкаТоварыПоставщика.Следующий() Цикл            

        КонецЦикла;
        
    КонецЦикла;
1 Napalmmm
 
11.06.15
15:41
Так может "ИТОГИ ПО Номенклатура" заменить на "ИТОГИ ПО Поставщик"?
2 Aprobator
 
11.06.15
16:33
Потребность в регистре сведений - уже интересно.
3 TeMochkiN
 
11.06.15
16:36
а зачем в запросе
РегистрСведений.ПрайсыПоставщиков.СрезПоследних КАК ПрайсыПоставщиковСрезПоследних
если никакие поля из него не используются?
4 hhhh
 
11.06.15
16:55
(3) ВНУТРЕННЕЕ СОЕДИНЕНИЕ
5 Aprobator
 
11.06.15
17:00
Сгруппировать здесь точно нафиг не нужно. РАЗЛИЧНЫЕ в помощь.
6 prtx
 
11.06.15
17:00
(3) это для дальнейшего использования
7 vicof
 
11.06.15
17:00
(6) Для какого дальнейшего?)))
8 Aprobator
 
11.06.15
17:02
Что за использование таблицы без выборки из неё полей?
9 TeMochkiN
 
11.06.15
17:03
(4) и что? внутреннее соединение двух таблиц, а третья просто так висит, или я чего-то не знаю?
10 prtx
 
11.06.15
17:25
(9) (8) (7) (4) (1)

С горем по полам решил задачу.
Вот что у меня получилось.

    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    Потребность.Номенклатура,
                    |    Потребность.КоличествоЦелое,
                    |    ПоставляемаяНоменклатура.Поставщик КАК Поставщик,
                    |    ПоставляемаяНоменклатура.Код
                    |ИЗ
                    |    РегистрСведений.Потребность КАК Потребность
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставляемаяНоменклатура КАК ПоставляемаяНоменклатура
                    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПрайсыПоставщиков.СрезПоследних КАК ПрайсыПоставщиковСрезПоследних
                    |            ПО ПоставляемаяНоменклатура.Код = ПрайсыПоставщиковСрезПоследних.Код
                    |        ПО Потребность.Номенклатура = ПоставляемаяНоменклатура.Номенклатура
                    |ГДЕ
                    |    Потребность.Организация = &Организация
                    |    И Потребность.Склад = &Склад
                    |    И ПрайсыПоставщиковСрезПоследних.Период >= &НачалоПериода
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    ПоставляемаяНоменклатура.Поставщик,
                    |    Потребность.Номенклатура,
                    |    Потребность.КоличествоЦелое,
                    |    ПоставляемаяНоменклатура.Код
                    |ИТОГИ ПО
                    |    Поставщик";

    Запрос.УстановитьПараметр("Организация", ПараметрыСеанса.ТекущийСотрудник.Организация);
    Запрос.УстановитьПараметр("Склад", ПараметрыСеанса.ТекущийСотрудник.Склад);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
                
    Результат = Запрос.Выполнить();
    ВыборкаПоПоставщикам = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик");
    
    Пока ВыборкаПоПоставщикам.Следующий() Цикл
        ВыборкаПоНоменклатуре = ВыборкаПоПоставщикам.Выбрать();
        Сообщить("поставщик-"+ВыборкаПоПоставщикам.Поставщик);
        Пока ВыборкаПоНоменклатуре.Следующий() Цикл
            Сообщить("номенклатура-"+ВыборкаПоНоменклатуре.Номенклатура);
        КонецЦикла;
    КонецЦикла;
11 bootini
 
11.06.15
17:26
Через НайтиСтроки() делай и не заморачивайся