В начало

«Список сотрудников» через КЗОР

 

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

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

Рис. 1. Форма отчета «Список сотрудников»

Рис. 1. Форма отчета «Список сотрудников»

 

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

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

            На закладке «Таблицы и поля» конструктора выбираем таблицы и поля по которым будем формировать отчет.

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

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

 

            На закладке «Условия» отсеиваем названия групп в фамилиях сотрудников.

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

 

            Переходим на закладку «Объединения/Псевдонимы» и переименовываем реквизиты: вместо «Родитель» пишем «Группа» ,а вместо «Наименование» – ФИО.

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

 

            На закладке «Порядок» можно установить сортировку.

Рис. 5. Закладка «Порядок»

 

            А на закладке «Итоги» выбираем группировочное поле, в нашем случае это «Группа».

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

 

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

Рис. 7. Макет

 

            Листинг с кодом процедур показан ниже.

 

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

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

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

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

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

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

     

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

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

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

            "ВЫБРАТЬ

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

            |     Сотрудники.Наименование КАК ФИО,

            |     Сотрудники.ДатаРождения

            |ИЗ

            |     Справочник.Сотрудники КАК Сотрудники

            |ГДЕ

            |     Сотрудники.ЭтоГруппа = ЛОЖЬ

            |

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

            |     Группа,

            |     ФИО

            |ИТОГИ ПО

            |     Группа";

     

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

     

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

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

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

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

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

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

     

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

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

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

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

     

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

     

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

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

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

     

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

     

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

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

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

            КонецЦикла;

      КонецЦикла;

     

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

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

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

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

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

 

&НаКлиенте

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

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

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

           

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

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

 

            Полученный отчет конечно сыроват, но его доработка это уже дело техники, ниже показан модифицированный отчет.

Рис. 9. Слегка доработанный отчет

 

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