Отчет ВыручкаМастеров
Отчет «Выручка мастеров» будет содержать информацию о том, какая выручка была получена ООО «Мастер» благодаря работе каждого из мастеров, с детализацией по всем дням в выбранном периоде и разворотом по клиентам, обслуженным в каждый из дней. На примере этого отчета мы проиллюстрируем, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе.
Создадим новый объект конфигурации Отчет «ВыручкаМастеров». Перейдем на закладку «Макет» и запустим конструктор выходной формы.
Выберем виртуальную таблицу регистра накопления «Продажи.Обороты». Зададим для нее значения параметров «НачалоПериода», «КонецПериода» и «Периодичность»:
После этого выберем из таблицы следующие поля:
· «ПродажиОбороты.Мастер»,
· «ПродажиОбороты.Период»,
· «ПродажиОбороты.Клиент»,
· «ПродажиОбороты.ВыручкаОборот»:
Теперь перейдем на закладку «Объединения/Псевдонимы» и зададим псевдоним «Выручка» для поля «ПродажиОбороты.ВыручкаОборот»:
На закладке «Порядок» определим, что результат запроса будет отсортирован по возрастанию значения поля «Период» и на закладке «Итоги» зададим получение общих итогов и промежуточных итогов по полям «Мастер» и «Период»:
На закладке «Отчет» сбросим флаг «Использовать построитель отчета».
На закладке «Выходная форма» отметим, что тип параметров «ДатаНачала» и «ДатаОкончания» будет Дата. Нажмем «ОК».
|
|
Сразу, как и в предыдущем отчете, определим состав даты для полей ввода, расположенных в форме, и затем в вызове процедуры «ВыручкаМастеров» уточним передачу последнего параметра при помощи функции КонецДня():
Процедура ДействияФормыВыручкаМастеровСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
//(ВыручкаМастеров)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора,
// внесенные вручную изменения будут утеряны!!!
ТабДок = ЭлементыФормы.ТабличноеПоле;
ВыручкаМастеров(ТабДок, ДатаНачала, КонецДня (ДатаОкончания));
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры
Теперь обратимся к процедуре «ВыручкаМастеров» и в первую очередь рассмотрим текст запроса, сформированный конструктором:
Запрос.Текст =
"ВЫБРАТЬ
ПродажиОбороты.Мастер КАК Мастер,
ПродажиОбороты.Мастер.Представление,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Клиент,
ПродажиОбороты.Клиент.Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
|
|
КАК ПродажиОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период";
В части описания запроса обратите внимание, что у источника данных кроме задания начала и окончания периода расчета итогов задана периодичность выбираемых данных - «День»:
…
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
КАК ПродажиОбороты
…
Именно благодаря этому у нас появляется возможность описать среди выбранных полей поле «Период».
Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки:
…
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период";
…
Помимо общих итогов, в нашем запросе будут рассчитаны промежуточные итоги по полям «Мастер» и «Период».
Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета «Выручка мастеров» за период с 01.02.20__ г. по 28.02.20__ г.:
Если вы помните, в начале раздела мы говорили, что этот отчет должен показывать данные с детализацией по всем дням в выбранном периоде. У нас же отображаются только те дни, для которых существуют ненулевые записи в таблице регистра накопления. Поэтому сейчас мы займемся тем, что изменим текст программы таким образом, чтобы в отчет попадала каждая дата из указанного периода.
|
|
Вернемся к модулю отчета «ВыручкаМастеров» и в части описания итогов запроса уточним, каким образом должны рассчитываться итоги по полю «Период»:
Запрос.Текст =
"ВЫБРАТЬ
ПродажиОбороты.Мастер КАК Мастер,
ПродажиОбороты.Мастер.Представление,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Клиент,
ПродажиОбороты.Клиент.Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
КАК ПродажиОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период ПЕРИОДАМИ(День, &ДатаНачала, &ДатаОкончания) ";
…
Такая запись говорит о том, что итоги должны быть рассчитаны периодами равными дню, в интервале дат, задаваемом параметрами «ДатаНачала» и «ДатаОкончания».
И для того, чтобы все эти итоги попали в итоговый табличный документ, нам нужно будет уточнить порядок вывода итогов в выборке результата запроса:
…
ВыборкаМастер = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
|
|
Пока ВыборкаМастер.Следующий() Цикл
ОбластьМастер.Параметры.Заполнить(ВыборкаМастер);
ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень());
ВыборкаПериод = ВыборкаМастер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());
ВыборкаДетали = ВыборкаПериод.Выбрать();
Пока ВыборкаДетали.Следуюший() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
КонецЦикла;
КонецЦикла;
…
Смысл внесенных нами уточнений заключается в том, что теперь при формировании выборки по группировке «Период» будут выбираться все имеющиеся значения группировок.
Запустим 1С:Предприятие в режиме отладки и выполним отчет «ВыручкаМастеров» за период с 01.02.20__ г. по 28.02.20__ г.
Таким образом, результат отчета будет содержать по 32 строки дат для каждого сотрудника.
Очевидно, что такой внешний вид отчета абсолютно «нечитабелен», поэтому мы снова вернемся к модулю отчета и внесем небольшие уточнения в алгоритм вывода областей табличного документа:
…
Пока ВыборкаМастер.Следующий() Цикл
ОбластьМастер.Параметры.Заполнить(ВыборкаМастер);
ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень());
ВыборкаПериод = ВыборкаМастер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень() ,, Ложь);
ВыборкаДетали = ВыборкаПериод.Выбрать();
Пока ВыборкаДетали.Следуюший() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень() ,, Ложь);
КонецЦикла;
КонецЦикла;
КонецЦикла;
…
Смысл внесенных нами изменений заключается в том, что при выводе областей детальных записей и периода, мы сворачиваем группировки, которые по умолчанию выводятся развернутыми.
Запустим 1С:Предприятие в режиме отладки и снова выполним отчет «ВыручкаМастеров».
На этот раз результат выглядит гораздо лучше:
Итак, на примере этого отчета мы продемонстрировали, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе.
Дата добавления: 2015-12-20; просмотров: 39; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!