Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получается сгруппировать данные в запросе (Бухгалтерия для Украины 8.2)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
mabuta_account
Добрый день!

Помогите...

Конфигурация Бухгалтерия для Украины 1.2.6.5 8.2

У меня вот какая проблема есть документ (Погрузочный лист) который содержит в себе расходные накладные за период, нужно выводить в печатную форму (Маршрутно погрузочный лист) вот такой вид информации:

Цитата
Маршрут1
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура1
Номенклатура2 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Контрагент2
Номенклатура1
Номенклатура2
Маршрут2
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура1
Номенклатура2 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Контрагент2
Номенклатура1
Номенклатура2


Но на данный момент запрос не хочет формировать сгруппированные строки и отображает вот такое:

Цитата
Маршрут1
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура1 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Маршрут2
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура1 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Маршрут1
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура2 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Маршрут2
Контрагент1 (то есть контрагент который относиться до этого маршрута)
Номенклатура2 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)
Маршрут1
Контрагент2 (то есть контрагент который относиться до этого маршрута)
Номенклатура2 (номенклатура с табличной части расходной накладной которая удовлетворяет условию)


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

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПогрузочныйЛист.Контрагент КАК Контрагент,
    |    ПогрузочныйЛист.Експедитор КАК Експедитор,
    |    РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
    |    РеализацияТоваровУслуг.Количество КАК Количество,
    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПогрузочныйЛист.Расходные КАК ПогрузочныйЛист
    |        ПО (ПогрузочныйЛист.ДокРасх = РеализацияТоваровУслуг.Ссылка)
    |ГДЕ
    |    ПогрузочныйЛист.Ссылка = &ТекущийДокумент
    |
    |СГРУППИРОВАТЬ ПО
    |    РеализацияТоваровУслуг.Номенклатура,
    |    ПогрузочныйЛист.Контрагент,
    |    ПогрузочныйЛист.Експедитор,
    |    РеализацияТоваровУслуг.Количество
    |АВТОУПОРЯДОЧИВАНИЕ";
    Маршруты = Запрос.Выполнить().Выбрать();
        
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МаршрутноПогрузочныйЛист";

    Макет = ПолучитьМакет("МаршрутноПогрузочныйЛист");
    
    НомерСтроки = 0;

    Пока Маршруты.Следующий() Цикл
        
        ОбластьМакета = Макет.ПолучитьОбласть("Маршрут");
        ОбластьМакета.Параметры.Водитель = "Маршрут: " + Строка(Маршруты.Експедитор);
        ТабДокумент.Вывести(ОбластьМакета);      

        ОбластьМакета = Макет.ПолучитьОбласть("Контрагент");
        ОбластьМакета.Параметры.Контрагент = Маршруты.Контрагент;
        ТабДокумент.Вывести(ОбластьМакета);

        ОбластьМакета = Макет.ПолучитьОбласть("Строка");
                    НомерСтроки = НомерСтроки + 1;
                        ОбластьМакета.Параметры.НомерСтроки = НомерСтроки;
                    ОбластьМакета.Параметры.Товар = Маршруты.Товар;
                    ОбластьМакета.Параметры.Количество = Маршруты.Количество;
        ТабДокумент.Вывести(ОбластьМакета);

    КонецЦикла;
    Возврат ТабДокумент;


Знаю что в 1с 7.7 была такая структура как Пока Сгруппировать (1) = 1 Цикл Сгруппировать(2) = 1 Цикл.

Не ссудите строго, помогите плиз.

Очень признательный за помощь.


 ! 

Правила, п.5.
 
Vofka
Из вашего запроса не понятно, где поле Маршрут. А вообще на первый взгляд не должно возникать никаких сложностей: делаете группировку по Маршрут, Контрагент и Номенклатура
pablo
полагаю, запрос должен быть таким:
"ВЫБРАТЬ
    |    ПогрузочныйЛист.Контрагент КАК Контрагент,
    |    ПогрузочныйЛист.Експедитор КАК Експедитор,
    |    РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
    |    СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,
    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПогрузочныйЛист.Расходные КАК ПогрузочныйЛист
    |        ПО (ПогрузочныйЛист.ДокРасх = РеализацияТоваровУслуг.Ссылка)
    |ГДЕ
    |    ПогрузочныйЛист.Ссылка = &ТекущийДокумент
    |
    |СГРУППИРОВАТЬ ПО
    |    РеализацияТоваровУслуг.Номенклатура,
    |    ПогрузочныйЛист.Контрагент,
    |    ПогрузочныйЛист.Експедитор
    |АВТОУПОРЯДОЧИВАНИЕ"
