Механизм Запросов

47

Upload: artyom-kots

Post on 10-Mar-2016

268 views

Category:

Documents


4 download

DESCRIPTION

Механизм Запросов

TRANSCRIPT

Page 1: Механизм Запросов
Page 2: Механизм Запросов

Содержание материалов

Содержание материалов .............................................................................1

Введение..............................................................................................., .....3

Таблицы, поля базы данных ...................................................................4

Структура запроса (описание запроса) ..................................................5

Таблицы информационной базы данных...................................................7

Таблица констант....................................................................................7

Описание полей выборки, источники в запросе.................................7

Таблица справочников............................................................................8

Вложенные таблицы ............................................................................8

Таблица плана видов характеристик ..................................................9

Конструкции «Различные», Первые № ..............................................9

Фильтрация результатов запроса (отборы) ......................................10

Таблица документов .............................................................................11

Группировки в запросе .....................................................................12

Условия назначения агрегатных функций.......................................13

Указание нескольких источников........................................................14

Переход в другую таблицу по точке ................................................14

С помощью конструкции «Где» .......................................................15

Использование соединений ..............................................................15

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

Итоги в запросе ..................................................................................... 18

Встроенные функции в языке запросов, операция выбора ................ 20

Источники-запросы, объединение запросов.................................... 21

Объединение запросов ..................................................................... 22

Таблица журнала документов ......................................................... .....22

Передача параметров в запрос......................................................... 23

Таблицы регистра сведений ................................................................. 24

Основная таблица ............................................................................. 24

Таблица получения среза последних ................................................24

Таблица получения среза первых .....................................................25

Таблицы регистра накопления..............................................................25

Page 3: Механизм Запросов

2

Использование запросов в системе "1С.Предприятие 8.0"

Основная таблица ............................................................................. 25

Таблица получения оборотов............................................................ 26

Таблица получения остатков ............................................................ 27

Таблица получения остатков и оборотов ........................................ 27

Таблицы регистра бухгалтерии (с поддержкой корреспонденции)..29

Основная таблица ............................................................................. 29

Значения субконто ............................................................................ 30

Движения с субконто ....................................................................... 30

Остатки .............................................................................................. 31

Обороты ............................................................................................ =31

Остатки и обороты ............................................................................ 31

Обороты ДтКт....................................................................................32

Таблицы последовательностей .............................................................32

Основная таблица ............................................................................. 32

Таблица границ ................................................................................. 32

Работа с объектом «запрос»..................................................................... 33

Конструктор запросов, конструктор выходных форм........................ 34

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

Просмотр иерархии запроса в «дереве» .............................................. 41

Работа с вложенными таблицами ........................................................ 42

Сводная таблица ................................................................................... 43

Построитель отчета................................................................................44

Язык запросов построителя отчета ...................................................45

Рекомендация «напоследок»....................................................................46

Page 4: Механизм Запросов

Введение

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

средствами, предоставляемыми системой)- исполнение (обработку данных предметной области).

Конфигурирование подразумевает под собой «визуальное» создание структуры конфигурации, форм диалогов, выходных документов,интерфейсов, наборов прав пользователей (ролей) и написание программ на встроенном языке «1С:Предприятия» для обработки входных и выходных данных.

В процессе исполнения система уже оперирует конкретными понятиями, описанными на этапе конфигурирования.

В рамках данного курса вопросам конфигурирования будут уделяться очень мало времени, основной упор будет сделан на возможностях программного получения данных из информационной базы.Можно сказать что система «1С:Предприятие 8.0» предоставляет две модели доступа к данным:

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

• Табличная модель (конфигурация представляется набором таблиц).

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

Page 5: Механизм Запросов

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

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

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

• «Обычное поле» (содержащее какое-либо значение, либо значение типа «Null»)

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

Page 6: Механизм Запросов

Введение

Если продолжить разговор о полях, содержащих какие-либо значения,можно отметить: поле может содержать значение одного типа, может содержать значения нескольких типов (иметь составной тип), при этом для конкретной записи поле содержит значение «одного» типа.В качестве «простых» типов могут выступать:

• Число (десятичное число)

• Строка (строка фиксированной, или неограниченной длины)

• Дата (дата, время)

• Булево (истина или ложь)

• Неопределенно

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

Структура запроса (описание запроса)

В качестве основного механизма получения данных в системе «1С:Предприятие 8.0» используется механизм запросов. Запросы получают необходимые данные из таблиц информационной базы. Для того, чтобы запрос получил «нужные» данные, их состав необходимо «указать» (поставить задачу запросу на выборку необходимых данных,отвечающих заданным критериям). «Постановка задачи»производится на специальном языке запросов, поддерживаемым программным комплексом «1С:Предприятие 8.0». С помощью конструкций данного языка составляется текст запроса.Можно сказать, что текст запроса - это инструкция, в соответствии скоторой должен быть выполнен запрос. Данный текст имеет определенную структуру.Возможная структура текста запроса приводится ниже: •

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

о Выбрать [Различные] [Первые <Количество>]

<Список полей выборки>о [Из <Список источников>]

о [Где <Условие отбора>]

о [Сгруппировать По <Поля группировки>]

о [Имеющие <Условия отбора>]

о [Для изменения [[Of]<CraicoK таблиц верхнего уровня>]]

Page 7: Механизм Запросов

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

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

• Описание итогов В минимальном варианте текст запроса может содержать только конструкцию «Выбрать <Поля выборки>». После составления текста запроса, его необходимо передать специальному объекту «запрос» и затем выполнить метод данного объекта. Результатом выполнения будет объект «результат запроса», который необходимо «обойти».

Page 8: Механизм Запросов

Таблицы информационной базы данных

