Для работы с запросами используется объект встроенного языка Запрос . Он позволяет получать информацию, хранящуюся в полях базы данных, в виде выборки, сформированной по заданным правилам .

Исходную информацию запрос получает из набора таблиц. Эти таблицы представляют данные реальных таблиц базы данных в удобном для анализа виде. Их можно разделить на две большие группы: реальные и виртуальные .

Реальные таблицы, в свою очередь, могут быть объектными (ссылочными) или не объектными (не ссылочными), рис. 97.

Рис. 97. Таблицы запроса

Отличительной особенностью реальных таблиц является то, что они содержат данные какой-либо одной реальной таблицы, хранящейся в базе данных . Например, реальной является таблица Справочник.Клиенты, соответствующая справочнику Клиенты, или таблица РегистрНакопления.ОстаткиМатериалов, соответствующая регистру накопления ОстаткиМатериалов.

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

Иногда виртуальные таблицы могут формироваться и из одной реальной таблицы (например, виртуальная таблица Цены.СрезПоследних формируется на основе таблицы регистра сведений Цены). Однако общим для всех виртуальных таблиц является то, что им можно задать ряд параметров, определяющих какие данные будут включены в эти виртуальные таблицы. Набор таких параметров может быть различным для разных виртуальных таблиц, и определяется данными, хранящимися в исходных таблицах базы данных.

Реальные таблицы подразделяются на объектные (ссылочные) и не объектные (не ссылочные).

В объектных (ссылочных) таблицах представлена информация ссылочных типов данных (справочники, документы, планы видов характеристик и т. д.). А в не объектных (не ссылочных) – всех остальных типов данных (константы, регистры и т. д.).

Отличительной особенностью объектных (ссылочных) таблиц является то, что они включают в себя поле Ссылка, содержащее ссылку на текущую запись . Кроме этого для таких таблиц возможно получение пользовательского представления объекта . Эти таблицы могут быть иерархическими, и поля таких таблиц могут содержать вложенные таблицы (табличные части).

Алгоритм, по которому данные будут выбраны из исходных таблиц запроса, описывается в тексте запроса на специальном языке – языке запросов . Текст запроса состоит из нескольких частей:

· описание запроса;

· объединение запросов;

· упорядочивание результатов;

· АВТОУПОРЯДОЧИВАНИЕ;

· описание итогов.

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

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

Объединение запросов определяет, как будут объединены результаты выполнения нескольких запросов.

Упорядочивание результатов определяет условия упорядочивания строк результата запроса.

АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического упорядочивания строк результата запроса.

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

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

Система компоновки данных предназначена для создания произвольных отчетов в системе 1С:Предприятие 8.1 и состоит из нескольких основных частей.

Исходные данные для компоновки отчета содержит в себе схема компоновки данных – это наборы данных и методы работы с ними (рис. 98).

Разработчик создает схему компоновки данных, в которой описывает текст запроса, наборы данных, связи между ними, доступные поля, параметры получения данных и задает первоначальные настройки компоновки – структуру отчета, макет оформления данных и др.

Например, схема компоновки может содержать следующий набор данных (рис. 99).

Рис. 98. Общая схема работы с системой компоновки данных

Рис. 99. Пример схемы компоновки (набор данных и запрос, его использующий)

На рис. 99 показано окно конструктора схемы компоновки данных, в котором содержатся источник данных, текст запроса и поля, выбранные запросом.

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

Например, может быть задана такая структура отчета (рис. 100):

Рис. 100. Структура возможного отчета

Сформированный отчет может иметь следующий вид (рис. 101).

В представленном отчете таблица будет состоять из записей регистра накопления ПродажиОбороты о клиентах и оказанных им услугах. Эти записи сгруппированы по мастерам, которые выполняли заказы. А в группировке будет выведен список мастеров.

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

Алгоритм взаимодействия этих объектов выглядит следующим образом: разработчик создает схему компоновки данных и настройки по умолчанию. В общем случае на основе одной схемы компоновки данных может быть создано большое количество различных отчетов. Настройки компоновки данных – создаваемые разработчиком или изменяемые пользователем – определяют, какой именно отчет будет получен в конкретном случае.

Рис. 101. Пример отчета

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

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

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

Последовательность работы системы компоновки можно представить в виде следующей схемы (рис. 102):

Рис. 102. Схема работы системы компоновки

3.12.1. Создание отчета "Реестр документов Оказание услуги"

Отчет Реестр документов Оказание услуги будет выводить список существующих в базе данных документов ОказаниеУслуги в порядке их дат и номеров.

Отчет . Присвойте ему имя РеестрДокументовОказаниеУслуги . На закладке Основные нажмите кнопку "Готово ". В конструкторе схемы компоновки данных добавьте Набор данных – запрос Конструктор запроса ".

В качестве источника данных для запроса выберите объектную (ссылочную) таблицу документов ОказаниеУслуги . Из этой таблицы выберите следующие поля (рис. 103):

Дата; Номер; Склад; Мастер; Клиент.

Рис. 103. Выбранные поля

После этого перейдите на закладку Порядок и укажите, что результат запроса должен быть сначала упорядочен по значению поля Дата , а затем – по значению поля ОказаниеУслуги.Ссылка (рис. 104).

Рис. 104. Порядок вывода результата запроса

Нажмите кнопку "ОK " и посмотрите, какой запрос сформировал конструктор запроса.

Перейдите на закладку Настройки и добавьте новую группировку в структуру отчета (рис. 105).

Рис. 105. Командная панель закладки Настройки

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

Дата; Номер; Склад; Мастер; Клиент (рис. 106).

Рис. 106. Настройка структуры отчета

Реестр документов оказание услуги . Нажмите кнопку "Сформировать " и посмотрите на результат работы отчета (рис. 107).

Рис. 107. Отчет Реестр документов оказание услуги

Отчет . Назовите его РейтингУслуг . На закладке Основные нажмите кнопку "Открыть схему компоновки данных ". В открывшемся диалоговом окне конструктора макета нажмите кнопку "Готово ".

В конструкторе схемы компоновки данных создайте Набор данных – запрос (НаборДанных1) и нажмите кнопку "Конструктор запроса ".

Номенклатура и виртуальную таблицу регистра накопления Продажи.Обороты . Для того чтобы исключить неоднозначность имен в запросе, переименуйте таблицу Номенклатура в СпрНоменклатура (контекстное меню правой кнопки мыши – Переименовать таблицу).

Затем выберите из таблиц поля СпрНоменклатура.Ссылка и ПродажиОбороты.ВыручкаОборот (рис. 108).

Рис. 108. Выбранные поля

Перейдите на закладку Связи и обратите внимание, что конструктор уже создал связь между двумя выбранными таблицами – значение изменения регистра Номенклатура должно быть равно ссылке на элемент справочника Номенклатура.

Единственное, что необходимо сделать, это сбросить флаг Все у таблицы регистра и установить его у таблицы справочника СпрНоменклатура (рис. 109).

Установка флага Все у таблицы справочника будет означать, что из справочника будут выбраны все элементы и этим элементам будет поставлено в соответствие значение оборота выручки из регистра. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не оказывались в выбранном периоде, не будет указано ничего.

Рис. 109. Установка связей таблиц

Перейдите на закладку Условия и задайте условия выбора элементов из справочника Номенклатура (рис. 110). При задании условий выбора необходимо будет использовать параметры запроса. Первым условием должно быть то, что выбранный элемент не является группой (для этого следует переключиться в режим Произвольное условие – установить флаг Произвольное ). Затем в поле условие введите следующий текст:

СпрНоменклатура.ЭтоГруппа = ЛОЖЬ

Вторым условием должно быть то, что выбранный элемент является услугой (это – Простое условие ) (рис. 110).

Рис. 110. Условия выбора элементов

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

Перейдите на закладку Объединения/Псевдонимы и укажите, что представление элемента справочника будет иметь псевдоним Услуга , а поле регистра будет иметь псевдоним Выручка (рис. 111).

Рис. 111. Объединения/Псевдонимы

Перейдите на закладку Порядок и укажите, что результат запроса должен быть отсортирован по убыванию значения поля Выручка . Создание запроса закончено, нажмите кнопку "ОK ". Посмотрите текст запроса, сформированный конструктором.

Перейдите на закладку Ресурсы и нажмите кнопку ">> ", чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги. В вашем случае – это единственный ресурс Выручка (рис. 112).

Рис. 112. Ресурсы схемы компоновки данных

Перейдите на закладку Параметры (рис. 113).

Рис. 113. Параметры компоновки данных

На этой закладке вы увидите три параметра: НачалоПериода , КонецПериода и ВидНоменклатуры . Первым параметром передается начало периода расчета итогов, вторым – конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде.

Для параметра НачалоПериода задайте заголовок, который будет отображаться пользователю – Дата начала .

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

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

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

Нажмите кнопку "ОK ".

Вторая особенность заключается в том, что по умолчанию время в дате установлено 00:00:00. Поэтому, если пользователь задаст период отчета с 01.10.2009 по 31.10.2009, итоги регистра будут рассчитаны с начала дня 01.10.2009 00:00:00 по начало дня 31.10.2009 00:00:00. Таким образом, данные за 31 число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя. Для того чтобы исключить эту ситуацию, добавьте еще один параметр, в который пользователь будет вводить дату окончания. Значение параметра КонецПериода будет рассчитываться автоматически таким образом, чтобы оно указывало на конец дня даты, введенной пользователем. Поэтому для параметра КонецПериода установите флаг Ограничение доступности .

Рис. 114. Редактирование состава даты

С помощью кнопки командной панели добавьте новый параметр с именем ДатаОкончания (рис. 115).

Рис. 115. Добавление параметра ДатаОкончания

Для этого параметра платформа автоматически сформирует заголовок – Дата окончания . Оставьте его без изменений. Задайте тип значения параметра – Дата . При этом, как и для параметра НачалоПериода , укажите состав даты – Дата .

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

Перейдите к параметру КонецПериода . Для него система установила флаг ограничения доступности. Не снимайте его, поскольку значение этого параметра будет вычисляться на основании значения, установленного пользователем для параметра ДатаОкончания .

Чтобы задать формулу, по которой будет вычисляться значение параметра КонецПериода , воспользуйтесь языком выражений системы компоновки данных. Он содержит функцию КонецПериода() , которая позволяет получить дату, соответствующую концу какого-либо периода, например, указанного дня.

В ячейке Выражение задайте для параметра КонецПериода следующее выражение:

