В начало

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

 

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

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

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

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

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

 

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

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

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

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

 

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

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

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

 

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

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

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

 

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

 

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

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

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

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

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

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

     

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

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

      Запрос.Текст =

            "ВЫБРАТЬ

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

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

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

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

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

            |ИЗ

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

            |ИТОГИ ПО

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

     

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

     

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

     

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

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

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

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

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

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

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

     

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

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

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

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

     

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

     

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

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

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

     

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

     

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

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

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

            КонецЦикла;

      КонецЦикла;

     

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

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

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

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

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

 

&НаКлиенте

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

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

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

 

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

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

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

 

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