Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Групировка в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Fabri
Добрый день. Столкнулся с такой проблемкой. Есть документ - Учебный план. В нем вводятся какие будут екзамены и зачеты по той или иной дисциплине. После заполнения учебного плана, нажатием на кнопочку формируются документы Зачетные ведомости.

Вот код вывода (примерный):

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

    Запрос.УстановитьПараметр("ГодПоступления", Объект.ГодПоступления);
    Запрос.УстановитьПараметр("Направление", Объект.Направление);
    Запрос.УстановитьПараметр("УровеньКвалификации", Объект.УровеньКвал);
    Запрос.УстановитьПараметр("ФормаОбучения", Объект.ФормаОбуч);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    

    ДокВедомость = Документы.ЗачетнаяВедомость.СоздатьДокумент();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ДокВедомость.Дата = ТекущаяДата();
        НовСтрока = ДокВедомость.СписокСтудентов.Добавить();
        НовСтрока.ФИОСтудента = ВыборкаДетальныеЗаписи.Ссылка;
        НовСтрока.НомЗачетки = ВыборкаДетальныеЗаписи.НомерЗачетнойКнижки;
    КонецЦикла;
    
    ДокВедомость.Записать(РежимЗаписиДокумента.Проведение);


На данный момент мне выводит всех студентов в один документ - Зачетная ведомость. Необходимо же, чтобы выводились в одну ведомость студенты одной группы (параметр Студенты.Группа), в другую ведомость другой и т.д.

Подкажите как можно это осуществить? Заранее спасибо.
sava1
Читаем - ОбходРезультатаЗапроса.ПоГруппировкам а заодно Запрос.Итоги
Fabri
Дополню:

Параметра Группа у нас в исходном дкументе нет, выборка осуществляется только 4-мя параметрами в запросе:

    Запрос.УстановитьПараметр("ГодПоступления", Объект.ГодПоступления);
    Запрос.УстановитьПараметр("Направление", Объект.Направление);
    Запрос.УстановитьПараметр("УровеньКвалификации", Объект.УровеньКвал);
    Запрос.УстановитьПараметр("ФормаОбучения", Объект.ФормаОбуч);


За данными критериями могут быть студенты с нескольких групп, а уже в получаемых документах они должны посортированны по групам.
alex040269
   ДокВедомость = Документы.ЗачетнаяВедомость.СоздатьДокумент();
   Группа = Неопределено;
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

        Если Группа <> ВыборкаДетальныеЗаписи.Группа Тогда
              Если Гнуппа <> неопределено Тогда
                  ДокВедомость.Записать(РежимЗаписиДокумента.Проведение);
                  ДокВедомость = Документы.ЗачетнаяВедомость.СоздатьДокумент();
              КонецЕсли;
              Группа = ВыборкаДетальныеЗаписи.Группа
         КонецЕсли;

        ДокВедомость.Дата = ТекущаяДата();
        НовСтрока = ДокВедомость.СписокСтудентов.Добавить();
        НовСтрока.ФИОСтудента = ВыборкаДетальныеЗаписи.Ссылка;
        НовСтрока.НомЗачетки = ВыборкаДетальныеЗаписи.НомерЗачетнойКнижки;
    КонецЦикла;
    ДокВедомость.Записать(РежимЗаписиДокумента.Проведение);


ну и запрос упорядочить по группе.
Fabri
alex040269 - Ваш код ещё больше запупал.

Ответ sava1 - вывел на путь истинный, но почему-то выскакивает ошибка.

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

    Запрос.УстановитьПараметр("ГодПоступления", Объект.ГодПоступления);
    Запрос.УстановитьПараметр("Направление", Объект.Направление);
    Запрос.УстановитьПараметр("УровеньКвалификации", Объект.УровеньКвал);
    Запрос.УстановитьПараметр("ФормаОбучения", Объект.ФормаОбуч);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    ДокВедомость = Документы.ЗачетнаяВедомость.СоздатьДокумент();
    
    ВыборкаГруппа = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Группа");
//Делаю ещё одну выборку с обходом по полю Группа, а мне ошибку - Измерение не найдено "Група"

    
Пока ВыборкаГруппа.Следующий() Цикл
    
    ДокВедомость.Группа = ВыборкаГруппа.Группа;        
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        ДокВедомость.Дата = ТекущаяДата();
        НовСтрока = ДокВедомость.СписокСтудентов.Добавить();
        НовСтрока.ФИОСтудента = ВыборкаДетальныеЗаписи.Ссылка;
        НовСтрока.НомЗачетки = ВыборкаДетальныеЗаписи.НомерЗачетнойКнижки;
        
    КонецЦикла;
    
    ДокВедомость.Записать(РежимЗаписиДокумента.Проведение);
    
КонецЦикла;


Ошибка - Измерение не найдено "Група".
alex040269
Цитата(sava1 @ 17.10.12, 13:59) необходимо зарегистрироваться для просмотра ссылки
а заодно Запрос.Итоги



Цитата(Fabri @ 17.10.12, 14:21) необходимо зарегистрироваться для просмотра ссылки
ДокВедомость = Документы.ЗачетнаяВедомость.СоздатьДокумент();


должен быть после начала внешнего цикла.
kivals
Fabri, внимательно изучиТЕ закладку Итоги в конструкторе запроса: чтобы использовать обход по группировкам нужно задать поля группировок. Кроме того - детальную выборку нужно инициализировать внутри внешнего цикла, и не от результата запроса, а от предыдущей выборки:
 Пока ВыборкаГруппа.Следующий() Цикл
     ...
     ВыборкаДетальныеЗаписи = ВыборкаГруппа.Выбрать();
     Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         ...
Vofka

 ! 

kivals, у нас вообще то на Вы принято общаться!
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.