В результате перечисленных действий параметры компоновки будут иметь следующий вид (рис. 116):

Рис. 116. Параметры системы компоновки

И в заключение настройте параметр ВидНоменклатуры . Поскольку отчет должен отображать выручку, полученную только от реализации услуг, значение параметра ВидНоменклатуры пользователь изменять не должен. Оно должно быть задано непосредственно в схеме компоновки как . Флаг ограничения использования у параметра ВидНоменклатуры платформа установила по умолчанию, поэтому вам остается только указать нужное значение перечисления ВидыНоменклатуры в ячейке Значение , соответствующей параметру ВидНоменклатуры (рис. 117).

Рис. 117. Установка значения параметра ВидНоменклатуры

Перейдите к формированию структуры отчета. На закладке Настройки добавьте группировку и снова не указывайте поле группировки. На закладке Выбранные поля укажите поля Услуга и Выручка (рис. 118).

Затем перейдите на закладку Другие настройки и задайте заголовок отчета – РейтингУслуг (рис. 119).

Рис. 119. Установка заголовка отчета

Запустите 1С:Предприятие в режиме отладки.

Выберите отчет Рейтинг услуг , но перед тем, как нажать кнопку "Сформировать ", откройте Настройки и на закладке Параметры данных задайте период отчета с 01.03.2004 по 30.04.2004 (рис. 120). Если даты создания ваших документов отличаются от приведенных в примере, то период отчета следует задавать другим.

Рис. 120. Настройки отчета

Нажмите кнопку "OK " и сформируйте отчет. Результат будет выглядеть следующим образом (рис. 121):

Рис. 121. Результат выполнения отчета

Теперь измените дату окончания на 31.03.2004. Данные за 31 марта попадают в отчет (рис. 122).

Рис. 122. Результат выполнения отчета

3.12.3. Создание отчета "Выручка мастеров"

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

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

Добавьте Набор данных – запрос (НаборДанных1) и нажмите кнопку "Конструктор запроса ". Выберите виртуальную таблицу регистра накопления Продажи.Обороты .

Задайте один из параметров этой виртуальной таблицы – Периодичность . Для этого перейдите в поле Таблицы и нажмите кнопку "Параметры виртуальной таблицы " (рис. 123).

Рис. 123. Изменение параметров виртуальной таблицы

В открывшемся окне параметров задайте значение параметра Периодичность – День (рис. 124). Нажмем кнопку "OK ".

Рис. 124. Параметры виртуальной таблицы

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

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

· ПродажиОбороты.Период;

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

· ПродажиОбороты.ВыручкаОборот (рис. 125).

Рис. 125. Выбранные поля

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

Рис. 126. Объединения/Псевдонимы

На закладке Группировка определите, что группировка будет проводиться по полям Мастер , Период и Клиент , а значения поля ВыручкаОборот будут суммироваться (рис. 127).

Рис. 127. Поля группировок

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

Теперь перейдите к редактированию схемы компоновки данных. На закладке Ресурсы нажмите кнопку ">> " и убедитесь, что конструктор выбрал единственный имеющийся ресурс – Выручка .

На закладке Параметры выполните те же действия, что и при создании предыдущего отчета.

Для параметра НачалоПериода задайте заголовок Дата начала . В поле Доступные типы задайте состав даты – Дата .

Для параметра КонецПериода задайте выражение:

КонецПериода(&ДатаОкончания, "День")

В поле Ограничение доступности установите флаг ограничения доступности.

В заключение добавьте еще один параметр – ДатаОкончания , установите его тип как Дата , состав даты – Дата .

В результате перечисленных действий параметры компоновки данных будут иметь следующий вид (рис. 128):

Рис. 128. Параметры компоновки данных

Теперь необходимо создать структуру отчета. На закладке Настройки последовательно создайте две вложенные группировки: верхнего уровня – по полю Мастер , вложенная в нее – по полю Период . Затем добавьте еще одну группировку, вложенную в группировку по полю Период , – Детальные записи (без указания группировочного поля) (рис. 129).

Рис. 129. Структура отчета

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

В заключение, с уровня глобального отчета перейдите на закладку Другие настройки и измените следующие параметры. Для параметра установите значение Отдельно и только в итогах ; для параметра задайте значение Начало и для параметра Заголовок задайте значение Выручка мастеров (рис. 130).

Рис. 130. Установка вывода общих итогов в начало

Запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета Выручка мастеров за период с 01.03.2004 по 30.04.2004 (рис. 131).

Рис. 131. Результат выполнения отчета

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

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

Вам потребуется изменить настройку группировки Период . Для того чтобы перейти к настройкам именно этой группировки, в поле структуры установите курсор на эту группировку, а затем нажмите кнопку "Период " в командной панели (рис. 132).

Рис. 132. Настройки группировки Период

В нижней части формы будут отображены настройки, доступные для данной группировки.

Перейдите на закладку Поля группировки . Для поля Период установите Тип дополнения – День (рис. 133).

Рис. 133. Установка типа дополнения периода

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

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

Для того чтобы обеспечить именно такую работу отчета, войдите в режим редактирования первого поля (например, дважды кликнув на нем) и нажмите на кнопку очистки "Х ". После этого, нажав на кнопку "Т ", вы сможете выбрать тип данных, отображаемых в этом поле. Выберите Поле компоновки данных (рис. 134).

Рис. 134. Выбор типа данных

Нажмите кнопку "OK ". Теперь нажмите в поле ввода кнопку выбора "" и в открывшемся окне выбора поля отметьте параметр НачалоПериода (рис. 135). Нажмите кнопку "OK ".

Рис. 135. Выбор поля

Для второго поля ввода аналогичным образом укажите, что дата окончания периода будет получена из параметра ДатаОкончания (рис. 136).

Рис. 136. Настройки группировки Период

Запустите 1С:Предприятие в режиме отладки и выполните отчет Выручка мастеров за период с 20.03.2004 по 20.04.2004 (рис. 137).

Рис. 137. Результат выполнения отчета

3.12.4. Создание отчета "Перечень услуг"

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

Создайте новый объект конфигурации Отчет . Назовите его ПереченьУслуг и запустите конструктор схемы компоновки данных. Создайте новый Набор данных – запрос (НаборДанных1) и вызовите конструктор запроса.

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

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

Рис. 138. Параметры виртуальной таблицы

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

· СпрНоменклатура.Родитель;

· ЦеныСрезПоследних.Цена (рис. 139).

Рис. 139. Выбранные поля

Перейдите на закладку Связи , сбросьте флаг Все у таблицы регистра и установите его у таблицы справочника.

На закладке Условия задайте условие выбора элементов справочника Номенклатура – выбираемые элементы должны соответствовать виду номенклатуры, переданному в параметре запроса ВидНоменклатуры (рис. 140).

Рис. 140. Условия выбора элементов

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

Рис. 141. Объединения/Псевдонимы

Перейдите на закладку Группировка и укажите, что группировка будет производиться по полю СпрНоменклатура.Родитель . Значения суммируемых полей задавать не надо (рис. 142).

Рис.142. Поля группировки

Нажмите кнопку "OK ". Посмотрите текст запроса.

Перейдите к редактированию схемы компоновки данных. На закладке Ресурсы нажатием кнопки ">> " выберите единственный доступный ресурс Цена .

На закладке Параметры задайте значение параметра ВидНоменклатуры как Перечисление.ВидыНоменклатуры.Услуга . Кроме этого снимите ограничение доступности для параметра ДатаОтчета и задайте ему заголовок – Дата отчета . В поле Доступные типы задайте состав даты – Дата . Для параметра Период , наоборот, установите ограничение доступности (рис. 143).

Рис. 143. Параметры схемы компоновки

Перейдите к формированию структуры отчета. Перейдите на закладку Настройки и создайте группировку по полю ГруппаУслуг , указав тип группировки Иерархия . Внутри этой группировки создайте еще одну группировку без указания группового поля. Она будет содержать детальные записи отчета (рис. 144).

Рис. 144. Структура и выделенные поля отчета

Перейдите на закладку Выбранные поля и укажите, что в отчет будут выводиться поля Услуга и Цена (рис. 145).

Рис. 145. Структура отчета

И в заключение настройте внешний вид отчета на закладке Другие настройки . Так как отчет будет представлять собой просто список оказываемых услуг, в котором интересны цены на конкретные услуги, выводить значения ресурса Цена для каждой из группировок и для всего отчета в целом не имеет смысла.

Чтобы запретить вывод общих итогов в отчете, установите параметр Расположение общих итогов по вертикали в значение Нет .

Затем перейдите к настройкам конкретной группировки – ГруппаУслуг . Для параметра Расположение итогов этой группировки укажите значение Нет . Вернитесь к настройкам всего отчета в целом.

Для параметра Расположение полей группировок укажите значение Отдельно и только в итогах (так отчет будет лучше "читаться"). Напоследок задайте заголовок отчета – Перечень услуг .

Запустите 1С:Предприятие в режиме отладки и прежде всего откройте периодический регистр Цены .

Добавьте в него еще одно значение для услуги Диагностика : новая цена услуги на 01.04.2004 – 350 (рис. 146). Это позволит протестировать отчет.

Рис. 146. Записи регистра "Цены"

Теперь выполните отчет Перечень услуг по состоянию на 31.03.2004 (рис. 147).

Рис. 147. Результат выполнения отчета

Ваш отчет правильно отражает цену услуги Диагностика на 31.03.2004 – 200 руб.

Еще раз выполните отчет, но теперь уже на другую дату - 01.04.2004 (рис. 148).

Рис. 148. Результат выполнения отчета

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

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

Диаграмма является элементом управления, предназначенным для размещения в таблицах и формах диаграмм и графиков различного вида системы 1С:Предприятие .

Логически диаграмма является совокупностью точек, серий и значений серий в точке (рис. 149).

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

Например, диаграмма продаж видов номенклатуры по месяцам будет состоять из точек – месяцев, серий – видов номенклатуры и значений – оборотов продаж.

Диаграмма как объект встроенного языка имеет три области, которые позволяют управлять оформлением диаграммы: область построения, область заголовка и область легенды (рис. 150).

Диаграмма может быть вставлена в структуру отчета как отдельный элемент. При создании отчета Рейтинг клиентов диаграмма будет использоваться в структуре настроек схемы компоновки данных.

Рис. 149. Пример диаграммы

Рис. 150. Области диаграммы

Создайте в конфигураторе новый объект конфигурации Отчет . Назовите его РейтингКлиентов , откройте его основную схему компоновки данных.