Рассматривая более подробно таблицы - источники данных для запроса, будем одновременно знакомиться с языком описания запросов. В этом поможет отчет «Знакомство с запросом»

Таблица констант

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

Описание полей выборки, источники в запросе

Просмотреть значение констант можно с помощью простого запроса:

Выбрать

Константы.Адрес,

Константы.ДатаБлокировки

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

Выбрать

Адрес,ДатаБлокировки

Из

Константы

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

Выбрать *

Из Константы

Исходя из назначения констант, таблица «Константы» всегда содержит одну строку.

Page 9: Механизм Запросов

Таблица справочников

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

Справочник.<Имя>

Поле Тип

Код Число, Строка

Наименование Строка

Представление Строка

Пометка удаления Булево

Предопределенный Булево

ЭтоГруппа Булево

Родитель СправочникСсылка.<Имя>

Владелец СправочникСсылка.<ИмяВ>

Ссылка СправочникСсылка.<Имя>

<Реквизиты> Тип реквизита

<Табличные части> РезультатЗапроса

Практикум № 1 ____________________________________________

Просмотрите состав полей справочников: «Сотрудники», «Контакты», «Подразделения». Обратите внимание на некоторое «несоответствие» приведенным полям.

Вложенные таблицы

При просмотре состава полей справочника «Сотрудники» в колонке «Родственники» в каждом поле показывается, что в нем содержится тип «Таблица значений», на самом деле в данном поле находится значение, имеющее тип «Результат запроса». Для простоты понимания не будем пока оперировать понятием «вложенная» таблица, а будем считать, что на каждую табличную часть существует своя таблица. Имя данной таблицы складывается из трех частей (разделенных точками): ключевое слово «Справочник»,

Page 10: Механизм Запросов

Таблицы информационной базы данных

«Имени справочника», «Имени табличной части», Следующий запрос позволит увидеть наполнение и состав полей табличной части «Родственники» справочника «Сотрудники». Выбрать *Из Справочник.Сотрудники.Родственники

Таблица плана видов характеристик

Состав таблицы:

ПланВидовХарактеристик.<Имя>

Поле Тип

Код Строка

Наименование Строка

Пометка удаления Булево

Предопределенный Булево

Представление Строка

Родитель ПланВидовХарактеристик.Ссылка.<Имя>

Ссылка СправочникСсылка.<Имя>

ЭтоГруппа Булево

<Реквизиты> Тип реквизита

<Табличные части> Результат Запроса

Практикум № 2 -----------------------------------------------------------------

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

Конструкции «Различные», Первые №.Практикум № 3 ---------------------------------

Напишите текст запроса, который выведет перечень основных единиц измерения, используемых в записях справочника «Номенклатура»,

Page 11: Механизм Запросов

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

Опробуйте на практике вышерассмотренные возможности (конструкции «Первые» и «Различные»), Попробуйте объяснить результат применения конструкции «Различные» (запрос по основным единицам измерения справочника номенклатуры должен выдавать два «пустых» значения)

Фильтрация результатов запроса (отборы)Для указания условия отбора используется структура, определяемая ключевым словом «Где <Условие>». Условие, определяемое после данного ключевого слова, действует на момент получения данных запросом.В условии может использоваться тот факт, что некоторые поля могут содержать значение логического типа. Например

Выбрать

Код,Наименование Из Справочник.Номенклатура Где ЭтоГруппа

Можно было бы написать «ЭтоГруппа^Истина». В условиях можно использовать стандартные логические операции, например

«ЭтоГруппа=Ложь И (Не ПометкаУдаления)»

В условиях (это не обязательно может быть конструкция «Где») помимо обычных операций сравнения могут использоваться «В», «ВИерархии» «Между И», «Подобно», «Есть Null», «Ссылка».

Практикум № 5 _____________________________________ , _____

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

Page 12: Механизм Запросов

Оператор проверки ссылочного значения «Ссылка» позволяет проверить, является ли значение выражения, указанного справа от него ссылкой на таблицу, указанную слева.

Выбрать

* Из РегистрСведений.ЗначенияСвойств

Где Значение Ссылка Справочник.СвойстваНоменклатуры

В операторе «Подобно» символ <%> - означает любую последовательность символов, <_> один символ, <[...]> один символ из указанного в скобках диапазона, <[А...]> один символ не входящий вуказанный в скобках диапазон. Например, шаблон «_а[0-9]%» означает, что в строке первый символ - любой, дальше - буква «а», затем цифра и подстрока любой длины.Практикум № 6_____________________________________________

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

Таблица документов

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

Документ. <Имя>

Поле Тип

Ссылка ДокументСсылка.<Имя>

Пометка удаления Булево

Номер Число,Строка

Дата Дата

Проведен Булево

Представление Строка

МоментВремени Момент времени

<Реквизиты> Тип реквизита

<Табличные части> РезультатЗапроса

Page 13: Механизм Запросов

Практикум № 7 _____________________________________________

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

Группировки в запросе

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

Выбрать

Номенклатура Как Товар,С>>лша(Количество)Из Документ.Приходная.Товары

Сгруппировать По

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

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

Выбрать

Номенклатура Как Товар,Номенклатура.ЦенаПродажи,

Сулша(Количество)

Из

Документ.Приходная.Товары

Сгруппировать По Номенклатура

Page 14: Механизм Запросов

А попытка выполнить следующий запрос приведет к ошибке:

Выбрать

Номенклатура Как Товар,Номенклатура.Код,

С}/лша(Количество)

Из

Документ.Приходная.Товары

Сгруппировать По

Номенклатура.Код

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

• Сумма (Выражение)

• Среднее (Выражение)

• Минимум (Выражение)

• Максимум (Выражение)

• Количество ([Различные] Выражение)Агрегатные функции можно использовать и без определения группировок.

Выбрать

