Отчет ВыручкаМастеров



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

Создадим новый объект конфигурации Отчет «ВыручкаМастеров». Перейдем на закладку «Макет» и запустим конструктор выходной формы.

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

После этого выберем из таблицы следующие поля:

· «ПродажиОбороты.Мастер»,

· «ПродажиОбороты.Период»,

· «ПродажиОбороты.Клиент»,

· «ПродажиОбороты.ВыручкаОборот»:

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

На закладке «Порядок» определим, что результат запроса будет отсортирован по возрастанию значения поля «Период» и на закладке «Итоги» зададим получение общих итогов и промежуточных итогов по полям «Мастер» и «Период»:

На закладке «Отчет» сбросим флаг «Использовать построитель отчета».

На закладке «Выходная форма» отметим, что тип параметров «ДатаНачала» и «ДатаОкончания» будет Дата. Нажмем «ОК».

Сразу, как и в предыдущем отчете, определим состав даты для полей ввода, расположенных в форме, и затем в вызове процедуры «ВыручкаМастеров» уточним передачу последнего параметра при помощи функции КонецДня():

 

Процедура ДействияФормыВыручкаМастеровСформировать(Кнопка)

//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА

//(ВыручкаМастеров)

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

// При повторном использовании конструктора,

// внесенные вручную изменения будут утеряны!!!

 

ТабДок = ЭлементыФормы.ТабличноеПоле;

ВыручкаМастеров(ТабДок, ДатаНачала, КонецДня (ДатаОкончания));

 

//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА

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

 

Теперь обратимся к процедуре «ВыручкаМастеров» и в первую очередь рассмотрим текст запроса, сформированный конструктором:

 

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

"ВЫБРАТЬ

ПродажиОбороты.Мастер КАК Мастер,

ПродажиОбороты.Мастер.Представление,

ПродажиОбороты.Период КАК Период,

ПродажиОбороты.Клиент,

ПродажиОбороты.Клиент.Представление,

ПродажиОбороты.ВыручкаОборот КАК Выручка

ИЗ

РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)

КАК ПродажиОбороты

 

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

Период

ИТОГИ СУММА(Выручка) ПО

ОБЩИЕ,

Мастер,

Период";

 

В части описания запроса обратите внимание, что у источника данных кроме задания начала и окончания периода расчета итогов задана периодичность выбираемых данных - «День»:

ИЗ

РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)

КАК ПродажиОбороты

Именно благодаря этому у нас появляется возможность описать среди выбранных полей поле «Период».

Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки:

ИТОГИ СУММА(Выручка) ПО

ОБЩИЕ,

Мастер,

Период";

Помимо общих итогов, в нашем запросе будут рассчитаны промежуточные итоги по полям «Мастер» и «Период».

Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета «Выручка мастеров» за период с 01.02.20__ г. по 28.02.20__ г.:

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

Вернемся к модулю отчета «ВыручкаМастеров» и в части описания итогов запроса уточним, каким образом должны рассчитываться итоги по полю «Период»:

 

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

"ВЫБРАТЬ

ПродажиОбороты.Мастер КАК Мастер,

ПродажиОбороты.Мастер.Представление,

ПродажиОбороты.Период КАК Период,

ПродажиОбороты.Клиент,

ПродажиОбороты.Клиент.Представление,

ПродажиОбороты.ВыручкаОборот КАК Выручка

ИЗ

РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)

КАК ПродажиОбороты

 

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

Период

ИТОГИ СУММА(Выручка) ПО

ОБЩИЕ,

Мастер,

Период ПЕРИОДАМИ(День, &ДатаНачала, &ДатаОкончания) ";

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

И для того, чтобы все эти итоги попали в итоговый табличный документ, нам нужно будет уточнить порядок вывода итогов в выборке результата запроса:

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

 

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

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

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

 

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

 

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

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

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

 

ВыборкаДетали = ВыборкаПериод.Выбрать();

Пока ВыборкаДетали.Следуюший() Цикл

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

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

КонецЦикла;

КонецЦикла;

КонецЦикла;

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

Запустим 1С:Предприятие в режиме отладки и выполним отчет «ВыручкаМастеров» за период с 01.02.20__ г. по 28.02.20__ г.

Таким образом, результат отчета будет содержать по 32 строки дат для каждого сотрудника.

Очевидно, что такой внешний вид отчета абсолютно «нечитабелен», поэтому мы снова вернемся к модулю отчета и внесем небольшие уточнения в алгоритм вывода областей табличного документа:

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

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

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

 

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

 

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

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

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

 

ВыборкаДетали = ВыборкаПериод.Выбрать();

Пока ВыборкаДетали.Следуюший() Цикл

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

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

КонецЦикла;

КонецЦикла;

КонецЦикла;

Смысл внесенных нами изменений заключается в том, что при выводе областей детальных записей и периода, мы сворачиваем группировки, которые по умолчанию выводятся развернутыми.

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

На этот раз результат выглядит гораздо лучше:

Итак, на примере этого отчета мы продемонстрировали, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе.

 


Дата добавления: 2015-12-20; просмотров: 39; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!