1С-Предприятие 8.0. Практическое пособие разработчика

       

Отчет ПереченьУслуг


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

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

Выберем объектную (ссылочную) таблицу справочника "Номенклатура" и виртуальную таблицу регистра сведений "Цены.СрезПоследних". Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу "Номенклатура" в "СпрНоменклатура".

Вызовем диалог ввода параметров виртуальной таблицы "ЦеныСрезПоследних" и укажем, что период будет передан в параметре "ДатаОтчета". Затем выберем из таблиц следующие поля:

·"СпрНоменклатура.Родитель",
·"СпрНоменклатура.Ссылка",
·"ЦеныСрезПоследних.Цена":

Перейдем на закладку "Связи" и сбросим флаг "Все" у таблицы регистра и установим его у таблицы справочника. [191]

На закладке "Условия" зададим условие выбора элементов справочника "Номенклатура" – выбираемые элементы должны соответствовать виду номенклатуры переданному в параметре запроса "ВидНоменклатуры":

На закладке "Объединения/Лсевдонимы" укажем, что поле "Родитель" будет иметь псевдоним "ГруппаУслуг", а поле "Ссылка" – "Услуга":

Перейдем на закладку "Итоги" и укажем, что группировка будет производиться по полю "ГруппаУслуг" с типом итогов "Элементы и иерархия", а значения суммируемых полей задавать не станем:



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

На закладке "Выходная форма" отметим, что тип параметра "ДатаОтчета" будет Дата, а параметр "ВидНоменклатуры" в форме редактироваться не будет. Нажмем "ОК". [192]




Откроем модуль формы и в процедуре "ПереченьУслуг" определим значение параметра запроса:

   Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Услуга);

   Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);

Теперь рассмотрим текст запроса, сформированный конструктором:

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

   "ВЫБРАТЬ

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

   |    ПРЕДСТАВЛЕНИЕ(СпрНоменклатура.Родитель),

   |    СпрНоменклатура.Ссылка КАК Услуга,

   |    СпрНоменклатура.Представление,

   |    ЦеныСрезПоследних.Цена

   |ИЗ

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

   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета, ) КАК ЦеныСрезПоследних

   |        ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка

   |ГДЕ

   |    СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

   |ИТОГИ ПО

   |    ГруппаУслуг ИЕРАРХИЯ";

Практически все конструкции, использованные в этом запросе, нам уже известны, за исключением ключевого слова ИЕРАРХИЯ, использованного в части описания итогов. Это ключевое слово позволяет рассчитывать итоги по иерархии справочника, однако поскольку в нашем случае какие либо итоги в отчете не нужны, мы использовали эту возможность для создания группировок по иерархии справочника "Номенклатура".

Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр "Цены". [193]

Добавим в него еще одно значение для услуги "Диагностика" новая цена услуги на 01.04.2004 (это позволит нам протестировать отчет):



Теперь выполним отчет "Перечень услуг" по состоянию на 31.03.2004:



Наш отчет правильно отражает цену услуги "Диагностика" на 31.04 – 200pyб. [194]

Еще раз выполним отчет, но теперь уже на другую дату 01.04.2004:



Как видите, показана новая цена услуги "Диагностика" – 350 руб.

Таким образом, на примере этого отчета мы показали, как при помощи запроса можно получить последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника. [195]


Содержание раздела