#олшест#о(ОснЕдиницаИзмерения) Как Счет,

Количество^) Как Всего

Из Справочник.Номенклатура

Практикум № 8 -----------------------------------------------------------------

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

Условия на значения агрегатных функций

Рассмотрим следующий текст запроса:

Выбрать

Номенклатура Как Товар,

С>>лша(Количество),

Сулша(Сумма)

Page 15: Механизм Запросов

Из Документ.Приходная.Товары

Сгруппировать По

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

Имеющие Сулшя(Сумма)> 1000

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

Напишите текст запроса, который выдавал бы список покупателей,купивших более чем одну товарную позицию, и при этом сумма покупок была более 200.

Указание нескольких источников

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

Выбрать

Номен.Наименование,ЕдИзм.База Из Справочник.Номенклатура Как Номен,Справочник.ЕдиницыИзмерения Как ЕдИзм

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

Переход в другую таблицу по точке

Если какое-то поле таблицы (№1) представляет собой ссылку на запись из другой таблицы (№2), то можно, используя конструкцию:Таблица 1.ИмяПоля.ИмяПоляТаблицы2, «получить» данные из другой таблицы

Выбрать

Наименование, ОснЕдиницаИзмерения.База

Из Справочник.Номенклатура

Page 16: Механизм Запросов

В качестве еще одного примера

Выбрать

Наименование, ОснЕдиницаИзмерения.База

Из Справочник.Номенклатура

Где Не (ОснЕдиницаИзмерения.База Есть Null)

С помощью конструкции «Где»Выбрать

Номен.Наименование, База

Из Справочник.Номенклатура Номен,

Справочник.ЕдиницыИзмеренияЕдИзм

Где Номен. ОснЕ диницаИзмерения^ЕдИзм. Ссылка

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

Использование соединений

Другим способом указания взаимосвязи таблиц является использование «Соединений». Соединения бывают нескольких видов:

• Внутреннее соединение

• Левое внешнее соединение

• Правое внешнее соединение

• Полное внешнее соединение В любом случае, когда речь заходит о соединении, существует несколько связанных с этим понятий: Таблица №1, Таблица №2, соединение (его вид и условие соединения). Рассмотрим эти варианты на следующем примере:

Есть две таблицы:

Самолеты

Наименование Номер

ИЛ86 АА1

Ту 154 АА2

ИЛ 62 ААЗ

Пассажиры

НомерСамолета ФИО

АА1 Первый

АА2 Второй

АА4 Третий

АА1 Четвертый

Page 17: Механизм Запросов

Условием соединения будет:

Самолеты.Номер=Пассажиры.НомерСамолета

В результат запроса должны попасть данные:Наименование самолета Пассажиры

В соответствии с условием можно выделить записи, для которых условие выполняется:

Записи, неудовлетворяющие условию соединения:

Теперь рассмотрим варианты соединения:

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

ИЛ 86 Первый

ИЛ 86 Четвертый ? ■ ... , . ...

Ту 154 Второй

Левое внешнее соединение: в результат выполнения запроса войдут данные из записей, для которых выполняется условие соединения и«не вошедшие» из Таблицы №1. Можно сказать, что в результат запроса войдут все данные из Таблицы №1, и для тех записей результата запроса, для которых выполнялось условие соединения вполях, куда помещаются данные из таблицы №2, будут стоять значения, для которых условие не выполняется, будет стоять Null.

Page 18: Механизм Запросов

ИЛ 86 Первый

ИЛ 86 Четвертый

Ту 154 Второй

ИЛ 62 Null

Правое внешнее соединение обратно левому.ИЛ 86 Первый

ИЛ 86 Четвертый

Ту 154 Второй

Null Третий

Полное внешнее соединение. В результат запроса войдут как записи,для которых выполнялось условие соединения, так и записи,полученные из «не вошедших» данных из обеих таблиц.ИЛ 86 Первый

ИЛ 86 Четвертый

Ту 154 Второй

ИЛ 62 Null

Null Третий

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

Выбрать

Номен.Наименование, База

Из Справочник.Номенклатура Номен

Левое Внешнее Соединение Справочник.ЕдиницыИзмерения ЕдИзм

По

Номен. ОснЕдиницаИзмерения=Е дИзм. Ссылка

Практикум №10 ____________________________________________

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

Page 19: Механизм Запросов

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

Если прописать запрос по табличной части «Товара» документа «Приходная» (даже с использованием группировок), то видно, что особого порядка не прослеживается.

Когда необходимо упорядочить записи по определенному правилу, то в данном случае может пригодиться конструкция языка запросов «Упорядочить По»

Выбрать

Из Документ.Приходная Упорядочить По Контрагент.Наименование Возр,Номер Убыв

Возможные варианты упорядочивания: «Возр», «Убыв», «Иерархия». В качестве имен полей, по которым производится упорядочивание,можно указывать их псевдонимы.Важно помнить, что упорядочивание по иерархии возможно только по таблицам с иерархией.Практикум № 11 ------------------------------------------------------------------

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

Итоги в запросе

Для получения итогов в результате запроса в тексте запроса необходимо определить конструкцию «Итоги». Итоги добавляются врезультат запроса как итоговые строки.

Выбрать

Номенклатура?ЦенаДоличество,Сумма Из Документ.Приходная.Товары

Итоги Сулша(Количество), Сулша(Сумма)По Номенклатура

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

Выбрать

Номенклатура,Цена,Количество?Сумма Из Документ.Приходная.Товары

Page 20: Механизм Запросов

Итоги Сушш(Количество), Сулша(Сумма) По Номенклатура Иерархия

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

Выбрать

Ссылка.Контрагент,Номенклатура?ЦенаДоличествоэСумма

Из

Документ.Приходная.Товары

Итоги Сулша(Количество), Сумма(Суммз)