Создайте набор данных – запрос (НаборДанных1) и вызовите конструктор запроса. Выберите виртуальную таблицу регистра накопления Продажи.Обороты и из нее одно поле – ПродажиОбороты.Клиент .

Затем добавьте новое поле (значок Добавить в командной панели над списком полей) и при помощи построителя выражений определите его как разность между выручкой и стоимостью (рис. 151).

Рис. 151. Редактор произвольного выражения поля

В результате список выбранных полей будет иметь следующий вид (рис. 152):

Рис. 152. Выбранные поля

На закладке Объединения/Псевдонимы укажите, что вычисляемое поле будет иметь псевдоним Доход (рис. 153).

Рис. 153. Объединения/Псевдонимы

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

Перейдите в закладку Ресурсы и добавьте поле Доход в ресурсы схемы компоновки. Затем перейдите на закладку Настройки для того, чтобы создать структуру отчета.

В отличие от всех предыдущих отчетов, структура которых содержала группировки, в этот раз добавьте в структуру отчета диаграмму (рис. 154).

Рис. 154. Структура отчета

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

Теперь перейдите на закладку Выбранные поля и выберите поле Доход для вывода в отчет. Структура отчета должна принять следующий вид (рис. 155):

Рис. 155. Структура отчета и настройки диаграммы

На закладке Другие настройки задайте заголовок отчета – Рейтинг клиентов , а также выберите тип диаграммы – Круговая объемная .

Запустите 1С:Предприятие в режиме отладки и откройте отчет Рейтинг клиентов (рис. 156).

Рис. 156. Круговая объемная диаграмма в отчете

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

Откройте настройки отчета и измените тип диаграммы на Измерительная . Заново сформируйте отчет (рис. 157).

    Наименование : Оборотные регистры накопления. Отчеты. Выбор данных из одной таблицы. Выбор данных из двух таблиц.

    Цель : Научится работать с регистрами сведений и перечислениями при работе в 1С 8.

    Подготовка к занятию :

      По указанной литературе изучить тему рассмотренную в данной технологической карте

    Литература :

4.1 Игнатов А.С. учебно – методическое пособие «1С программирование», 2014

4.2 Игнатов. А.С. конспект лекций по дисциплине «1С программирование» 2014.

    Перечень оборудования :

5.1 Персональный IBM PC.

5.2 1С версии 8.

    Задание :

6.1 Изучить порядок доступа к данным.

6.2 Изучить работу с запросами.

6.3 Изучить настройки в конфигураторе и в режиме 1С:Предприятие.

    Порядок выполнения работы:

7.1 Создать отчет Реестр документов.

7.3 Изменить параметры отчета.

8.1 Титульный лист

      Наименование и цель работы

      Выполненное задание

      Ответы на контрольные вопросы

      Вывод о проделанной работе

    Контрольные вопросы :

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

9.2 Каковы основные синтаксические конструкции языка запросов.

9.3 Что является источником данных запроса.

9.4 Что такое псевдонимы в языке запросов.

9.5 Что такое параметры запроса.

9.6 Для чего предназначен объект встроенного языка Запрос.

9.7 Для чего предназначена система компоновки данных.

9.8 Для чего предназначена схема компоновки данных.

9.9 Для чего предназначены настройки компоновки данных.

9.10 В чем отличие между реальными и виртуальными таблицами.

Приложение:

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Способы доступа к данным

Система 1С:Предприятие 8 поддерживает два способа доступа к данным, хранящимся в базе данных:

    объектный (для чтения и записи),

    табличный (для чтения).

Объектный способ доступа к данным реализован посредством использования объектов встроенного языка. Важной особенностью объектного способа доступа к данным является то, что, обращаясь к какому-либо объекту встроенного языка, мы обращаемся к некоторой совокупности данных, находя­щихся в базе данных, как к единому целому. Объектная техника обеспечивает сохранение целостности объектов, кеширование объектов, вызов соответствующих обработчиков событий и т. д. Табличный доступ к данным в 1С: Предприятии 8 реализован с помощью запросов к базе данных, которые составляются на языке запросов. В этой технике разработчик получает возможность оперировать отдельными полями таблиц базы данных, в которых хранятся те или иные данные. Табличная техника предназначена для получения информации из базы данных по некоторым условиям (отбор, группировка, сорти­ровка, объединение нескольких выборок, расчет итогов и т.д.). Табличная техника оптимизирована для обработки больших объемов информации, расположенной в базе данных, и получения данных, отвечающих заданным критериям.

ПРАКТИЧЕСКАЯ ЧАСТЬ

Выбор данных из одной таблицы

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

    В режиме Конфигуратор

Добавим в конфигураторе объект конфигурации Отчет.

На закладке Основные : имя отчета – РеестрДокументовОказаниеУслуги; расширенное представление - Список оказан­ных услуг для представления отчета в интерфейсе программы. Создадим схему компоновки данных для отчета, нажмем кнопку Открыть схему компоновки данных. В открывшемся диалоговом окне конструктора макета нажмем Готово. В конструкторе схемы компоновки данных создадим Набор данных – запрос.

Рис. 13.1. Проведение приходной накладной по двум регистрам

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

На закладке Объединения/Псевдонимы укажем, что поле Ссылка будет иметь псевдоним Документ . На закладке Порядок укажем, что результат запроса должен быть упорядочен по значению поля Документ .

На закладке Настройки создадим стандартные настройки, определяющие, как будет выводиться информация в отчет.

Иерархическая структура отчета может содержать в различных соче­таниях три основных элемента:

    Группировка - для вывода информации в виде обычного линей­ного отчета.

    Таблица - для вывода информации в виде таблицы.

    Диаграмма - для вывода информации в виде диаграммы.

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

    Документ,

В результате окно настроек отчета должно иметь вид. На этом создание отчета закончено.

Рис. 13.2. Создание отчета

    В окне редак­тирования объекта конфигурации Отчет РеестрДокументовОказаниеУслуги перейдем на закладку Подсистемы.

Отметим в списке подсистему Оказание услуг.

    В режиме 1С: Предприятие

Запустим 1С: Предприятие в режиме отладки.

В открывшемся окне 1С: Предприятия можно наблюдать, что в панели действий раздела Оказание услуг в группе команд для выполнения отчетов появилась команда для формирования отчета Реестр документов оказание услуги. Причем если подвести к ней мышь, то появится всплывающая подсказка Список оказанных услуг, которая определяется свойством Расширенное представление.

    Выполним команду Реестр доку­ментов оказание услуги.

Перед нами откроется форма отчета, автоматически сформированная системой.

    Нажмем кнопку Сформировать.

Рис. 13.3. Форма отчета, автоматически сформированная системой

Перед вам появится отчет содержащий реестр документов Оказание услуги.

Двойным щелчком мыши на поле Документ можно открыть исходный документ, а также выполнить другие действия «расшифровки», которые предоставляет система компоновки данных.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Создание отчетов

Работа с запросами

Для работы с запросами используется объект встроенного языка Запрос . Он позволяет получать информацию, хранящуюся в полях базы данных, в виде выборки, сформированной по заданным правилам.

Источники данных запросов

Исходную информацию запрос получает из набора таблиц. Эти таблицы представляют данные реальных таблиц базы данных в удобном для анализа виде. Их можно разделить на две большие группы: реальные и виртуальные.

Реальные таблицы, в свою очередь, могут быть объектными (ссылочными) или не объектными (не ссылочными):

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

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

Реальные таблицы подразделяются на объектные (ссылочные) и не объектные (не ссылочные).

В объектных (ссылочных) таблицах представлена информация ссылочных типов данных (справочники, документы, планы видов характеристик и т.д.). А в не объектных (не ссылочных) - всех остальных типов данных (константы, регистры и т.д.).

Отличительной особенностью объектных (ссылочных) таблиц является то, что они содержат поле «Ссылка», содержащее ссылку на текущую запись. Кроме этого для таких таблиц возможно получение пользовательского представления объекта, эти таблицы могут быть иерархическими и поля таких таблиц могут содержать вложенные таблицы (табличные части).

Язык запросов

Алгоритм, по которому данные будут выбраны из исходных таблиц запроса, описывается в тексте запроса на специальном языке - языке запросов. Текст запроса состоит из нескольких частей:

    описание запроса,

    объединение запросов,

    упорядочивание результатов,

    автоупорядочивание,

    описание итогов.

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

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

Объединение запросов определяет, как будут объединены результаты выполнения нескольких запросов.

Упорядочивание результатов определяет условия упорядочивания строк результата запроса.

Автоупорядочивание позволяет включить режим автоматического упорядочивания строк результата запроса.

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

Отчет РеестрДокументовОказаниеУслуги

Первым отчетом, на основе которого мы начнем знакомиться с языком запросов, будет отчет «РеестрДокументовОказаниеУслуги». Этот отчет просто будет выводить список существующих в базе данных документов «ОказаниеУслуги» в порядке их дат и номеров.

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

В качестве источника данных для запроса выберем объектную (ссылочную) таблицу документов «ОказаниеУслуги». Из этой таблицы выберем следующие поля:

  • «Мастер»,

    «Клиент»:

Обратите внимание, что при выборе полей «Склад», «Мастер» и «Клиент» в список выбранных полей подбираются также поля «Склад.Представление», «Мастер.Представление» и «Клиент.Представление». Дело в том, что в общем случае подразумевается, что эти поля будут выводиться в ячейки табличного документа. Поскольку соответствующие поля «Склад», «Мастер» и «Клиент» являются ссылочными, то в случае, если в качестве значения параметра для вывода будет передано значение-ссылка, система будет выполнять дополнительный запрос для получения представления этого поля (которое и будет выведено в документ), в результате чего вывод отчета замедлится. Поэтому система, при выборе ссылочных полей, предлагает сразу же включить в список выбранных полей и представления ссылочных полей, в расчете на то, что именно они и будут использованы для вывода в документ.

После этого перейдем на закладку «Порядок» и укажем, что результат запроса должен быть сначала упорядочен по значению поля «Дата», а затем - по значению поля «ОказаниеУслуги.Ссылка»:

Перейдем на закладку «Отчет» и сбросим флаг «Использовать построитель отчета»:

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

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

Запрос.Текст = “ВЫБРАТЬ

ОказаниеУслуги.Дата КАК Дата,

ОказаниеУслуги.Номер КАК Номер,

ОказаниеУслуги.Склад,

ОказаниеУслуги.Склад.Представление,

ОказаниеУслуги.Мастер,

ОказаниеУслуги.Мастер.Представление,

ОказаниеУслуги.Клиент,

ОказаниеУслуги.Клиент.Представление

Документ.ОказаниеУслуги КАК ОказаниеУслуги

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

Текст запроса начинается, как мы говорили выше, с части описания запроса:

I ОказаниеУслуги.Дата КАК Дата,

I ОказаниеУслуги.Номер КАК Номер,

I ОказаниеУслуги.Склад,

I ОказаниеУслуги.Склад.Представление,

I ОказаниеУслуги.Мастер,

I ОказаниеУслуги.Мастер.Представление,

I ОказаниеУслуги.Клиент,

1 ОказаниеУслуги.Клиеит.Представление

I Документ.ОказаниеУслуги КАК ОказаниеУслуги

Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ. Затем следует список полей выборки, в котором описываются поля, которые должны содержаться в результате запроса. Этот список может содержать как собственно поля, так и некоторые выражения, вычисляемые на основе значений полей.

После ключевого слова ИЗ указываются источники данных - исходные таблицы запроса, содержимое которых обрабатывается в запросе. В данном случае это объектная (ссылочная) таблица «Документ.ОказаниеУслуги». После ключевого слова КАК указывается псевдоним источника данных. В нашем случае это «ОказаниеУслуги». В дальнейшем к этому источнику данных можно будет обращаться в тексте запроса, используя псевдоним.

Такое обращение мы видим в описании полей выборки:

| ОказаниеУслуги.Дата КАК Дата,

| ОказаниеУслуги.Номер КАК Номер,

| ОказаниеУслуги.Склад,

| ОказаниеУслуги.Склад.Представление,

| ОказаниеУслуги.Мастер,

| ОказаниеУслуги.Мастер.Представление,

| ОказаниеУслуги.Клиент,

| ОказаниеУслуги.Клиент.Представление

Поля выборки также могут иметь псевдонимы, по которым в дальнейшем в тексте запроса можно обращаться к этому полю. В нашем случае это псевдонимы «Дата» и «Номер».

После части описания запроса в нашем примере следует часть упорядочивания результатов:

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

| Дата, | Номер";

Предложение УПОРЯДОЧИТЬ ПО позволяет сортировать строки в результате запроса. После этого ключевого предложения располагается выражение упорядочивания, которое, в общем случае, представляет собой перечисление полей (выражений) и порядка вывода. В нашем случае упорядочивание будет выполняться сначала По полю выборки, обращение к которому выполняется через псевдоним - «Код», а затем по полю - «Номер». В обоих случаях порядок сортировки будет по возрастанию, который является Порядком сортировки по-умолчанию.

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

Процедура РеестрДокументовОказаниеУслуги(ТабДок) Экспорт

//{{КОНСТРУКТОР_ВЫХОДНЬК_ФОРМ(РеестрДокументовОказаниеУслугн) // Данный фрагмент построен конструктором. // При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!!

Макет = ПолучитьМакет("РеестрДокументовОказаниеУслуги"); Запрос = Новый Запрос;

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

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

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

ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогрутшировкуСтрок();

ВыборкаДетали = Результат.Выбрать();

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

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

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

/Л}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ КонецПроцедуры

В форме отчета расположен элемент управления ПолеТабличногоДокумента с именем «ТабДок», который заполняется данными на основе макета, сформированного конструктором.

В начале процедуры мы получаем макет отчета, из которого затем получаем существующие в нем области в соответствующие переменные:

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

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

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

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

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

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

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

ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок();

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

После этого мы получаем выборку из результата запроса, которую перебираем в цикле:

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

В заключение процедуры, мы выводим в табличный документ завершающие области макета:

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

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

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

Теперь запустим 1С:Предприятие в режиме отладки и посмотрим на результат работы нашего отчета:

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

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

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

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

Затем установим курсор на таблицу «ПродажиОбороты» и вызовем диалог ввода параметров виртуальной таблицы:

Откроем диалог ввода параметров виртуальной таблицы

Укажем, что начало и конец периода будут переданы в соответствующих параметрах «ДатаНачала» и «ДатаОкончания» (символ «&» перед именем указывает, что это параметр запроса):

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

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

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

Перейдем на закладку «Связи» и увидим, что конструктор уже создал связь между двумя выбранными таблицами - значение изменения регистра «Номенклатура» должно быть равно ссылке на элемент справочника «Номенклатура».

Единственное, что нам останется сделать, это сбросить флаг «Все» у таблицы регистра и установить его у таблицы справочника.

Будем выбирать все элементы из справочника «Номенклатура»

Установка флага «Все» у таблицы справочника будет означать, что из справочника будут выбраны все элементы и этим элементам будет поставлено в соответствие значение оборота выручки из регистра. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не оказывались в выбранном периоде, не будет указано ничего.

Перейдем на закладку «Условия» и зададим условия выбора элементов из справочника «Номенклатура». При задании условий выбора мы снова будем использовать параметры запроса. Первым условием должно быть то, что выбранный элемент не является группой (для этого следует переключиться в режим «Произвольное условие»).

Вторым условием должно быть то, что выбранный элемент является услугой (это - «Простое условие»):

В дальнейшем, перед выполнением запроса, мы передадим в параметр «ВидНоменклатуры» - соответствующее значение перечисления.

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

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

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

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

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

Нажмем «ОК». Платформа сформирует макет и форму отчета Откроем модуль формы и найдем в нем процедуру «РейтингУслуг».

В этой процедуре, в той части, где выполняется установка параметров запроса, определим значение параметра «ВидНоменклатуры» (исправления выделены жирным шрифтом):

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи,Обороты(&ДатаНачала,

| &ДатаОкончания,)

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

|УПОРЯДОЧИТЬ ПО | ВыручкаУБЫВ

|ИТОГИ СУММА(Выручка) ПО | ОБЩИЕ";

ЗапросУстановитьПараметрС"ВидНоменклатуры",

Перечисления.ВидыНоменклатуры.Услуга);

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

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

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

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

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

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала,

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

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

| (СпрНоменклатура.ЭтоГруппа = Ложь) И

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

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

| ВыручкаУБЫВ

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

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

При описании источников запроса (после ключевого слова ИЗ), использована возможность определения нескольких источников запроса:

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

|&ДатаОкончания,)

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

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

В данном случае выбираются записи из двух источников: «СпрНоменклатура» и «ПродажиОбороты», причем ключевым предложением ЛЕВОЕ СОЕДИНЕНИЕ ... ПО описан способ, которым будут скомбинированы между собой записи этих двух источников.

ЛЕВОЕ СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обоих источников, которые соответствуют указанному после ключевого слова ПО условию. Кроме этого, в результат запроса надо включить еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника.

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

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

Первым параметром передается начало периода расчета итогов, вторым - конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде. Здесь всегда следует помнить, что если мы передаем в качестве этих параметров дату (а в нашем случае так и будет), то дата содержит и время с точностью до секунды.

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

Для того чтобы исключить эту ситуацию, следует сделать две вещи.

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

Определим состав даты...

Во-вторых, при передаче параметров использовать встроенную функцию КонецДня(). Для этого вернемся в модуль формы отчета и внесем необходимые изменения (добавления выделены жирным шрифтом):

ПроцедураДействияФормыРейтингУслугСформировать(Кнопка) //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА(РейтингУслуг) //Данный фрагмент построен конструктором. // При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!!

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

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

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

Продолжим рассматривать текст запроса. В части описания запроса есть еще одна новая для нас конструкция - задание условий отбора данных из исходных таблиц:

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

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

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

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала,

| &ДатаОкончания,

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

| ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссьшка

| СпрНоменклатура.ЭтоГруппа = Ложь И

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

Условию отбора всегда предшествует ключевое слово ГДЕ. После него описывается само условие. Обратите внимание, что поля исходных таблиц, на которые накладывается условие, могут и не входить в список выборки (как в нашем случае). Кроме того, в нашем условии использован параметр запроса «ВидНоменклатуры».

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

Она всегда начинается с ключевого слова ИТОГИ, за которым следует описание того, какие итоги будут присутствовать в результате запроса. Сразу после слова ИТОГИ описываются агрегатные функции, которые необходимо рассчитывать в итогах. В нашем случае будет рассчитываться сумма по полю «Выручка». Затем следует ключевое слово ПО, после которого описываются группировки, в которых должны быть рассчитаны итоги. В нашем случае они отсутствуют, и используется только ключевое слово ОБЩИЕ, которое указывает на то, что итоги будут рассчитаны по всей таблице в целом.

Теперь, когда мы закончили знакомиться с текстом запроса, запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш отчет.

Зададим период отчета с 01.03.2004 по 30.04.2004. Результат будет выглядеть следующим образом:

Теперь изменим дату окончания на 31.03.2004 и убедимся, что данные за 31 марта попадают в отчет:

Basic , что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.

Вот лишь некоторые, наиболее значимые особенности встроенного языка:

  • предварительная компиляция; перед исполнением модули, содержащие текст на встроенном языке, преобразуются во внутренний код;
  • кэширование скомпилированных модулей в памяти;
  • мягкая типизация - тип переменной определяется типом значения, которое она содержит, и может изменяться в процессе работы;
  • отсутствие программного описания объектов конфигурации; разработчик может использовать либо встроенные в платформу объекты, либо объекты, созданные системой в результате визуального конструирования прикладного решения.

Событийная ориентированность встроенного языка. Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8.0 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования - создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.

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

Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью. Это событие возникает непосредственно перед тем, как данные элемента справочника должны быть записаны в базу данных. Разработчик, используя встроенный язык, может описать алгоритм , который, например, будет проверять корректность данных, введенных пользователем. Разместив этот алгоритм в соответствующем модуле, разработчик обеспечит то, что каждый раз, как пользователь будет выполнять запись элемента справочника, система будет выполнять созданный разработчиком алгоритм и проверять, не забыл ли пользователь заполнить обязательные реквизиты справочника.

Таким образом можно сказать, что встроенный язык является скриптовым языком для программирования бизнес-логики, а использование модулей на встроенном языке является событийно-зависимым, т.е. выполнение модулей происходит при возникновении определенных событий в процессе функционирования прикладного решения.

Предопределенные типы данных

Платформа 1С:Предприятия 8.0 позволяет разработчику использовать различные типы данных.

Существует большое количество типов данных, которые определены на уровне самой платформы. Например, это примитивные типы данных , такие как строка, число, дата и пр.


Описание примитивных типов данных :

  • NULL - отсутствующее значение. Используется, например, в запросах.
  • Неопределено - пустое, неопределенное значение. Используется, например, при оценке передачи параметров, в том случае, если при вызове процедуры или функции данный параметр опущен. Реквизиты, имеющие составной тип данных, по умолчанию имеют тип "Неопределено".
  • Булево - содержит два значения: Истина или Ложь. Используется, например, в логических выражениях - логическое выражение имеет тип "Булево".
  • Дата - содержит дату и время. По умолчанию имеет значение - 01.01.01 00:00:00 дата начала нашей эры. Время измеряется от начала дня. Запись выражения, имеющего литерал типа "дата", осуществляется следующим образом - "00010101000000". Сначала записывается год, потом месяц, потом число и потом время. Возможна следующая запись: "20041031". Время по умолчанию - начало дня.
  • Строка - бывает переменной, фиксированной и неограниченной длины. В общем случае рекомендуется использовать строки переменной длины.
  • Число - увеличена разрядность числа до 38 разрядов.
  • Тип - служит для определения типов значений. Используется, например, для сравнения типов данных. Не имеет литералов и возвращается функциями Тип(<Имя типа>) или ТипЗнч(<Значение>).

Также, существуют более сложные типы данных . Например, платформа поддерживает целый ряд типов, которые представляют собой универсальные коллекции значений: массив , структура, список значений, дерево значений и т.д.


Типы данных "Универсальные коллекции" - список (набор) объектов данных любых типов, к значениям которого можно обратиться перебором или по указанному индексу (ключу). Нумерация элементов коллекций начинается с 0. Все указанные типы данных создаются только программно.

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

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

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

Список значений . Используется, как правило, для решения интерфейсных задач. Позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может содержать значения любого типа, кроме того, в одном списке типы хранимых значений могут быть разными.

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

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

COMSafeArray . Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из

Процедура ВыбратьИзФайлаНажатие(Элемент) // Выбор файла с просмотром ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Каталог = ""; ДиалогВыбораФайла.ПредварительныйПросмотр = Истина; ДиалогВыбораФайла.ИндексФильтра = 0; Если ДиалогВыбораФайла.Выбрать() Тогда Файл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); Картинка = Новый ХранилищеЗначения(Новый Картинка(ДиалогВыбораФайла.ПолноеИмяФайла)); ОтобразитьКартинку(); КонецЕсли; КонецПроцедуры

Для работы с запросами используется объект встроенного языка Запрос . Он позволяет получать информацию, хранящуюся в полях базы данных, в виде выборки, сформированной по заданным правилам .

Исходную информацию запрос получает из набора таблиц. Эти таблицы представляют данные реальных таблиц базы данных в удобном для анализа виде. Их можно разделить на две большие группы: реальные и виртуальные .

Реальные таблицы, в свою очередь, могут быть объектными (ссылочными) или не объектными (не ссылочными), рис. 97.

Рис. 97. Таблицы запроса

Отличительной особенностью реальных таблиц является то, что они содержат данные какой-либо одной реальной таблицы, хранящейся в базе данных . Например, реальной является таблица Справочник.Клиенты, соответствующая справочнику Клиенты, или таблица РегистрНакопления.ОстаткиМатериалов, соответствующая регистру накопления ОстаткиМатериалов.

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

Иногда виртуальные таблицы могут формироваться и из одной реальной таблицы (например, виртуальная таблица Цены.СрезПоследних формируется на основе таблицы регистра сведений Цены). Однако общим для всех виртуальных таблиц является то, что им можно задать ряд параметров, определяющих какие данные будут включены в эти виртуальные таблицы. Набор таких параметров может быть различным для разных виртуальных таблиц, и определяется данными, хранящимися в исходных таблицах базы данных.

Реальные таблицы подразделяются на объектные (ссылочные) и не объектные (не ссылочные).

В объектных (ссылочных) таблицах представлена информация ссылочных типов данных (справочники, документы, планы видов характеристик и т. д.). А в не объектных (не ссылочных) – всех остальных типов данных (константы, регистры и т. д.).

Отличительной особенностью объектных (ссылочных) таблиц является то, что они включают в себя поле Ссылка, содержащее ссылку на текущую запись . Кроме этого для таких таблиц возможно получение пользовательского представления объекта . Эти таблицы могут быть иерархическими, и поля таких таблиц могут содержать вложенные таблицы (табличные части).

Алгоритм, по которому данные будут выбраны из исходных таблиц запроса, описывается в тексте запроса на специальном языке – языке запросов . Текст запроса состоит из нескольких частей:

· описание запроса;

· объединение запросов;

· упорядочивание результатов;

· АВТОУПОРЯДОЧИВАНИЕ;

· описание итогов.

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

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

Объединение запросов определяет, как будут объединены результаты выполнения нескольких запросов.

Упорядочивание результатов определяет условия упорядочивания строк результата запроса.

АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического упорядочивания строк результата запроса.

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

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

Система компоновки данных предназначена для создания произвольных отчетов в системе 1С:Предприятие 8.1 и состоит из нескольких основных частей.

Исходные данные для компоновки отчета содержит в себе схема компоновки данных – это наборы данных и методы работы с ними (рис. 98).

Разработчик создает схему компоновки данных, в которой описывает текст запроса, наборы данных, связи между ними, доступные поля, параметры получения данных и задает первоначальные настройки компоновки – структуру отчета, макет оформления данных и др.

Например, схема компоновки может содержать следующий набор данных (рис. 99).

Рис. 98. Общая схема работы с системой компоновки данных

Рис. 99. Пример схемы компоновки (набор данных и запрос, его использующий)

На рис. 99 показано окно конструктора схемы компоновки данных, в котором содержатся источник данных, текст запроса и поля, выбранные запросом.

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

Например, может быть задана такая структура отчета (рис. 100):

Рис. 100. Структура возможного отчета

Сформированный отчет может иметь следующий вид (рис. 101).

В представленном отчете таблица будет состоять из записей регистра накопления ПродажиОбороты о клиентах и оказанных им услугах. Эти записи сгруппированы по мастерам, которые выполняли заказы. А в группировке будет выведен список мастеров.

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

Алгоритм взаимодействия этих объектов выглядит следующим образом: разработчик создает схему компоновки данных и настройки по умолчанию. В общем случае на основе одной схемы компоновки данных может быть создано большое количество различных отчетов. Настройки компоновки данных – создаваемые разработчиком или изменяемые пользователем – определяют, какой именно отчет будет получен в конкретном случае.

Рис. 101. Пример отчета

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

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

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

Последовательность работы системы компоновки можно представить в виде следующей схемы (рис. 102):

Рис. 102. Схема работы системы компоновки

3.12.1. Создание отчета "Реестр документов Оказание услуги"

Отчет Реестр документов Оказание услуги будет выводить список существующих в базе данных документов ОказаниеУслуги в порядке их дат и номеров.

Отчет . Присвойте ему имя РеестрДокументовОказаниеУслуги . На закладке Основные нажмите кнопку "Готово ". В конструкторе схемы компоновки данных добавьте Набор данных – запрос Конструктор запроса ".

В качестве источника данных для запроса выберите объектную (ссылочную) таблицу документов ОказаниеУслуги . Из этой таблицы выберите следующие поля (рис. 103):

Дата; Номер; Склад; Мастер; Клиент.

Рис. 103. Выбранные поля

После этого перейдите на закладку Порядок и укажите, что результат запроса должен быть сначала упорядочен по значению поля Дата , а затем – по значению поля ОказаниеУслуги.Ссылка (рис. 104).

Рис. 104. Порядок вывода результата запроса

Нажмите кнопку "ОK " и посмотрите, какой запрос сформировал конструктор запроса.

Перейдите на закладку Настройки и добавьте новую группировку в структуру отчета (рис. 105).

Рис. 105. Командная панель закладки Настройки

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

Дата; Номер; Склад; Мастер; Клиент (рис. 106).

Рис. 106. Настройка структуры отчета

Реестр документов оказание услуги . Нажмите кнопку "Сформировать " и посмотрите на результат работы отчета (рис. 107).

Рис. 107. Отчет Реестр документов оказание услуги

Отчет . Назовите его РейтингУслуг . На закладке Основные нажмите кнопку "Открыть схему компоновки данных ". В открывшемся диалоговом окне конструктора макета нажмите кнопку "Готово ".

В конструкторе схемы компоновки данных создайте Набор данных – запрос (НаборДанных1) и нажмите кнопку "Конструктор запроса ".

Номенклатура и виртуальную таблицу регистра накопления Продажи.Обороты . Для того чтобы исключить неоднозначность имен в запросе, переименуйте таблицу Номенклатура в СпрНоменклатура (контекстное меню правой кнопки мыши – Переименовать таблицу).

Затем выберите из таблиц поля СпрНоменклатура.Ссылка и ПродажиОбороты.ВыручкаОборот (рис. 108).

Рис. 108. Выбранные поля

Перейдите на закладку Связи и обратите внимание, что конструктор уже создал связь между двумя выбранными таблицами – значение изменения регистра Номенклатура должно быть равно ссылке на элемент справочника Номенклатура.

Единственное, что необходимо сделать, это сбросить флаг Все у таблицы регистра и установить его у таблицы справочника СпрНоменклатура (рис. 109).

Установка флага Все у таблицы справочника будет означать, что из справочника будут выбраны все элементы и этим элементам будет поставлено в соответствие значение оборота выручки из регистра. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не оказывались в выбранном периоде, не будет указано ничего.

Рис. 109. Установка связей таблиц

Перейдите на закладку Условия и задайте условия выбора элементов из справочника Номенклатура (рис. 110). При задании условий выбора необходимо будет использовать параметры запроса. Первым условием должно быть то, что выбранный элемент не является группой (для этого следует переключиться в режим Произвольное условие – установить флаг Произвольное ). Затем в поле условие введите следующий текст:

СпрНоменклатура.ЭтоГруппа = ЛОЖЬ

Вторым условием должно быть то, что выбранный элемент является услугой (это – Простое условие ) (рис. 110).

Рис. 110. Условия выбора элементов

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

Перейдите на закладку Объединения/Псевдонимы и укажите, что представление элемента справочника будет иметь псевдоним Услуга , а поле регистра будет иметь псевдоним Выручка (рис. 111).

Рис. 111. Объединения/Псевдонимы

Перейдите на закладку Порядок и укажите, что результат запроса должен быть отсортирован по убыванию значения поля Выручка . Создание запроса закончено, нажмите кнопку "ОK ". Посмотрите текст запроса, сформированный конструктором.

Перейдите на закладку Ресурсы и нажмите кнопку ">> ", чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги. В вашем случае – это единственный ресурс Выручка (рис. 112).

Рис. 112. Ресурсы схемы компоновки данных

Перейдите на закладку Параметры (рис. 113).

Рис. 113. Параметры компоновки данных

На этой закладке вы увидите три параметра: НачалоПериода , КонецПериода и ВидНоменклатуры . Первым параметром передается начало периода расчета итогов, вторым – конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде.

Для параметра НачалоПериода задайте заголовок, который будет отображаться пользователю – Дата начала .

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

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

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

Нажмите кнопку "ОK ".

Вторая особенность заключается в том, что по умолчанию время в дате установлено 00:00:00. Поэтому, если пользователь задаст период отчета с 01.10.2009 по 31.10.2009, итоги регистра будут рассчитаны с начала дня 01.10.2009 00:00:00 по начало дня 31.10.2009 00:00:00. Таким образом, данные за 31 число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя. Для того чтобы исключить эту ситуацию, добавьте еще один параметр, в который пользователь будет вводить дату окончания. Значение параметра КонецПериода будет рассчитываться автоматически таким образом, чтобы оно указывало на конец дня даты, введенной пользователем. Поэтому для параметра КонецПериода установите флаг Ограничение доступности .

Рис. 114. Редактирование состава даты

С помощью кнопки командной панели добавьте новый параметр с именем ДатаОкончания (рис. 115).

Рис. 115. Добавление параметра ДатаОкончания

Для этого параметра платформа автоматически сформирует заголовок – Дата окончания . Оставьте его без изменений. Задайте тип значения параметра – Дата . При этом, как и для параметра НачалоПериода , укажите состав даты – Дата .

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

Перейдите к параметру КонецПериода . Для него система установила флаг ограничения доступности. Не снимайте его, поскольку значение этого параметра будет вычисляться на основании значения, установленного пользователем для параметра ДатаОкончания .

Чтобы задать формулу, по которой будет вычисляться значение параметра КонецПериода , воспользуйтесь языком выражений системы компоновки данных. Он содержит функцию КонецПериода() , которая позволяет получить дату, соответствующую концу какого-либо периода, например, указанного дня.

В ячейке Выражение задайте для параметра КонецПериода следующее выражение:

В результате перечисленных действий параметры компоновки будут иметь следующий вид (рис. 116):

Рис. 116. Параметры системы компоновки

И в заключение настройте параметр ВидНоменклатуры . Поскольку отчет должен отображать выручку, полученную только от реализации услуг, значение параметра ВидНоменклатуры пользователь изменять не должен. Оно должно быть задано непосредственно в схеме компоновки как . Флаг ограничения использования у параметра ВидНоменклатуры платформа установила по умолчанию, поэтому вам остается только указать нужное значение перечисления ВидыНоменклатуры в ячейке Значение , соответствующей параметру ВидНоменклатуры (рис. 117).

Рис. 117. Установка значения параметра ВидНоменклатуры

Перейдите к формированию структуры отчета. На закладке Настройки добавьте группировку и снова не указывайте поле группировки. На закладке Выбранные поля укажите поля Услуга и Выручка (рис. 118).

Затем перейдите на закладку Другие настройки и задайте заголовок отчета – РейтингУслуг (рис. 119).

Рис. 119. Установка заголовка отчета

Запустите 1С:Предприятие в режиме отладки.

Выберите отчет Рейтинг услуг , но перед тем, как нажать кнопку "Сформировать ", откройте Настройки и на закладке Параметры данных задайте период отчета с 01.03.2004 по 30.04.2004 (рис. 120). Если даты создания ваших документов отличаются от приведенных в примере, то период отчета следует задавать другим.

Рис. 120. Настройки отчета

Нажмите кнопку "OK " и сформируйте отчет. Результат будет выглядеть следующим образом (рис. 121):

Рис. 121. Результат выполнения отчета

Теперь измените дату окончания на 31.03.2004. Данные за 31 марта попадают в отчет (рис. 122).

Рис. 122. Результат выполнения отчета

3.12.3. Создание отчета "Выручка мастеров"

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

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

Добавьте Набор данных – запрос (НаборДанных1) и нажмите кнопку "Конструктор запроса ". Выберите виртуальную таблицу регистра накопления Продажи.Обороты .

Задайте один из параметров этой виртуальной таблицы – Периодичность . Для этого перейдите в поле Таблицы и нажмите кнопку "" (рис. 123).

Рис. 123. Изменение параметров виртуальной таблицы

В открывшемся окне параметров задайте значение параметра Периодичность – День (рис. 124). Нажмем кнопку "OK ".

Рис. 124. Параметры виртуальной таблицы

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

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

· ПродажиОбороты.Период;

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

· ПродажиОбороты.ВыручкаОборот (рис. 125).

Рис. 125. Выбранные поля

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

Рис. 126. Объединения/Псевдонимы

На закладке Группировка определите, что группировка будет проводиться по полям Мастер , Период и Клиент , а значения поля ВыручкаОборот будут суммироваться (рис. 127).

Рис. 127. Поля группировок

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

Теперь перейдите к редактированию схемы компоновки данных. На закладке Ресурсы нажмите кнопку ">> " и убедитесь, что конструктор выбрал единственный имеющийся ресурс – Выручка .

На закладке Параметры выполните те же действия, что и при создании предыдущего отчета.

Для параметра НачалоПериода задайте заголовок Дата начала . В поле Доступные типы задайте состав даты – Дата .

Для параметра КонецПериода задайте выражение:

КонецПериода(&ДатаОкончания, "День")

В поле Ограничение доступности установите флаг ограничения доступности.

В заключение добавьте еще один параметр – ДатаОкончания , установите его тип как Дата , состав даты – Дата .

В результате перечисленных действий параметры компоновки данных будут иметь следующий вид (рис. 128):

Рис. 128. Параметры компоновки данных

Теперь необходимо создать структуру отчета. На закладке Настройки последовательно создайте две вложенные группировки: верхнего уровня – по полю Мастер , вложенная в нее – по полю Период . Затем добавьте еще одну группировку, вложенную в группировку по полю Период , – Детальные записи (без указания группировочного поля) (рис. 129).

Рис. 129. Структура отчета

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

В заключение, с уровня глобального отчета перейдите на закладку Другие настройки и измените следующие параметры. Для параметра установите значение Отдельно и только в итогах ; для параметра задайте значение Начало и для параметра Заголовок задайте значение Выручка мастеров (рис. 130).

Рис. 130. Установка вывода общих итогов в начало

Запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета Выручка мастеров за период с 01.03.2004 по 30.04.2004 (рис. 131).

Рис. 131. Результат выполнения отчета

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

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

Вам потребуется изменить настройку группировки Период . Для того чтобы перейти к настройкам именно этой группировки, в поле структуры установите курсор на эту группировку, а затем нажмите кнопку "Период " в командной панели (рис. 132).

Рис. 132. Настройки группировки Период

В нижней части формы будут отображены настройки, доступные для данной группировки.

Перейдите на закладку Поля группировки . Для поля Период установите Тип дополнения – День (рис. 133).

Рис. 133. Установка типа дополнения периода

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

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

Для того чтобы обеспечить именно такую работу отчета, войдите в режим редактирования первого поля (например, дважды кликнув на нем) и нажмите на кнопку очистки "Х ". После этого, нажав на кнопку "Т ", вы сможете выбрать тип данных, отображаемых в этом поле. Выберите Поле компоновки данных (рис. 134).

Рис. 134. Выбор типа данных

Нажмите кнопку "OK ". Теперь нажмите в поле ввода кнопку выбора "" и в открывшемся окне выбора поля отметьте параметр НачалоПериода (рис. 135). Нажмите кнопку "OK ".

Рис. 135. Выбор поля

Для второго поля ввода аналогичным образом укажите, что дата окончания периода будет получена из параметра ДатаОкончания (рис. 136).

Рис. 136. Настройки группировки Период

Запустите 1С:Предприятие в режиме отладки и выполните отчет Выручка мастеров за период с 20.03.2004 по 20.04.2004 (рис. 137).

Рис. 137. Результат выполнения отчета

3.12.4. Создание отчета "Перечень услуг"

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

Создайте новый объект конфигурации Отчет . Назовите его ПереченьУслуг и запустите конструктор схемы компоновки данных. Создайте новый Набор данных – запрос (НаборДанных1) и вызовите конструктор запроса.

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

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

Рис. 138. Параметры виртуальной таблицы

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

· СпрНоменклатура.Родитель;

· ЦеныСрезПоследних.Цена (рис. 139).

Рис. 139. Выбранные поля

Перейдите на закладку Связи , сбросьте флаг Все у таблицы регистра и установите его у таблицы справочника.

На закладке Условия задайте условие выбора элементов справочника Номенклатура – выбираемые элементы должны соответствовать виду номенклатуры, переданному в параметре запроса ВидНоменклатуры (рис. 140).

Рис. 140. Условия выбора элементов

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

Рис. 141. Объединения/Псевдонимы

Перейдите на закладку Группировка и укажите, что группировка будет производиться по полю СпрНоменклатура.Родитель . Значения суммируемых полей задавать не надо (рис. 142).

Рис.142. Поля группировки

Нажмите кнопку "OK ". Посмотрите текст запроса.

Перейдите к редактированию схемы компоновки данных. На закладке Ресурсы нажатием кнопки ">> " выберите единственный доступный ресурс Цена .

На закладке Параметры задайте значение параметра ВидНоменклатуры как Перечисление.ВидыНоменклатуры.Услуга . Кроме этого снимите ограничение доступности для параметра ДатаОтчета и задайте ему заголовок – Дата отчета . В поле Доступные типы задайте состав даты – Дата . Для параметра Период , наоборот, установите ограничение доступности (рис. 143).

Рис. 143. Параметры схемы компоновки

Перейдите к формированию структуры отчета. Перейдите на закладку Настройки и создайте группировку по полю ГруппаУслуг , указав тип группировки Иерархия . Внутри этой группировки создайте еще одну группировку без указания группового поля. Она будет содержать детальные записи отчета (рис. 144).

Рис. 144. Структура и выделенные поля отчета

Перейдите на закладку Выбранные поля и укажите, что в отчет будут выводиться поля Услуга и Цена (рис. 145).

Рис. 145. Структура отчета

