В начало

«Взаиморасчеты» через КЗОР

 

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

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

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

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

 

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

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

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

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

 

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

 

Рис. 3. Произвольное выражение

 

Рис. 4. Другое произвольное выражение

 

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

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

 

Далее переходим на закладку «Объединения/Псевдонимы», здесь кое что переименовываем по-человечески чтобы было.

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

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

 

Также можно на закладке «Итоги» выбрать группировочное поле и общие итоги.

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

 

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

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

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

 

            Также будут заполнена кодом процедура «СформироватьНаСервере(ТабДок)» в модуле формы. Листинг модуля формы приведен ниже.

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

&НаКлиенте

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

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

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

 

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

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

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

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

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

     

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

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

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

            "ВЫБРАТЬ

            |     ВзаиморасчетыОстатки.Контрагент КАК Контрагент,

            |     ВЫБОР

            |           КОГДА ВзаиморасчетыОстатки.СуммаДолгаОстаток < 0

            |                 ТОГДА -ВзаиморасчетыОстатки.СуммаДолгаОстаток

            |     КОНЕЦ КАК МыДолжны,

            |     ВЫБОР

            |           КОГДА ВзаиморасчетыОстатки.СуммаДолгаОстаток > 0

            |                 ТОГДА ВзаиморасчетыОстатки.СуммаДолгаОстаток

            |     КОНЕЦ КАК НамДолжны

            |ИЗ

            |     РегистрНакопления.Взаиморасчеты.Остатки КАК ВзаиморасчетыОстатки

            |

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

            |     Контрагент

            |ИТОГИ

            |     СУММА(МыДолжны),

            |     СУММА(НамДолжны)

            |ПО

            |     ОБЩИЕ,

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

     

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

     

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

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

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

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

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

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

     

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

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

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

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

     

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

     

      ВыборкаОбщийИтог.Следующий();      // Общий итог

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

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

     

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

     

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

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

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

      КонецЦикла;

     

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

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

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

     

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

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

 

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

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

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

 

            ПРИМЕЧАНИЕ: пример создания отчета сделан на платформе «1С:Предприятие 8.3» с интерфейсом «Такси».