По Ссылка.Контрагент, Номенклатура

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

Выбрать

Ссылка.КонтрагентэНоменклатура?Цена,Количество,Сумма

Из Документ.Приходная.Товары

Итоги Сулша(Количество), Сулша(Сумма)По Оби/ые,Ссылка.Контрагент,Номенклатура

Практикум № 12 _________________________________________________

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

Page 21: Механизм Запросов

Встроенные функции в языке запросов, операция выбора

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

• Подстрока (Выражение, Начальный символ, Сколько отрезать)

• Год (выражение) - номер года

• Квартал (выражение) - номер квартала

• Месяц (выражение) - номер месяца

• ДеньГода (выражение) - номер дня в годе

• День (выражение) - номер дня в месяце

• Неделя (выражение) - номер недели в году

• ДеньНедели (выражение) номер дня в неделе

• Час (выражение)

• Минута (выражение)

• Секунда (выражение)

• НачалоПериода (Дата, Период)

• КонецПериода (Дата, Период)

• ДатаВремя(г,м,д,ч,м,с)Следует отметить, что при написании текста запроса можно использовать простые арифметические операции (+,-,*,/)

Выбрать

Номенклатура,Количество-НомерСтроки

Из Доку мент.Приходная.Товары

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

Выразить («Исходное» Как «Нужно»)

Следующий пример показывает возможности конструкции «выбор»

Выбрать

Номенклатура,Выбор

Когда Количеством 0 Тогда "Больше 10м

Page 22: Механизм Запросов

Когда Количество<=10 Тогда "Меньше или равно 10"Конец Количество Из Документ.Приходная.Товары

Допустим следующий вариант:

Выбрать

Номенклатура,

Выбор

Когда С>>лша(Количество)>100 Тогда "Больше 10"

Когда Ошлш(Количество)<=100 Тогда "Меньше или равно 10"

Конец Количество

Из

Документ.Приходная.Товары

Сгруппировать По Номенклатура

Источники-запросы, объединение запросов

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

Выбрать

Контрагент,С>>лша(Сумма)

Из

(Выбрать

Ссылка.Контрагент?Номенклатура,Сужжа(Сумма) Как Сумма

Из Документ.Приходная.Товары

Сгруппировать По

Ссылка.Контрагент?Номенклатура

) Как Вложенный

Сгруппировать По

Контрагент______________________________________ ^_

Следует отметить, что вложенные запросы можно использовать и вконструкциях «В ()», «В ИЕРАРХИИ ()».

Page 23: Механизм Запросов

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

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

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

Выбрать

Номенклатура,Ссылка как Док,Ошлш(Количество)

Из

Документ.Приходная.Товары

Сгруппировать По

Номенклатура,Ссылка

Объединить Все

Выбрать

Номенклатура,Ссылка?С^лша(Количество)

Из

Документ.Расходная.Товары

Сгруппировать По

Номенклатура,Ссылка

Упорядочить По Номенклатура

Практикум № 13 ------------------------------------------------------------------

1.Необходимо получить суммовые обороты по номенклатуре как позакупкам так и по продажам в разрезе различных валют (соответствующий реквизит существует и у документа «Приходная» и «Расходная» ).

Таблица журнала документов

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

Page 24: Механизм Запросов

ЖурналДокументов.<Имя>

Поле Тип

Ссылка ДокументСсылка.<Имя>

Пометка удаления Булево

Номер Число.Строка

Дата Дата

Проведен Булево

<Графа журнала> Тип графы

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

Выбрать * Из ЖурналДокументов.Складские

Передача параметров в запрос

Очень часто встает задача передачи каких-либо значений (параметров)в запрос. К примеру, это могут быть значения условий,накладываемых на запрос. В таком случае в тексте запроса имя параметра прописывается следующим образом:Где Номенклатура=&Номен_____ _________________________________

Практикум № 14 ------------------------------------------------------------------

1.Напишите текст запроса, который при выполнении содержал бы документы только за указанный период. Можно использовать конструкцию «Между &НачПериода и &КонПериода» или используя конструкцию ДатаВремя.2.Напишите текст запроса, выполнение которого приведет кполучению остатка по выбранной номенклатурной позиции (использовать таблицы документов)3. Модифицируйте текст запроса, полученного в результате выполнения пункта №2. Необходимо получать остатки по переданному списку номенклатуры (список берется из табличной части отчета, параметр ТЧ).

Page 25: Механизм Запросов

Таблицы регистра сведений

Основная таблица

РегистрСведений.<Имя>

Поле Тип

Период ;;;|шга:

Регистратор ДокументСсылка.<Имя>

НомерСтроки Число

Активность Булево

МоментВремени Момент времени

<Измерение> Тип измерения

<Ресурс> Тип ресурса

<Реквизит> Тип реквизита

Практикум №15 -------------------------------------------------------------------

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

Таблица получения среза последних

Виртуальная таблица. Она предназначена для получения наиболее близких в «прошлое» записей регистра сведений на указанную дату (включительно). Включает только активные записи.

Регистр-Сведений,<Имя>. СрезПоследш^ Дата,Условие)Поле ■ А: ■; . Тч !

Период Дата

Регистратор ДокументСсылка.<Имя>

НомерСтроки Число

Активность Булево

<Измерение> Тип измерения

Page 26: Механизм Запросов

<Ресурс> Тип ресурса

<Реквизит> Тип реквизита

Выбрать *Из РегистрСведений. Валюты.СрезПоследних(&НачПериода)

Таблица получения среза первых

Виртуальная таблица. Предназначена для получения наиболее близких в «будущее» записей регистра сведений на указанную дату (включительно). Включает только активные записи.

РегистрСведений.<Имя>.СрезПервых(Дата,Условие)

Поле Тип

Период Дата

Регистратор ДокументСсылка. <Имя>

НомерСтроки Число

Активность Булево

<Измерение> Тип измерения

<Ресурс> Тип ресурса

<Реквизит> Тип реквизита

Выбрать * Из РегистрСведений. Валюты.СрезПервых(&НачПериода)

Практикум №16 ш ____________________________________________

L Сформируйте текст запроса, выполнение которого приведет кполучению данных о курсах валют на выбранную дату.2.Напишите текст запроса, результатом выполнения которого будет получение значения курса выбранной валюты, действующего на выбранную дату. (При этом не надо пользоваться конструкцией «Где» запроса).

Таблицы регистра накопления

Основная таблица

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

Page 27: Механизм Запросов

«РегистрНакопления.» плюс имя регистра, определенное вконфигураторе.РегистрНакопления.<Имя>

Поле Тип

Период Дата

Регистратор ДокументСсылка.<Имя>

НомерСтроки Число

Активность Булево

МоментВремени Момент времени

Приход Булево

Расход Булево

ВидДвижения ВидДвиженияНакопления

<Измерение> Тип измерения

<Ресурс> Число

<Реквизит> Тин реквизита

Выбрать * Из РегистрНакопления.ОстаткиНоменклатуры

Таблица получения оборотов

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

РегистрН акопления. <Имя>. Обороты(Начал о,Окон чание,Периодичность, Условие)

Поле

Период Дата , - ■ .

Регистратор ДокументСсылка.<Имя>

<Измерение> Тип измерения

<Ресурс>Оборот Число

<Ресурс>Приход Число

Page 28: Механизм Запросов

<Ресурс>Расход Число __________________________________________ 1 •.:• - " : ■•: .- ■ ' ■ : ': - : . ."■•I

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

В качестве периодичности может задаваться один из следующих вариантов:

• Период (не разворачивать)

• Регистратор

• День

• Неделя

• Месяц

• Квартал

• Год Посмотреть таблицу можно с помощью запроса:

Выбрать

Из РегистрНакопления.ОстаткиНоменклатуры.Обороты(„Неделя)

Таблица получения остатков

Виртуальная таблица. Предназначена для получения остатков по регистру накопления. При расчете итогов учитываются только активные записи. Таблица существует только для регистров остатков.

РегистрНакопления.<Имя>.Остатки(Период?Условие): "■■ . ' ' • . . ■ ' . .'. '■' '■.': ; ■ ' . ; ■ ■ ; , . - ■ . - :.-.,'• '• , , . ■ . ■ ' :/ ■■''.':,■■"-'■'■ - ■ ' ■ ■ . . . ■ " ' ■ . ■ : ; ■ ■ . ■ : : ; . ' . ■ : : ■ .-;:'-. : : ;.;. .... ' '■' ■ • . ■ . .:. .,..-. .. .• :..■■■..■.:- ■ ■ ;

Поле Тип •■;■■•/'■У /. ■ ;■ ' .■.

<Измерение> Тип измерения

<Ресурс>Остаток Число ft ..............i .......................................................... : ■ ■ г- ■ ■' Л\У

Выбрать *ИзРегистрНакопления.ОстаткиНоменклатуры.Остатки(&НачПериода)

Таблица получения остатков и оборотов

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

Page 29: Механизм Запросов

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

РегистрНакопле1шя.<Имя>ОстаткиИОбороты(Начало?Окончание, Периодичность, Метод дополнения,Условие)

Поле Тип

Период Дата

Регистратор ДокументСсылка.<Имя>

НомерСтроки Число

<Измерение> Тип измерения

<Ресурс>Оборот Число

<Ресурс>Приход Число

<Ресурс>Расход Число

<Ресурс>НачальныйОстаток Число

<Ресурс>КонечныйОстаток Число

Возможные значения метода дополнения:

• Движения (выдаются те периоды, в которых были движения)

• ДвиженияИГраницыПериода (выбираются периоды, по которым были движения и существовали остатки на начало иконец)

Выбрать

Из РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(?эНеделя)

Практикум М17 ------------------------------------------------------------------

1. Напишите текст запроса, который при выполнении позволил бы получать остаток выбранной номенклатурной позиции на интересующую дату.2. Напишите текст запроса, который при выполнении выдавал бы данные, необходимые для «оборотки по месяцам» (номенклатурная позиция, остаток на начало периода, приход, расход, остаток на конец периода) за выбранный интервал дат.

Page 30: Механизм Запросов

3. Напишите текст запроса, который при выполнении выдаст данные о продажах номенклатуры по выбранному покупателю. При этом необходимо получать обороты как по покупателю, так и по отдельным номенклатурным позициям.4. Напишите текст запроса, который при выполнении выдаст остатки по номенклатурным позициям, выбранным в табличную часть документа «Расходная». Ссылка на документ выбирается из параметра. Остатки рассчитываются на дату также передаваемую вкачестве параметра.

Таблицы регистра бухгалтерии (с поддержкой корреспонденции)

Основная таблица

Хранятся записи регистра бухгалтерии

РсгистрБухгалтерии.<Имя>

Поле i in

МоментВремени Момент времени

Период Дата

Регистратор Любая ссылка

НомерСтроки Число

Активность Булево

СчетДт ПланСчетовСсылка,Имя. СчетДт

СчетКт ПланСчетовСсылка.Имя. СчетКт

<Измерение> Тип измерения

<Измерение>Дт Тип измерения

<Измерение>Кт Тип измерения

<Ресурс> Число

<Ресурс>Дт Число

<Ресурс>Кт Число

<Реквизит> Тип реквизита

Выбрать * Из РегистрБухгалтерии.Основной

Page 31: Механизм Запросов

Значения субконто

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

РегистрБухгалтерии.<Имя>.Субконто

Поле Тип

МоментВремени Момент времени

Период Дата

Регистратор Любая ссылка

НомерСтроки Число

Вид Движения Вид движения бухгалтерии

ВидСубконто ПданВидовХарактеристикСсылка.Имя

Значение Тип субконто

Выбрать * Из РегистрБухгалтерии.Основной.Субконто

Практикум No IX

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

Движения с субконто

Виртуальная таблица. Позволяет получить информацию о записях регистра вместе со значениями субконто.РегистрБухгалтерии. <Имя>, ДвиженияССубкойто( <Начало периода>? <Конец нериода>? <Условие>)Поле Тип

МоментВремени Момент времени

Период Дата

Регистратор Любая ссылка

НомерСтроки Число

Активность Булево

Page 32: Механизм Запросов

СчетДт ПланСчетовСсылка.Имя.СчетДт

СубконтоДт<№> Значение субконто

ВидСубконтоДт<№> ПланВ идовХарактеристикСсылка .Имя

СчетКт ПланСчетовСсылка.Имя. СчетКт

СубконтоКт<№> Значение субконто

ВидСубконтоКт<№> Пл анВ идовХарактеристикС сыл ка .Имя

<Измерение> Тип измерения

<Измерение>Дт Тип измерения

<Измерение>Кт Тип измерения

<Ресурс> Число

<Ресурс>Дт Число

<Ресурс>Кт Число

<Реквизит> Тип реквизита

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

Выбрать * Из РегистрБухгалтерии.Основной.Остатки

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

Выбрать * Из РегистрБухгалтерии.Основной.Обороты

Остатки и обороты

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

Выбрать * Из РегистрБухгалтерии.Основной.остаткиИОбороты С

Выбрать

* Из РегистрБухгалтерии.Основной.остаткиИОбороты(„Неделя)

Page 33: Механизм Запросов

Обороты Дт Кт

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

Выбрать

*

Из РегистрБухгалтерии.Основной.ОборотыДтКт

Таблицы последовательностей

Основная таблица

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

Пос л едовател ьность .<Имя>

Поле Тип

Период Дата

Регистратор ДокументСсылка><Имя>

НомерСтроки Число

МоментВремени Момент времени

<Измерение> Тип измерения

Таблица границ

Данная таблица последовательности.

предназначена для получения границ

Поел едовательностъ.<Имя>.Границы

Поле Тип

Период Дата

Регистратор ДокументСсылка.<Имя>

МоментВремени Момент времени

<Измерение> Тин измерения

Page 34: Механизм Запросов

Работа с объектом «запрос»

Изучая предыдущие разделы, вы работали с уже готовым отчетом, при этом изучая язык описания запросов. Пришло время познакомиться спорядком работы с объектом «Запрос» из встроенного языка системы «1С Предприятие 8.0».

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

1. Создание объекта «Запрос»2. Формирование текста запроса 3. Выполнение запроса 4. Обход результата выполнения запроса

Для более детального ознакомления рассмотрим принципы работы отчета «Знакомство с запросом». Текст процедуры, определенной в модуле формы приводится ниже:Процедура КнопкаСформироватьНажатие(Элемент) Запрос=Новый Запрос;

Запрос.Текст * ЭлементыФормы.ПолеТД.ПолучитьТекст();

Запрос.УстаяовитьПараметр("ТЧ\ ТЧ.ВыгрузитьКолонку("ТЧСсылка"));

Запрос.УстановитьПараметрС'НачПериода'^НачПериода);

Запрос.УстановитьПараметр(иКонПериодам,КонПериода);

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

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

Запрос.УстановитьПараметр(мЗначениеБулевои?ЗначенкеБулево);

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

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

ЭлементыФормы.тПоле.Значение=РезультатЗапроса.Выгрузить9;

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

33

Page 35: Механизм Запросов

Конструктор запросов, конструктор выходных форм

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

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

Page 36: Механизм Запросов

В случае, если отмечен левый флажок «Все», то используется «Левое соединение», и первой таблицей является «таблица №1», если только правое «Все», то также используется «Левое соединение», но первой таблицей является «Таблица №2». Если отмечены оба флажка, то это «Полное соединение», если оба сброшены - это «Внутреннее». На следующей закладке в случае необходимости определяется группировка (по каким полям будет производиться группировка, какие агрегатные функции будут рассчитываться).

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

Page 37: Механизм Запросов

В результате конструктор создаст выходную форму, пропишет необходимые процедуры (как это делается - указываем на последней закладке конструктора форм). В результате работы конструктора в модуле формы появилась следующая процедура:Процедура СформироватьНажатие(Элемент)

ТабДок = Новый ТабличныйДокумент;

ОтчетОбъект.Закупки(ТабДок);

ТабДок.ТолькоПросмотр = Истина;

ТабДок. ОтображатьСетку = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

ТабДок.Показать();

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

В модуле отчета:Процедура Закупки(ТабДок) Экспорт

Макет = ПолучитьМакет(иЗакупкии);

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

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

"ВЫБРАТЬ

| ПриходнаяТовары.Номенклатура КАК Номенклатура,

| ПриходнаяТовары.Номенклатура.Представление,

| СУММА(ПриходнаяТовары.Количество) КАК Количество,

| СУММА(ПриходнаяТовары.Сумма) КАК Сумма,

| Приходная.Контрагент КАК Контрагент,

| Приходная.Контрагент.Представление

|ИЗ

Документ.Приходная.Товары КАК ПриходнаяТовары

Использование запросов в системе "1С.Предприятие 8.0"

Page 38: Механизм Запросов

| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Приходная КАК Приходная | ПО ПриходнаяТовары. Ссылка = Приходная.Ссылка

I^ГРУППИРОВАТЬ ПО

| ПриходнаяТовары.Номенклатура,

| Приходная. Контрагент

|ИТОГИ ПО

| ОБЩИЕ";

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

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

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

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

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

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

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

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

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

ВыборкаОбщийИтог -

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

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

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

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

ВыборкаОбщийИтог.ВыбратьО; Пока

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

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

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

КонецЦикла;

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

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

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

Практикум № 19 ____________________________________________

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

Page 39: Механизм Запросов

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

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

• Прямой

• ПоГруппировкам

• ПоГруппировкамСИерархией

Разбираться с порядком обхода будем на примере отчета «ПорядокОбхода»

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

38

Page 40: Механизм Запросов

Процедура ВыполнитьНажатие(Элемент)

ТабДок = ЭлементыФормы.тблРезультат;

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

ВыполнитьОтче^ТабДок^лементыФормы.ТПоле^бходРезультата);

ТабДок. ТолькоПросмотр = Истина;

ТабДок.Показать(); КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)

НастройкаПериода = Новый НастройкаПериода;

НастройкаПериода.УстановитьПериод(НачПериода, КонецДня(КонПериода));

НастройкаПериода.РедактироватьКакИнтервал = Истина;

НастройкаПериода.РедактироватьКакПериод = Истина;

НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;

НастройкаПериода.Редактировать();

НачПериода = НастройкаПериода.ПолучитьДатуНачала();

КонПериода - НастройкаПериода.ПолучитьДатуОкончания();

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

ЭлементыФормы.ОбходРезультата.СписокВыбора. Добавить

(ОбходРезультатаЗапроса.Прямой, "Прямой");

ЭлементыФормы.ОбходРезультата.СписокВыбора.Добавить

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

ЭлементыФормы.ОбходРезультата.СписокВыбора.Добавить

(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "По иерархии"); _________________

Текст модуля отчета:Процедура ВыдатьРекурсивно(ВыборкаДетальная,ЗначНомер,ТабДок,Секция,ОбходРезультата)

Номер=Номер+1; Пока ВыборкаДетальная.Следующий() Цикл Секция.Параметры.Поставщик = В ыборкаДетальная.

Поставщик; Секция.Параметры.Наименование = В ыборкаДетальная. НаименованиеНоменклатуры;

Секция.Параметры.Колво = ВыборкаДетальная.Количество; Секция. Параметры.

Сумма = ВыборкаДетальная. Сумма; Секция.Параметры.ТипЗаписи =

ВыборкаДетальная.ТипЗаписи(); Секция.Параметры.Уровень =

ВыборкаДетальная.Уровень(); Секция.Параметры.Номер = Номер;

ТабДок.Вывести(Секция, ВыборкаДетальная.Уровень()); ВыборкаДетальная2 =

ВыборкаДетальная.Выбрать(ОбходРезультата);

ВыдатьРекурсивно(ВыборкаДетальная2,Номер,ТабДок,Секция,ОбходРезультата);

КонецЦикла;

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

Page 41: Механизм Запросов

Процедура ВыполнитьОтчет(ТабДок,ТП,ОбходРезультата) Экспорт Перем ОбщиеИтогиСумма;

Перем ОбщиеИтогиКоличество;

Макет = ПолучитьМакет(иПродолжениеМакет");

Секция = Макет.ПолучитьОбласть(нШапкаи); Секция.Параметры.ПериодС = Формат(КонПериода, ИДЛФ=О");

Секция.Параметры.ПериодПо * Формат(КонПериода, "ДЛФ^Б"); ТабДок.Вывести(Секция);

Секция = Макет.ПолучитьОбластьС'Позиция11); Запрос = Новый Запрос;

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

|Ссылка.Контрагент Как Поставщик,

Номенклатура, Номенклатура.Наименование НаименованиеНоменклатуры,

(Количество Количество, Сумма Сумма |ИЗ Документ.Приходная.Товары

|Где Ссылка.Дата Между &НачПериода И &КонПериода

[УПОРЯДОЧИТЬ ПО НоменклатураЛаименование |ИТОГИ Сумма(Количество),

Сумма(Сумма) ПО ОБЩИЕ, Поставщик, Номенклатура ИЕРАРХИЯ

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

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

Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));

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

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

ТП.СоздатьКолонки();

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

Номер=0;

ВыборкаОсновная = РезультатЗапроса.Выбрать(ОбходРезультата);

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

Секция.Параметры.Наименование =

ВыборкаОсновная.НаименованиеНоменклатуры;

Секция.Параметры.Поставщик = ВыборкаОсновная.Поставщик;

Секция.Параметры.Колво = ВыборкаОсновная.Количество;

Секция.Параметры.Сумма = ВыборкаОсновная.Сумма;

Секция.Параметры.Номер =* Номер;

Секция.Параметры.ТипЗаписи = ВыборкаОсновная.ТипЗаписи();

Секция.Параметры.Уровень = ВыборкаОсновная.Уровень();

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

ВыборкаДетальная = ВыборкаОсновная.Выбрать(ОбходРезультата);

ВьщатьРекурсивно(ВыборкаДетальная,Номер,ТабДок,Секция,ОбходРезультата);

КонецЦикла;

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

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

Page 42: Механизм Запросов

Создайте данный отчет, выбирая различные порядки обхода, смотрите получаемый результат.Практикум № 201. При линейном порядке обхода замените метод «ВыборкаОсновная.СледующийО» на «ВыборкаОсновная. СледующийПоЗначениюПоля ("Номенклатура")», посмотрите полученный результат.

Просмотр иерархии запроса в «дереве»

Модифицируйте отчет «Знакомство с запросом». В качестве типа значения элемента управления «табличное поле» (имя «тПоле») выберите «ДеревоЗначений»:

▼Основные:

Кроме этого в тексте процедуры модуля формы необходимо модифицировать одну строку кода:РезультатЗапроса = Запрос.Выполнить();

ЭлементыФормы.тПоле,Значение=

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

ЭлементыФормы.тПоле.СоздатьКолонки();

Выполните какой-либо запрос, содержащий раздел «Итоги». Например, текст запроса может быть следующим:ВЫБРАТЬ

Приходная.Контрагент КАК Контрагент,

ПриходнаяТовары.Номенклатура КАК Номенклатура,

ПриходнаяТовары.Количество КАК Количество,

ПриходнаяТовары.Сумма КАК Сумма ИЗ

Документ.Приходная.Товары КАК ПриходнаяТовары

ЛЕВОЕ СОЕДИНЕНИЕ Документ.Приходная КАК Приходная ПО

ПриходнаяТовары.Ссылка = Приходная. Ссылка

ИТОГИ СУММА(Количество), СУММА(Сумма) ПО

ОБЩИЕ,

Контрагент,

Номенклатура ИЕРАРХИЯ______________________________________

Практикум № 21 ____________________________________________

41

Page 43: Механизм Запросов

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

Работа с вложенными таблицами

Вернемся к понятию «вложенные» таблицы. Рассмотрим отчет «Вложенная таблица». В его модуле расположена следующая процедура:Процедура ВыполнитьОтчет(ТабДок) Экспорт

Перем ОбщиеИтогиСумма; Перем

ОбщиеИтогиКоличество;

Макет = ПолучитьМакет("ПродолжениеМакетм);

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

ТабДок.Вывести(Секция);

Секция = Макет.ПолучитьОбласть("Позиция");

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

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

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

|ВЫБРАТЬ

[Контрагент Как Поставщик,

Товары.(Номенклатура,Количество) |ИЗ

Документ.Приходная

Запрос.Текст = ТекстЗапроса; РезультатЗапроса -

Запрос.Выполнить(); ВыборкаОсновная =

РезультатЗапроса.Выбрать(); Пока

ВыборкаОсновная.Следующий() Цикл

СекцияП.Параметры.Наименование =

ВыборкаОсновная.Поставщик;

ТабДок.Вывести(СекцияП);

ВыборкаДетальная = ВыборкаОсновная.Товары.Выбрать();

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

Page 44: Механизм Запросов

Секция.Параметры.Наименование = ВыборкаДетальная.Номенклатура;

Секция.Параметры.Колво == ВыборкаДетальная.Количество;

ТабДок.Вывести(Секция); КонецЦикла; КонецЦикла; КонецПроцедуры

Дополните текст запроса следующей строкой и просмотрите полученный результат.Упорядочить По Товары.Номенклатура.Наименование Возр

1

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

Сводная таблица

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

Если Сводная Тогда СводнаяТаблица = ЭлементыФормы.ПТД.ВстроенныеТаблицы.Сводная;СводнаяТаблица.ИсточникДанных = РезультатЗапроса;Если СводнаяТаблица.Колонки.Количество() = О И

СводнаяТаблица.Строки.Количество() = О ИСводнаяТаблица.Данные.Количество() = 0 Тогда

СводнаяТаблица.Обновление вЛожь;СводнаяТаблица.Колонки.Добавить("ИзмерениеГ); СводнаяТаблица.Строки.Добавить(мИзмерение2"); СводнаяТаблица.Данные.Добавить("Сумма"); СводнаяТаблица. Обновление = Истина;КонецЕсли;КонецЕсли; ___ ______________________

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

Page 45: Механизм Запросов

В данном примере названия измерений: «Измерение 1» и«Измерение2», данных: «Сумма» являются частным случаем (пример реализации, а не особенность механизма).

Построитель отчета

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

Построитель.Текст="ВЫБРАТЬ

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

ПродажиОбороты.Номенклатура КАК Номенклатура, |

СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество, |

СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма

риз РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

I[СГРУППИРОВАТЬ ПО

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

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

|ИТОГИПО

| Контрагент,

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

Построитель.ЗаполнитьНастройки();

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

Процедура ПостроительВывести(Кнопка)

Построитель.Выполнить();

Построитель.Вывести();

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

Проверьте работоспособность приведенного механизма.

Page 46: Механизм Запросов

Язык запросов построителя отчета

Язык запросов построителя отчетов представляет собой текст запроса с дополнительными синтаксическими элементами, предназначенными для работы построителя.Модифицируем текст запроса в данном отчете:Построитель.Текст="ВЫБРАТЬ

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

| ПродажиОбороты.Номенклатура КАК Номенклатура,

СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество, |

СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма |ИЗ

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

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

(СГРУППИРОВАТЬ ПО

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

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

|{Итоги По Номенклатура.* Как Номенклатура}

[ИТОГИ ПО

| Контрагент

Просмотрите полученный результат.

Page 47: Механизм Запросов

Практикум № 221. Напишите текст запроса, выполнение которого приведет к

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

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

3. Напишите текст запроса, выполнение которого приведет кполучению данных о том: какой поставщик какой товар закупает.

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

5. Получите суммовые обороты (понедельно) по контактным лицам.

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

Рекомендации в завершении курса

Читайте соответствующие разделы на дисках Информационно-Технологического Сопровождения (ИТС). Там можно почерпнуть массу полезной (в том числе и по запросам) информации. К примеру:рекомендации по использованию параметров виртуальных таблиц,отборов при написании текста запроса и т.д. Диски ИТС выпускаются фирмой «1С» ежемесячно. Более подробно про диски ИТС можно прочитать на сайте фирмы «1С»(http://www.lc.rxi/rus/support/its/its.htm).

Приношу извинения за качество… сканировал в авральном режиме.

С Уважением PavelYa он же FreeDragon, Мастер.