И в заключение настройте внешний вид отчета на закладке Другие настройки . Так как отчет будет представлять собой просто список оказываемых услуг, в котором интересны цены на конкретные услуги, выводить значения ресурса Цена для каждой из группировок и для всего отчета в целом не имеет смысла.

Чтобы запретить вывод общих итогов в отчете, установите параметр Расположение общих итогов по вертикали в значение Нет .

Затем перейдите к настройкам конкретной группировки – ГруппаУслуг . Для параметра Расположение итогов этой группировки укажите значение Нет . Вернитесь к настройкам всего отчета в целом.

Для параметра Расположение полей группировок укажите значение Отдельно и только в итогах (так отчет будет лучше "читаться"). Напоследок задайте заголовок отчета – Перечень услуг .

Запустите 1С:Предприятие в режиме отладки и прежде всего откройте периодический регистр Цены .

Добавьте в него еще одно значение для услуги Диагностика : новая цена услуги на 01.04.2004 – 350 (рис. 146). Это позволит протестировать отчет.

Рис. 146. Записи регистра "Цены"

Теперь выполните отчет Перечень услуг по состоянию на 31.03.2004 (рис. 147).

Рис. 147. Результат выполнения отчета

Ваш отчет правильно отражает цену услуги Диагностика на 31.03.2004 – 200 руб.

Еще раз выполните отчет, но теперь уже на другую дату - 01.04.2004 (рис. 148).

Рис. 148. Результат выполнения отчета

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

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

Диаграмма является элементом управления, предназначенным для размещения в таблицах и формах диаграмм и графиков различного вида системы 1С:Предприятие .

Логически диаграмма является совокупностью точек, серий и значений серий в точке (рис. 149).

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

Например, диаграмма продаж видов номенклатуры по месяцам будет состоять из точек – месяцев, серий – видов номенклатуры и значений – оборотов продаж.

Диаграмма как объект встроенного языка имеет три области, которые позволяют управлять оформлением диаграммы: область построения, область заголовка и область легенды (рис. 150).

Диаграмма может быть вставлена в структуру отчета как отдельный элемент. При создании отчета Рейтинг клиентов диаграмма будет использоваться в структуре настроек схемы компоновки данных.

Рис. 149. Пример диаграммы

Рис. 150. Области диаграммы

Создайте в конфигураторе новый объект конфигурации Отчет . Назовите его РейтингКлиентов , откройте его основную схему компоновки данных.

Создайте набор данных – запрос (НаборДанных1) и вызовите конструктор запроса. Выберите виртуальную таблицу регистра накопления Продажи.Обороты и из нее одно поле – ПродажиОбороты.Клиент .

Затем добавьте новое поле (значок Добавить в командной панели над списком полей) и при помощи построителя выражений определите его как разность между выручкой и стоимостью (рис. 151).

Рис. 151. Редактор произвольного выражения поля

В результате список выбранных полей будет иметь следующий вид (рис. 152):

Рис. 152. Выбранные поля

На закладке Объединения/Псевдонимы укажите, что вычисляемое поле будет иметь псевдоним Доход (рис. 153).

Рис. 153. Объединения/Псевдонимы

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

Перейдите в закладку Ресурсы и добавьте поле Доход в ресурсы схемы компоновки. Затем перейдите на закладку Настройки для того, чтобы создать структуру отчета.

В отличие от всех предыдущих отчетов, структура которых содержала группировки, в этот раз добавьте в структуру отчета диаграмму (рис. 154).

Рис. 154. Структура отчета

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

Теперь перейдите на закладку Выбранные поля и выберите поле Доход для вывода в отчет. Структура отчета должна принять следующий вид (рис. 155):

Рис. 155. Структура отчета и настройки диаграммы

На закладке Другие настройки задайте заголовок отчета – Рейтинг клиентов , а также выберите тип диаграммы – Круговая объемная .

Запустите 1С:Предприятие в режиме отладки и откройте отчет Рейтинг клиентов (рис. 156).

Рис. 156. Круговая объемная диаграмма в отчете

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

Откройте настройки отчета и измените тип диаграммы на Измерительная . Заново сформируйте отчет (рис. 157).

Рис. 157. Измерительная диаграмма в отчете

3.12.6. Создание отчета "Универсальный"

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

Создайте в конфигураторе новый объект конфигурации Отчет . Присвойте ему имя Универсальный . Откройте его основную схему компоновки данных и создайте новый набор данных – запрос (НаборДанных1).

Вызовите конструктор запроса и выберите виртуальную таблицу регистра накопления Продажи.Обороты . Из этой таблицы выберите все поля (рис. 158).

Рис. 158. Выбранные поля

На закладке Группировка с помощью кнопок ">> " выберите все поля, доступные для группировки, а все ресурсы добавьте в Суммируемые поля (рис. 159).

Рис. 159. Поля группировки и ресурсы

Нажмите кнопку "OK " и посмотрите на текст, сформированный конструктором запроса.

Закончите создание схемы компоновки данных тем, что на закладке конструктора схемы компоновки Ресурсы выберите все доступные ресурсы (нажмите ">> "). На этом работа со схемой компоновки данных завершена, закройте ее и вернитесь к окну редактирования объекта конфигурации Отчет Универсальный .

Перейдите на закладку Формы и создайте основную форму отчета, нажав на кнопку просмотра у табличного поля Основная форма отчета . Так как основная форма пока отсутствует, система вызовет конструктор форм. Согласитесь с тем, что система предлагает по умолчанию, и сразу нажмите кнопку "Готово ".

На экране откроется основная форма отчета. Как видите, система уже вставила за вас поле табличного документа и присвоила ему имя Результат (рис. 160).

Рис. 160. Редактирование формы отчета

Вам необходимо вставить в это поле сводную таблицу. Но ячейки поля табличного документа Результат сейчас находятся в режиме Только просмотр . Для того чтобы вставить сводную таблицу, нужно снять этот режим, поэтому щелкните на поле табличного документа и выполните Таблица –> Вид –> Только просмотр . Теперь вы можете редактировать табличное поле.

Установите курсор в верхнюю левую ячейку поля табличного документа и выполните Таблица –> Встроенные таблицы –> Вставить сводную таблицу . Система добавит в табличное поле сводную таблицу и откроет окно полей сводной таблицы (рис. 161).

Рис. 161. Сводная таблица

Для того чтобы в сводную таблицу вывести данные, вам потребуется написать несколько строк в модуле формы. Откройте модуль формы отчета и добавьте в текст переменную, которая вам понадобится:

Перем ИсточникСводнойТаблицы;

После этого создайте обработчик события формы отчета При открытии (В окне свойства формы Отчет Универсальный) и добавьте в него следующий текст:

Процедура ПриОткрытии()

ИсточникСводнойТаблицы = Новый ИсточникДанныхСводнойТаблицыКомпоновкиДанных;

ИсточникСводнойТаблицы.УстановитьСхему(СхемаКомпоновкиДанных);

ЭлементыФормы.Результат.ВстроенныеТаблицы.СводнаяТаблица1.ИсточникДанных =

ИсточникСводнойТаблицы;

ИсточникСводнойТаблицы.УстановитьНастройки(КомпоновщикНастроек.Настройки);

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

Этим текстом вы установили сводной таблице в качестве источника данных схему компоновки данных и установили ей настройки компоновщика настроек.

Запустите 1С:Предприятие в режиме отладки и откройте отчет Универсальный . На экране появится форма отчета и окно выбора полей сводной таблицы (рис. 162).

Рис. 162. Отчет Универсальный

Поместите значение ресурса ВыручкаОборот в Область данных, измерение Номенклатура – в Область строк, а измерение Мастер – в Область колонок. Отчет примет следующий вид (рис. 163):

Рис. 163. Результат выполнения отчета

Теперь в окне выбора полей сводной таблицы раскройте группу Номенклатура и добавьте значение (Без иерархии) в строки (в выпадающем списке окна "Поля сводной таблицы" выбрать Поместить в строки ), а измерение Клиент добавьте в колонки (в выпадающем списке окна "Поля сводной таблицы" выбрать Поместить в колонки ). Отчет изменит свой вид (рис. 164).

Рис. 164. Результат выполнения отчета

Таким образом, используя данные схемы компоновки данных, вы предоставили пользователю альтернативную возможность самостоятельно формировать отчет по регистру ОказанныеУслуги .

3.12.7. Создание отчета "Универсальный 2"

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

Создайте новый объект конфигурации Отчет с именем Универсальный2 . Откройте его основную схему компоновки данных, создайте новый набор данных – запрос (НаборДанных1) и запустите конструктор запроса. Выберите все поля из виртуальной таблицы регистра накопления Продажи.Обороты и нажмите кнопку "OK ". На закладке Ресурсы конструктора схемы компоновки данных нажмите кнопку ">> " и убедитесь, что система подобрала три ресурса: ВыручкаОборот, КоличествоОборот и СтоимостьОборот .

На закладке Настройки создайте новую группировку Детальные записи (не выбирая поле группировки).

Теперь на закладке Формы окна редактирования отчета Универсальный2 с помощью конструктора создайте основную форму отчета и отредактируйте ее.

Растяните форму и расположите в ней две надписи с именами Поля и Порядок и с заголовками Поля: и Порядок: соответственно (рис. 165).

Под надписью Поля КоманднаяПанельПоля . Под надписью Порядок расположите командную панель с именем КоманднаяПанельПорядок . Под командными панелями расположите соответственно табличные поля с именами ТабличноеПолеПоля и ТабличноеПолеПорядок. (рис. 166). В окне свойств командной панели КоманднаяПанельПоля установите флаг АвтоЗаполнение и ИсточникДействий – ТабличноеПолеПоля . В окне свойств командной панели КоманднаяПанельПорядок установите флаг АвтоЗаполнение и ИсточникДействий – ТабличноеПолеПорядок .

Рис. 165. Редактирование формы отчета

Рис. 166. Форма отчета Универсальный2

Теперь для табличного поля ТабличноеПолеПоля задайте источник данных как ОтчетОбъект.КомпоновщикНастроек.Настройки.Выбор (рис. 167).

Рис. 167. Задайте источник данных для табличного поля

Аналогично табличному полю ТабличноеПолеПорядок укажите источник данных ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок .

Совершив описанные действия, вы связали элементы управления, расположенные в форме с настройками системы компоновки отчета, – Выбор и Порядок . Выбор позволяет управлять списком полей, которые войдут в результат отчета, а Порядок задает порядок вывода строк результата. Командные панели понадобятся пользователю для настройки значений этих полей. Используя свойства командных панелей Автозаполнение и Источник действий , было получено автоматическое формирование команд, основанное на типе данных, содержащихся в каждом из табличных полей.

В системе 1С:Предприятие 8 имеется небольшой набор уже готовых макетов оформления для использования системой компоновки данных. Они содержатся в объекте БиблиотекаМакетовОформленияКомпоновкиДанных .

Поместите еще одну надпись с именем Оформление и заголовком Оформление: , а правее ее расположите поле выбора с именем ПолеВыбораОформление (рис. 168) без подписи.

Рис. 168. Редактирование формы отчета

В свойствах поля выбора откройте окно Строки списка выбора и заполните его именами макетов из библиотеки макетов оформления компоновки данных (см. рис. 169).

Рис. 169. Заполнение списка значений поля выбора

Для того чтобы поле выбора изменяло применяемый макет оформления системы компоновки, создайте обработчик При изменении поля выбора:

Процедура ПолеВыбораОформлениеПриИзменении(Элемент)

ПараметрыВывода = КомпоновщикНастроек.Настройки.ПараметрыВывода;

ПараметрМакетОформления = ПараметрыВывода.НайтиЗначениеПараметра(Новый

ПараметрКомпоновкиДанных("МакетОформления"));

ПараметрМакетОформления.Использование = Истина;

ПараметрМакетОформления.Значение = ПолеВыбораОформление;

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

Этим текстом для параметра компоновки данных МакетОформления вы указываете имя макета, которым должен оформляться отчет, и устанавливаете признак использования макета оформления.

Запустите 1С:Предприятие в режиме отладки и откройте отчет Универсальный2 .

В выбранные поля добавьте следующие поля:

· Мастер;

· Номенклатура;

· ВыручкаОборот.

Задайте порядок сортировки:

· Мастер по возрастанию;

· Номенклатура.ВидНоменклатуры по убыванию;

· Номенклатура по возрастанию.

Выберите оформление, например Зеленый , и нажмите кнопку "Сформировать ". Результат будет выглядеть следующим образом (рис. 170):

Рис. 170. Результат выполнения отчета

Теперь измените условия формирования отчета. Выберите поля Клиент, Номенклатура и ВыручкаОборот . Порядок сортировки будет по возрастанию значения поля Клиент , а вариант оформления – Море . Выполните отчет (рис. 171).

Рис. 171. Результат выполнения отчета


3.13. Оптимизация документа "ОказаниеУслуги"

Предположим, что руководство ООО "Мастер" приняло окончательное решение о порядке расчета стоимости материалов, израсходованных в процессе оказания услуг. А именно текущая стоимость материала будет определяться как частное суммарной стоимости остатка этого материала и его оставшегося количества на складе.

Кроме того, средства 1С:Предприятие 8.1 позволяют вам управлять скоростью выполнения процедуры проведения документа, за счет использования механизма запросов.

Таким образом, оптимизация документа ОказаниеУслуги , преследует две цели:

· определение стоимости расходуемых материалов при проведении документа;

· повышение скорости выполнения процедуры проведения документа.

Удалите в документе ОказаниеУслуги реквизит табличной части Стоимость , который больше не понадобится. Также удалите соответствующую колонку из табличного поля, расположенного в форме документа ОказаниеУслуги .

После этого полностью удалите содержимое обработчика события ОбработкаПроведения в модуле документа ОказаниеУслуги и создайте в нем заготовку процедуры проведения. Текст запроса, выполняемого в режиме оперативного проведения (т.е. на текущую дату и время), будет отличаться от запроса, выполняемого при неоперативном проведении (т.е. "задним" числом). Поэтому формирование текста запроса необходимо включить в условие Если … Иначе … КонецЕсли:

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

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

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

Иначе

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

КонецЕсли;

Сначала составьте запрос, который будет выполняться при оперативном проведении документа. Значение переменной Запрос.Текст будет сформировано автоматически. Для этого установите курсор перед точкой с запятой, вызовите контекстное меню, нажав правую кнопку мыши, и выберите пункт Конструктор запроса . Согласитесь с созданием нового запроса. На экране появится диалоговое окно "Конструктор запроса". Раскройте таблицу ПереченьНоменклатуры табличной части документа ОказаниеУслуги и выберите из нее поля:

· Номенклатура;

· Количество;

· Номенклатура.ВидНоменклатуры;

Эти поля будут нужны для задания значений измерений регистров и их ресурсов. Кроме того, поле ВидНоменклатуры понадобится вам для анализа того, чем является номенклатура, указанная в документе: материалом или услугой (рис. 172).

Рис. 172. Выбранные поля

Для указания значений ресурса Стоимость регистров СтоимостьМатериалов и Продажи вам понадобится рассчитать текущую стоимость номенклатуры как частное стоимости остатка этого материала и его оставшегося количества.

Поэтому добавьте к списку выбранных таблиц еще две (рис. 173).

РегистрНакопления.ОстаткиМатериалов.Остатки.

Рис. 173. Выбранные таблицы

Для этих виртуальных таблиц необходимо задать одинаковые параметры. Сначала выберите виртуальную таблицу ОстаткиМатериаловОстатки , вызовите контекстное меню нажатием правой кнопки мыши и выберите пункт Параметры виртуальной таблицы . Параметры будут включать в себя момент времени, на который должны быть получены остатки этих регистров, и условие получения данных.

Условие получения данных указывает, что остатки должны быть получены только по тем позициям номенклатуры, которые содержатся в проводимом документе (перед выполнением запроса в параметр СписокНоменклатурыДокумента необходимо передать список всех позиций номенклатуры, содержащихся в проводимом документе) – рис. 174.

Рис. 174. Параметры виртуальных таблиц

Такие же параметры установите для второй виртуальной таблицы СтоимостьМатериаловОстатки . Далее выберите из этих виртуальных таблиц поля СтоимостьОстаток и КоличествоОстаток (рис. 175).

Рис. 175. Выбранные поля

Выберите еще раз виртуальную таблицу регистра накопления ОстаткиМатериаловОстатки и переименуйте ее в ОстаткиМатериаловОстаткиНаСкладе (рис. 176).

Рис. 176. Выбранные таблицы

Для этой виртуальной таблицы также укажите параметр МоментВремени, а в условии напишите, что материал должен находиться в списке номенклатуры и склад должен быть равен складу, указанному в документе (рис. 177).

Рис. 177. Параметры таблицы ОстаткиМатериаловОстаткиНаСкладе

Теперь из этой виртуальной таблицы выберите поле КоличествоОстаток (рис. 178).

Рис. 178. Выбранные поля

На этом формирование списка выбранных полей закончено, и можно перейти к заданию условий связи между выбранными таблицами. Для этого перейдите на закладку Связи . Каждую из виртуальных таблиц необходимо связать с таблицей документа таким образом, что для всех записей таблицы документа должны подбираться имеющиеся записи виртуальной таблицы, причем номенклатура в таблице документа должна быть равна материалу из виртуальной таблицы (рис. 179, а–б).

Рис. 179а. Выбранные таблицы

Рис. 179б. Условия связи между таблицами

Теперь перейдите на закладку Дополнительно и установите флаг Для изменения . Флаг Для изменения позволяет заблаговременно заблокировать чтение указанных данных (которые могут читаться транзакцией другого соединения) уже при считывании, чтобы исключить взаимные блокировки при записи. Это предложение дает возможность указать в запросе таблицы, считываемые данные которых предполагается изменять.

Поскольку вы планируете выполнить запись регистров накопления ОстаткиМатериалов и СтоимостьМатериалов , укажите таблицы этих регистров в качестве таблиц для изменения (рис. 180).

Рис. 180. Укажите таблицы для изменения

Перейдите на закладку Условия и задайте условие отбора из таблицы документа только строк проводимого документа (ссылка на него будет передана в параметр запроса Ссылка) – рис. 181. Для этого дважды щелкните левой кнопкой мыши по полю Ссылка .

Рис. 181. Условие отбора из таблицы документа

Перейдите на закладку Объединения/Псевдонимы и задайте следующие псевдонимы полей: НоменклатураВидНоменклатуры –> ВидНоменклатуры; КоличествоОстаток1 –> КоличествоНаСкладе.

Нажмите кнопку "ОK " и посмотрите, какой текст запроса сформировал конструктор (значение переменной Запрос.Текст):

ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

СтоимостьМатериаловОстатки.СтоимостьОстаток,

ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток КАК КоличествоНаСкладе

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериаловОстатки

Материал В (&СписокНоменклатурыДокумента)) КАК ОстаткиМатериаловОстатки

ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени,

Материал В (&СписокНоменклатурыДокумента) И Склад = &СкладВДокументе)

КАК ОстаткиМатериаловОстаткиНаСкладе

ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

ОстаткиМатериаловОстаткиНаСкладе.Материал

ДЛЯ ИЗМЕНЕНИЯ

РегистрНакопления.СтоимостьМатериалов.Остатки,

РегистрНакопления.ОстаткиМатериалов.Остатки

Текст запроса для случая неоперативного проведения документа будет практически таким же, за исключением того, что в нем будет отсутствовать третье левое соединение и, соответственно, поле КоличествоНаСкладе , т.к. проверку остатков в этом случае выполнять не надо. Установите курсор перед точкой с запятой, расположенной в секции Иначе (см. стр. 135), и вставьте следующий текст запроса:

ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

ОказаниеУслугиПереченьНоменклатуры.Количество,

ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК

ВидНоменклатуры,

ОказаниеУслугиПереченьНоменклатуры.Сумма,

ОстаткиМатериаловОстатки.КоличествоОстаток,

СтоимостьМатериаловОстатки.СтоимостьОстаток

Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента))

КАК СтоимостьМатериаловОстатки

ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

СтоимостьМатериаловОстатки.Материал

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени,

Материал В (&СписокНоменклатурыДокумента))

КАК ОстаткиМатериаловОстатки

ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

ОстаткиМатериаловОстатки.Материал

ДЛЯ ИЗМЕНЕНИЯ

РегистрНакопления.ОстаткиМатериалов.Остатки,

РегистрНакопления.СтоимостьМатериалов.Остатки;

Теперь добавьте в текст обработчика задание параметров запроса (добавляйте в соответствующие строки только те команды, которые выделены жирным шрифтом):

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

Запрос.УстановитьПараметр("СкладВДокументе", Склад);

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

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

| РегистрНакопления.СтоимостьМатериалов.Остатки";

КонецЕсли;

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

Запрос.УстановитьПараметр("СписокНоменклатурыДокумента",

ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));




Close