Batchir
я б ещё итоги добавил и обход результата запроса по группировкам сделал
mister-x
Цитата(mabuta_account @ 27.06.12, 9:12) необходимо зарегистрироваться для просмотра ссылки
Знаю что в 1с 7.7 была такая структура как Пока Сгруппировать (1) = 1 Цикл Сгруппировать(2) = 1 Цикл.

якщо бути точним
Пока Запрос.Группировка(1)=1 цикл
Пока Запрос.Группировка(2)=1 цикл
...
mabuta_account
Цитата(mister-x @ 27.06.12, 13:13) необходимо зарегистрироваться для просмотра ссылки
якщо бути точним
Пока Запрос.Группировка(1)=1 цикл
Пока Запрос.Группировка(2)=1 цикл
...

Хорошо, я в следующий раз до оформлю

Цитата(pablo @ 27.06.12, 10:58) необходимо зарегистрироваться для просмотра ссылки
полагаю, запрос должен быть таким:
"ВЫБРАТЬ
    |    ПогрузочныйЛист.Контрагент КАК Контрагент,
    |    ПогрузочныйЛист.Експедитор КАК Експедитор,
    |    РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
    |    СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,
    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПогрузочныйЛист.Расходные КАК ПогрузочныйЛист
    |        ПО (ПогрузочныйЛист.ДокРасх = РеализацияТоваровУслуг.Ссылка)
    |ГДЕ
    |    ПогрузочныйЛист.Ссылка = &ТекущийДокумент
    |
    |СГРУППИРОВАТЬ ПО
    |    РеализацияТоваровУслуг.Номенклатура,
    |    ПогрузочныйЛист.Контрагент,
    |    ПогрузочныйЛист.Експедитор
    |АВТОУПОРЯДОЧИВАНИЕ"


Это не подходит так как мне не нужно объединять по совпадению номенклатуры.


Спасибо всем за помощь.

Все вышло.

Вот запрос:

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПогрузочныйЛист.Контрагент КАК Контрагент,
    |    ПогрузочныйЛист.Експедитор КАК Експедитор,
    |    РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
    |    РеализацияТоваровУслуг.Количество КАК Количество,
    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПогрузочныйЛист.Расходные КАК ПогрузочныйЛист
    |        ПО (ПогрузочныйЛист.ДокРасх = РеализацияТоваровУслуг.Ссылка)
    |ГДЕ
    |    ПогрузочныйЛист.Ссылка = &ТекущийДокумент
    |
    |ИТОГИ ПО
    |    Експедитор,
    |    Контрагент
    |АВТОУПОРЯДОЧИВАНИЕ";
            
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МаршрутноПогрузочныйЛист";

    Макет = ПолучитьМакет("МаршрутноПогрузочныйЛист");
    
    КодЯзыкаПечать = "uk";
    Макет.КодЯзыкаМакета = КодЯзыкаПечать;
    
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Документ = "Вантажний лист № " + Строка(Номер) + " от " +  Строка(Формат(Дата,"ДФ=dd.MM.yyyy"));
    ТабДокумент.Вывести(ОбластьМакета);
    
        Выборка1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Експедитор");
            Пока Выборка1.следующий() цикл

                ОбластьМакета = Макет.ПолучитьОбласть("Маршрут");
                ОбластьМакета.Параметры.Водитель = "Маршрут: " + Строка(Выборка1.Експедитор);
                ТабДокумент.Вывести(ОбластьМакета);
        
        Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Контрагент");
            Пока Выборка2.Следующий() цикл
            
            ОбластьМакета = Макет.ПолучитьОбласть("Контрагент");
            ОбластьМакета.Параметры.Контрагент = Выборка2.Контрагент;
            ТабДокумент.Вывести(ОбластьМакета);
            
        Выборка3 = Выборка2.Выбрать();
            Пока Выборка3.Следующий() цикл
                
            НомерСтроки = 0;
            ОбластьМакета = Макет.ПолучитьОбласть("Строка");
                    НомерСтроки = НомерСтроки + 1;
                    ОбластьМакета.Параметры.НомерСтроки = НомерСтроки;
                    ОбластьМакета.Параметры.Товар = Выборка3.Товар;
                    ОбластьМакета.Параметры.Количество = Выборка3.Количество;
            ТабДокумент.Вывести(ОбластьМакета);
          
        КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    Возврат ТабДокумент;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.