Результат запроса как параметр запроса

Общая схема выполнения запросов

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

Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.

Для работы с запросами в системе «1С:Предприятие 8» предусмотрено несколько специальных объектов, а именно:

Общая схема выполнения запроса такова:

Графически это можно представить следующим образом:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Цифрами на схеме обозначены следующие действия:

1. Установка текста запроса

Объект «Запрос» имеет свойство «Текст», которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта «Запрос». В последнем случае текст запроса передается в качестве параметра в конструктор объекта «Запрос» при его создании.

2-й вариант (с другим текстом запроса):

2. Установка параметров запроса

Объект «Запрос» имеет метод «УстановитьПараметр», с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком «&» (например, параметр «ВыбГруппа» в первом запросе).

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

3. Выполнение запроса

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

Далее возможны три варианта:

4. Получение выборки из результата запроса

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

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

6. Формирование сводной таблицы

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

Источник

Запрос с параметром из другого запроса

а где такое написано? По моему, mymyka писал о том, что 1000 строк выборки приходят с SQL сервера на сервер 1с и уже на сервере 1с, накладываются ограничения по условию ГДЕ. Результат полученный на сервере 1с(после ГДЕ. 100 строк) возвращаются пользователю.

По этому, на экзаменах «спец по платформа», установка условия через «ГДЕ» в виртуальных таблицах, считается критической ошибкой.

(24) andadra, (24) andadra,

Как работать с результатом пакетного запроса предлагаю подсмотреть в синтакс-помощнике.

Первый запрос переделать бы надо.
РегистрНакопления.ОстаткиБланков.Остатки(&Период, <условие по владельцу бланка>) КАК ОстаткиБланков
и соединение убрать
поместить во временную таблицу, например ВТ_СписокБланков.

Второй запрос
ПродажиБланков.НомерБланка В(выбрать ВТ_СписокБланков.НомерБланка Из ВТ_СписокБланков)

(30) Если СуммаОсновнойОрганизации есть Null, значит в РегистрНакопления.ПродажиБланков не нашлось записей, удовлетворяющих условию.

Ага, в код еще нужно добавить строку:

Цитата с сайта ИТС:

Использование отборов в запросах с виртуальными таблицами

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

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

1. Запрос с использованием отбора заданного конструкцией языка запросов

2. Запрос с использованием отбора заданного параметром виртуальной таблицы

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

Источник

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

1С 8.3 Параметры в запросе

&НаСервере
Процедура ПередачаПараметровПростыхТиповВЗапросе ()

// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР» );

&НаСервере
Процедура ПередачаПараметровСсылочныхТиповВЗапросе ()

// Создание отбора по материалам с единицей измерения «Куб.см.»
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер» );

&НаСервере
Процедура ПередачаПараметровСписочногоТипаВЗапросе ()

// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)» );

&НаСервере
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе ()

Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)» );

&НаСервере
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр ()

// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ» );

Источник

Передача значений в запрос 1С

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

Значения в запрос можно передать несколькими способами:

Использование параметров запроса

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

В тексте запроса перед именем параметра ставится символ &. Установка значений параметров производится методом

УстановитьПараметр ( ИмяПараметра >, ЗначениеПараметра >)

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

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

Ключевое слово ЗНАЧЕНИЕ

В запросе можно обратиться к предопределенным данным конфигурации без использования параметров. При помощи ключевого слова ЗНАЧЕНИЕ в запрос можно передать такие данные, как:

Пример обращения к предопределенным значениям в запросе:

Результатом запроса будут все элементы справочника Номенклатура с типом Услуга.

Ключевое слово ДАТАВРЕМЯ

К значениям типа дата в запросе можно обратиться при помощи конструкции

ДАТАВРЕМЯ ( Год >, Месяц >, День >, Час >, Минута >, Секунда >)

Все параметры здесь — целые числа. Последние три параметра (Час, Минута, Секунда) указывать не обязательно.
Максимальная дата, которую можно задать — 31.12.3999 23:59:59.

Пример обращения к пустой дате в запросе:

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

Ключевое слово ТИП

Обращение к типу ТИП в запросе осуществляется конструкцией

Здесь ИмяТипа может принимать имя примитивного типа или имя таблицы ссылочного типа.
Примеры использования в запросе:

ТИП(Строка)
ТИП(Число)
ТИП(Справочник.Пользователи)
ТИП(Документ.РасходныйКассовыйОрдер)
ТИП(ПланВидовХарактеристик.СтатьиРасходов)

Обращение к примитивным типам в запросе

Значения типов Булево, Число, Строка, Неопределено в языке запросов задаются так же, как и во встроенном языке.
Пример обращения к примитивным типам в запросе:

Результатом запроса будут все проведенные документы ПриходныйКассовыйОрдер с суммой документа больше 1000 и реквизитом «Принято от» равным «Иванов И.И.». Обратите внимание, что здесь переменная типа Строка указана в двух двойных кавычках. Необходимо использовать именно такой синтаксис.

Остались вопросы?
Спросите в комментариях к статье.

Источник

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

Важно! Все действия в этом разделе проводились на платформе 8.3.15. Некоторые на платформе 8.3.14. В конфигурации режим совместимости установлен как «Не используется».

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

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

Для детальных записей это выглядит так:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

При наличии группировок так:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Использовать группировки запроса если возможно

Начиная с определенного релиза платформы 1С (по-моему, с 8.3.14) в СКД появилась для «наборов данных запрос» опция «Использовать группировки запроса если возможно»:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

В отчете с группировкой по номенклатуре и ресурсами «Количество» и «Сумма» получаем:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Слева запрос без опции, справа с установленной опцией. Как видно с установленной опцией свертка данных производится на стороне СУБД.

Что означает «если возможно»? Если рассмотрим такой текст запроса:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

То на него указанная опция не действует. Видимо к регистрам накопления «невозможно» применить эту опцию:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Этот пример мы уже рассматривали в предыдущем разделе про расширение языка запросов. Повторим еще раз и рассмотрим чуть больше примеров:

Исходный текст запроса:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Если не задан ни один параметр:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Если задан один параметр:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Если заданы оба параметра:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Такой пример мы тоже уже разбирали. Исходный запрос:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Если выбрано поле остатка:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Если поле остатка не выбрано:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Теперь рассмотрим запрос чуть сложнее:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

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

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

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Странно конечно получается, если мы запрос создаем в конструкторе запросов (до этого в первом исходном запросе я расставил скобки «<>» руками):

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

Таблицы расположены в разных группах, но как бы одна внутри другой:

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Результат запроса как параметр запроса. Смотреть фото Результат запроса как параметр запроса. Смотреть картинку Результат запроса как параметр запроса. Картинка про Результат запроса как параметр запроса. Фото Результат запроса как параметр запроса

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *