В начало

«Закупочные цены» через КЗОР

 

            Есть регистр сведений «Закупочные цены», нужно создать одноименный отчет, используя Конструктор запроса с обработкой результата (КЗОР).

            Запускаем конфигуратор, в дереве объектов на ветке «Отчеты» создаем новый отчет, называем его соответствующим образом на закладке свойств «Основные» и переходим в раздел «Формы», где создаем новую форму для отчета.

            В редакторе форм добавляем пару реквизитов для отчета: «ТабДок» с типом табличный документ и «ДатаОтчета» с типом дата. А также кнопку для формирования отчета с именем «Сформировать». Для кнопки/команды «Сформировать» нужно сделать событие.

Рис. 1. Форма отчета

Рис. 1. Форма отчета

            Далее переходим в модуль формы по закладке «Модуль», для процедуры «СформироватьНаСервере()» передаем параметры «ТабДок» и «ДатаОтчета». Затем помещаем курсор в тело процедуры «СформироватьНаСервере(ТабДок, ДатаОтчета)» и выбираем в главном меню конфигуратора «Текст – Конструктор запроса с обработкой результата…». После чего запустится сам конструктор.

            На закладке «Обработка результата» выбираем тип обработки «Вывод в табличный документ» и переходим на следующую закладку – «Таблицы и поля».

Рис. 2. Закладка «Обработка результата» КЗОР

Рис. 2. Закладка «Обработка результата» КЗОР

 

            На закладке «Таблицы и поля» конструктора запроса нужно выбрать виртуальную таблицу «ЗакупочныеЦенырезПоследних», добавить параметр «&ДатаОтчета» и выбрать поля: Контрагент, Номенклатура, Цена. Т.к. поля «Контрагент» и «Номенклатура» вытягиваются из справочников, то для них КЗОР автоматически создает представления.

Рис. 3. Закладка «Таблицы и поля» КЗОР

Рис. 3. Закладка «Таблицы и поля» КЗОР

 

            На закладке «Итоге» делаем группировку по полю «Контрагент», т.к. одну и ту же номенклатуру могут поставлять разные организации.

В принципе все, закрываем КЗОР. При этом будет создан авто-макет и вписан код в процедуру «СформироватьНаСервере». В макете можно немного подправить внешний вид, добавить заголовок, поменять шрифты, сделать границы и фон.

Рис. 4. Макет отчета

 

            Для вывода даты в заголовке отчета, дополнительно необходимо прописать строчку кода «ОбластьЗаголовокараметры.ДатаОтчета = Формат(ДатаОтчета,"ДФ=dd.MM.yyyy")».

 

Листинг 1. Модуль формы

&НаСервереБезКонтекста

Процедура СформироватьНаСервере(ТабДок, ДатаОтчета)

      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

      // Данный фрагмент построен конструктором.

      // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

     

      Макет = ОтчетыакупочныеЦеныЧерезКЗОР.ПолучитьМакет("Макет");

      Запрос = Новый Запрос;

      Запросекст =

            "ВЫБРАТЬ

            |     ЗакупочныеЦеныСрезПоследнихонтрагент КАК Контрагент,

            |     ПРЕДСТАВЛЕНИЕ(ЗакупочныеЦеныСрезПоследнихонтрагент),

            |     ЗакупочныеЦеныСрезПоследнихоменклатура КАК Номенклатура,

            |     ПРЕДСТАВЛЕНИЕ(ЗакупочныеЦеныСрезПоследнихоменклатура),

            |     ЗакупочныеЦеныСрезПоследнихена

            |ИЗ

            |     РегистрСведенийакупочныеЦены.СрезПоследних(&ДатаОтчета, ) КАК ЗакупочныеЦеныСрезПоследних

            |ИТОГИ ПО

            |     Контрагент";

     

      ЗапросстановитьПараметр("ДатаОтчета", ДатаОтчета);

     

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

     

      ОбластьЗаголовок = МакетолучитьОбласть("Заголовок");

      ОбластьЗаголовокараметры.ДатаОтчета = Формат(ДатаОтчета,"ДФ=dd.MM.yyyy");//Потом добавил

      ОбластьПодвал = МакетолучитьОбласть("Подвал");

      ОбластьШапкаТаблицы = МакетолучитьОбласть("ШапкаТаблицы");

      ОбластьПодвалТаблицы = МакетолучитьОбласть("ПодвалТаблицы");

      ОбластьКонтрагент = МакетолучитьОбласть("Контрагент");

      ОбластьДетальныхЗаписей = МакетолучитьОбласть("Детали");

     

      ТабДокчистить();

      ТабДокывести(ОбластьЗаголовок);

      ТабДокывести(ОбластьШапкаТаблицы);

      ТабДокачатьАвтогруппировкуСтрок();

     

      ВыборкаКонтрагент = РезультатЗапросаыбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

     

      Пока ВыборкаКонтрагентледующий() Цикл

            ОбластьКонтрагентараметры.Заполнить(ВыборкаКонтрагент);

            ТабДокывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень());

     

            ВыборкаДетальныеЗаписи = ВыборкаКонтрагентыбрать();

     

            Пока ВыборкаДетальныеЗаписиледующий() Цикл

                  ОбластьДетальныхЗаписейараметры.Заполнить(ВыборкаДетальныеЗаписи);

                  ТабДокывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());

            КонецЦикла;

      КонецЦикла;

     

      ТабДокакончитьАвтогруппировкуСтрок();

      ТабДокывести(ОбластьПодвалТаблицы);

      ТабДокывести(ОбластьПодвал);

      //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецПроцедуры

 

&НаКлиенте

Процедура Сформировать(Команда)

      СформироватьНаСервере(ТабДок, ДатаОтчета);

КонецПроцедуры

 

            Отчет показан ниже.

Рис. 5. Сформированный отчет

Рис. 5. Сформированный отчет

 

            ПРИМЕЧАНИЕ: отчет создан на версии 8.3.