Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 00:53

Разделить ячейки в области макета

Автор Pi, 10 мая 2023, 19:04

0 Пользователей и 1 гость просматривают эту тему.

Pi

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

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






Kvark5d

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

    РезультатЗапроса = Запрос.Выполнить();
   
   
    Макет=ПолучитьМакет("Макет");
    ТабДок = Новый ТабличныйДокумент;
    ОбластьШапкаОснова = Макет.ПолучитьОбласть("ШапкаТаблицы | Основа");
    ТабДок.Вывести(ОбластьШапкаОснова);
    ОбластьШапкаДата = Макет.ПолучитьОбласть("ШапкаТаблицы | Дата");
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Дата") ;
    Пока Выборка.СледующийПоЗначениюПоля("Дата") Цикл
        ОбластьШапкаДата.Параметры.Заполнить(ВыборкаДата);
        ТабДок.Присоединить(ОбластьШапкаДата);
    КонецЦикла;
    НомПП=1;
    ВыборкаУченик = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);   
    Пока ВыборкаУченик.Следующий() Цикл
        ОбластьСтрокаОснова =  Макет.ПолучитьОбласть("Строка | Основа");
        ОбластьСтрокаОснова.Параметры.Заполнить(ВыборкаУченик);
        ОбластьСтрокаОснова.Параметры.НомПП = НомПП;НомПП=НомПП+1;   
        ТабДок.Вывести(ОбластьСтрокаОснова);
       
        ВыборкаДетальныеЗаписи = ВыборкаУченик.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ОбластьСтрокаДата =  Макет.ПолучитьОбласть("Строка | Дата");
            ОбластьСтрокаДата.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
            ТабДок.Присоединить(ОбластьСтрокаДата);   
        КонецЦикла;
       
    КонецЦикла;
1.JPG

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск