В начало

«Прайс лист» через КЗОР

 

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

            Далее, на закладке «Основные» свойств объекта задать имя и можно переходить смело к следующему этапу – созданию формы на закладке «Формы». Итак, создаем форму отчета, добавляем реквизит формы «ТабДок» с типом табличный документ и команду формы «Сформировать». После этого перетаскиваем эти элементы в левую часть на интерфейс формы, так чтобы они отобразились на ней.

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

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

 

            Затем для кнопки/команды «Сформировать» создаем действие и автоматически переходим в модуль формы. В модуле формы нужно описать процедуры. На самом деле скорее одну процедуру, т.к. из-за особенностей синтаксиса языка что-то можно делать на сервере, а что-то на клиенте, вот именно по этому одна процедура будет тупо вызывать другую. В той процедуре, что предваряется директивой «&НаСервереБезКонтекста» нужно вызвать КЗОР или если грубо «Конструктор ЗасОР», который вызывается выбором в главном меню конфигуратора «Текст – Конструктор запроса с обработкой результата…» или же в контекстном меню, т.е. кликнуть правой кнопкой мыши и выбрать КЗОР.

            После того как будет вызван КЗОР, на закладке «Обработка результата» необходимо выбрать тип обработки, размещение группировок, имя макета и т.д. Главное это «Вывод в табличный документ», остальное можно не менять.

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

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

 

            Затем переходим на закладку «Таблицы и поля», где нужно выбрать источник данных, по которому будет составлен отчет.

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

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

 

            Далее переходим на закладку «Условия» и вписываем код для исключения групп.

Рис. 4. Закладка «Условия»

Рис. 4. Закладка «Условия»

 

            А на закладке «Объединения/Псевдонимы» переименовываем «Родитель» в «Группа».

Рис. 5. Закладка «Объединения/Псевдонимы»

Рис. 5. Закладка «Объединения/Псевдонимы»

 

            Чтобы группы не повторялись, можно на закладке «Итоги» выбрать группировочное поле «Группа».

Рис. 6. Закладка «Итоги»

Рис. 6. Закладка «Итоги»

 

            Все, теперь можно выходить из КЗОР. при этом будет создан авто-макет и код процедуры.

Рис. 6. Авто-макет по имени «Макет»

Рис. 6. Авто-макет по имени «Макет»

 

Листинг 1. Процедуры в модуле формы

&НаКлиенте

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

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

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

 

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

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

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

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

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

     

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

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

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

            "ВЫБРАТЬ

            |     Номенклатура.Родитель КАК Группа,

            |     Номенклатура.Наименование КАК Наименование,

            |     Номенклатура.ЦенаПродажи КАК ЦенаПродажи

            |ИЗ

            |     Справочник.Номенклатура КАК Номенклатура

            |ГДЕ

            |     Номенклатура.ЭтоГруппа = ЛОЖЬ

            |

            |УПОРЯДОЧИТЬ ПО

            |     Группа,

            |     Наименование

            |ИТОГИ ПО

            |     Группа";

     

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

     

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

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

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

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

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

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

     

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

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

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

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

     

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

     

      Пока ВыборкаГруппа.Следующий() Цикл

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

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

     

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

     

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

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

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

            КонецЦикла;

      КонецЦикла;

     

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

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

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

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

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

            Далее запускаем режим «1С:Предприятие» и вызываем отчет.

Рис. 7. Отчет «Прайс лист», созданный через КЗОР

Рис. 7. Отчет «Прайс лист», созданный через КЗОР

 

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