Как сделать отбор в запросе 1с

Обновлено: 07.07.2024

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

Синтаксические элементы расширения языка запросов системы компоновки данных

ВЫБРАТЬ

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

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

Например, запись Номенклатура.* обозначает возможность использования дочерних полей поля «Номенклатура» (например, поля «Номенклатура.Код»). Элемент ВЫБРАТЬ может присутствовать только в первом запросе объединения.

Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ.

Нехитрый пример

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

Для решения задачи можно составить запрос соединяющий левым соединением номенклатуру и таблицу оборотов Продажи, в результате, для номенклатуры, которая не продавалась в выбранном периоде мы получим значения полей Контрагент, Договор, Количество, Сумма = Null. Такой запрос:

Вот результат:

Контрагент Договор Номенклатура Количество Сумма
null null _Тест1 null null
ООО "Рога и копыта" Договор1 Тапочки 10 1200
ОАО "Газпром" Клевый договор Сапоги 5 13000
null null Галоши null null
null null Сланцы null null

- в данном примере не было продаж номенклатуры: "Галоши" и "Сланцы"

И все бы ничего, если мы сгруппируем выборку по контрагенту то вся не продаваемая номенклатура попадет в отдельную группировку, где Контрагент = Null, но клиент хочет иметь в отчете произвольный отбор по полю контрагент(естественно имеется ввиду контрагент из регистра Продажи). Как быть? Ведь по сути нам нужно фильтровать только таблицу Продажи. Если мы используем автозаполнение в конструкторе СКД, то в доступные поля отбора попадет поле Контрагент, все вроде бы хорошо, но при исполнении отчета с отбором по контрагенту мы потеряем все записи из соединения с номенклатурой. Например, установим отбор: Контрагент = ООО "Рога и копыта". Результат будет выглядеть так:

Контрагент Договор Номенклатура Количество Сумма
ООО "Рога и копыта" Договор1 Тапочки 10 1200

- совсем не то что нам нужно, правда?

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

Решение есть: для этого в конструкторе запросов на вкладке Компоновка данных => Таблицы добавим поле-условие в условия виртуальной таблицы ПродажиОбороты и сменим ему псевдоним на КонтрагентОтбор


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


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

И соответственно результат:

Контрагент Договор Номенклатура Количество Сумма
null null _Тест1 null null
ООО "Рога и копыта" Договор1 Тапочки 10 1200
null null Сапоги null null
null null Галоши null null
null null Сланцы null null

_Тест1 - это группа в справочнике Номенклатура, в которой все лежит

К публикации прикреплена схема XML-схема отчета, использовавшегося в публикации. Схему создавал в Комплексной автоматизации, но думаю, все будет прекрасно работать и в УПП и в УТ 10

Подведение итогов

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

Если же вы имеете достаточно опыта, чтобы создавать схемы без использования Автозаполнения - то данный совет не имеет смысла.

Как задать отбор по Типу документа?
Как указать условие для отбора не определенного значения?
Как в языке запросов 1С отобрать не заполненное значение?
Какое условие указать в запросе после ключевого слова «ГДЕ», когда нужно сделать отбор по не заполненным полям?
Код 1C v 8.х
источник

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 13.06.2012   Прочитано: 57749

Распечатать

Похожие FAQ

Еще в этой же категории

Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL())  48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе  22
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х  22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО  18
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы

Как задать отбор по Типу документа?
Как указать условие для отбора не определенного значения?
Как в языке запросов 1С отобрать не заполненное значение?
Какое условие указать в запросе после ключевого слова «ГДЕ», когда нужно сделать отбор по не заполненным полям?
Код 1C v 8.х
источник

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 13.06.2012   Прочитано: 57750

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Google maps : вывод точек на карту и режим панорамы  7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML"  10
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки " Универсальный обме Внешние источники данных  0
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес пр Посмотреть все результаты поиска похожих

Еще в этой же категории

Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL())  48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе  22
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х  22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО  18
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы


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

При создании критерия отбора на закладке Данные нужно указать те типы, для которых будет формироваться выборка. Можно отметить несколько типов:

Критерий отбора

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

Состав критерия отбора

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

Пример использования

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

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

Видимость критерия отбора

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

Форма критерия отбора

На закладке Формы можно создать свою форму критерия отбора и программно открыть ее:

Читайте также: