Когда тогда в запросе 1с
Перейти к содержимому

Когда тогда в запросе 1с

  • автор:

Запросы, динамические списки и отчеты на СКД: требования по локализации

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

ЗапросПоВерсиям = Новый Запрос(" |ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА ""выпущена"" | ИНАЧЕ ""в разработке"" |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии");
ТекстЗапроса = "ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'"));
ЗапросПоВерсиям = Новый Запрос(" |ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии"); ЗапросПоВерсиям.УстановитьПараметр("ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ЗапросПоВерсиям.УстановитьПараметр("ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'"));

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

а) в запросе указывать строковые константы, соответствующие «Правилам образования имен переменных» («»ЗавершитеСозданиеДокументов» КАК Рекомендация «), а в списке доступных значений поля указать локализуемый строковый литерал («Завершите создание документов»);

б) либо значение таких параметров с помощью функции НСтр устанавливать не в колонке Выражение, а в модуле отчета в обработчике события ПриКомпоновкеРезультата

ВЫБОР КОГДА ВидОперации = "Отгрузка клиентам" ТОГДА 1 КОГДА ВидОперации = "Возвраты товаров от клиентов" ТОГДА 2 КОГДА ВидОперации = "Приемка от поставщиков" ТОГДА 3 КОНЕЦ
ВЫБОР КОГДА ВидОперации = &ВидОперацииОтгрузкаКлиентам ТОГДА 1 КОГДА ВидОперации = &ВидОперацииВозвратыТоваровОтКлиентов ТОГДА 2 КОГДА ВидОперации = &ВидОперацииПриемкаОтПоставщиков ТОГДА 3 КОНЕЦ

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

Выбор Когда Объект = Раздел Тогда Выбор Когда Раздел = Значение(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) Тогда "" Иначе "" Конец Иначе Объект Конец
Выбор Когда Объект = Раздел Тогда Выбор Когда Раздел = Значение(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) Тогда НСтр("ru=''") Иначе НСтр("ru=''") Конец Иначе Объект Конец

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

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

См. также

Когда тогда в запросе 1с

Подскажите пож, можно ли использовать конструкцию в запросе

ВЫБРАТЬ
.
ВЫБОР
КОГДА условие1
ТОГДА значение1
КОГДА условие2
ТОГДА значение2
КОГДА (ВЫБРАТЬ
..
ИЗ ..) = ИСТИНА
ТОГДА значение3
ИНАЧЕ значение4
..
ИЗ
..

то есть в одном из полей использовать запрос?

нет. ВЫБОР применяется к каждой строке выборки

(1) Че за ерунда, можно канечно.

Обычная конструкция SELECT CASE

Пробую написать в конструкторе в поле

ВЫБОР
КОГДА
ТОГДА
КОГДА
ТОГДА
КОГДА
ТОГДА
КОГДА
ТОГДА
КОГДА ЕСТЬNULL(выбрать 1 из истина, ЛОЖЬ) = ИСТИНА
ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
ИНАЧЕ 0
КОНЕЦ

ругается на то, что синтаксическая ошибка и «ожидается выражение выбрать»..

(2) почитай топик внимательно.

(3) в КОГДА так нельзя

(3) Может я неправильно понял тебя))

Вот как ты написал в примере правильно сказано в (1).

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

(3) > выбрать 1 из истина

(8)
это толпа единичек. колво= колво записей ВТ истина.
я так думаю (с)
(0) Нельзя
(6) Ни где нельзя, не только в поле.
Можно только IN (SELECT)

(6) Давай обратимся к матчасти:

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

Литералы типов: число, строка (в кавычках), булево (значения Истина и Ложь), Null, Неопределено. [Замечание: Чтобы указать литерал типа «дата», можно воспользоваться ключевым словом языка запросов ДАТАВРЕМЯ или передать дату через параметр запроса].
Параметры запроса (со знаком &)
Имя поля
Имя табличной части
Разыменование ссылочного поля (через одну или несколько точек)
Арифметические операции (+, -, /, *) [Замечание: операция получения остатка % в языке запросов не поддерживается]
Операция конкатенации строк (+) [Замечание: операцию конкатенации нельзя использовать для виртуальных полей]
Встроенные функции языка запросов (ДЕНЬ, МЕСЯЦ, ГОД и т.д.)
Агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, КОЛИЧЕСТВО)
Операция выбора ВЫБОР / CASE — позволяет получить одно из возможных значений в соответствии с указанными условиями.
Операция приведения типов ВЫРАЗИТЬ / CAST

(10) «Можно только IN (SELECT)» — то есть, что то вроде этого

ВЫБОР
КОГДА
ТОГДА 1
КОГДА
ТОГДА 2
КОГДА
ТОГДА 3
КОГДА
ТОГДА 4
КОГДА ИСТИНА В (ВЫБРАТЬ .. ИЗ ..)
ТОГДА 5
ИНАЧЕ 0
КОНЕЦ

Предложение ВЫБРАТЬ (SELECT) в языке запросов 1С:Предприятия 8

В данной статье рассмотрено предложение ВЫБРАТЬ, его место и роль в языке запросов 1С:Предприятия 8.

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

Ниже рассмотрены следующие темы:

  • Место предложения ВЫБРАТЬ в структуре запроса 1С:Предприятия 8
  • Примеры запросов с предложением ВЫБРАТЬ:
    • Выборка всех полей (кроме виртуальных) из таблиц
    • Выборка только определенных полей из таблиц
    • Виртуальные поля
    • Разыменование ссылочных полей
    • Псевдонимы полей (ключевое слово КАК / AS)
    • Обращение к табличной части как вложенной таблице
    • Обращение к табличной части как таблице-источнику
    • Ключевое слово РАЗЛИЧНЫЕ / DISTINCT
    • Ключевое слово ПЕРВЫЕ / TOP
    • Выражения в списке полей выборки

    Место предложения ВЫБРАТЬ в структуре запроса

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

    Из приведенной схемы можно сделать следующие выводы:

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

    Примеры запросов с предложением ВЫБРАТЬ

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

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

    //обращение к таблице справочника
    ВЫБРАТЬ * ИЗ Справочник.Номенклатура

    //обращение к таблице документа
    ВЫБРАТЬ * ИЗ Документ.РасходныйКассовыйОрдер

    //обращение к основной таблице регистра накопления
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании

    //обращение к виртуальной таблице регистра накопления
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

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

    Копировать в буфер обмена

    //выборка всех невиртуальных полей из таблицы справочника
    ВЫБРАТЬ Справочник.Номенклатура.*

    //выборка определенных полей из таблицы справочника
    ВЫБРАТЬ
    Справочник.Номенклатура.Код,
    Справочник.Номенклатура.Наименование,
    Справочник.Номенклатура.Представление //виртуальное поле

    2. Выборка только определенных полей из таблиц

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

    //обращение к таблице справочника
    ВЫБРАТЬ Код, Наименование, Артикул, СтранаПроисхождения
    ИЗ Справочник.Номенклатура

    //обращение к таблице документа
    ВЫБРАТЬ Номер, Дата, ПодразделениеКомпании, СуммаДокумента
    ИЗ Документ.РасходныйКассовыйОрдер

    3. Виртуальные поля

    Некоторые поля в таблицах-источниках виртуальные, например, поле «Представление» для таблицы справочника и документа, или поле «МоментВремени» для документа. Это значит, что они не хранятся в базе данных, а генерируются «на лету». Виртуальные поля не включаются в результат запроса, когда вместо списка полей указана звездочка («*»), их нужно указывать явно, например «ВЫБРАТЬ *, Представление ИЗ Справочник.Товары». Такое решение было принято для ускорения выполнения классического запроса «ВЫБРАТЬ * ИЗ. ». В этом случае не требуется генерировать представления для элементов справочников и документов, следовательно запросы будут выполняться быстрее.

    //обращение к таблице справочника (выбрать два обычных поля и одно виртуальное)
    ВЫБРАТЬ Код, Наименование, Представление
    ИЗ Справочник.Номенклатура

    //обращение к таблице документа (выбрать все невиртуальные поля и два виртуальных)
    ВЫБРАТЬ *, Представление, МоментВремени
    ИЗ Документ.РасходныйКассовыйОрдер

    4. Разыменование ссылочных полей

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

    //обращение к свойству объекта через одну точку
    ВЫБРАТЬ
    Ссылка,
    ЮрФизЛицоКонтрагента . ИНН,
    ПодразделениеКомпании . Код
    ИЗ Документ.РасходныйКассовыйОрдер

    //обращение к свойствам объектов через несколько точек
    ВЫБРАТЬ
    Ссылка,
    Ответственный . ОсновнойБанковскийСчет . Банк . КоррСчет
    ИЗ Документ.АвансовыйОтчет

    5. Псевдонимы полей (ключевое слово КАК / AS)

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

    ВЫБРАТЬ
    Ссылка КАК Документ,
    Ответственный КАК МатериальноОтветственный
    ИЗ Документ.АвансовыйОтчет
    УПОРЯДОЧИТЬ ПО МатериальноОтветственный

    Ключевое слово КАК является необязательным, то есть вышеприведенный запрос можно записать так:

    ВЫБРАТЬ
    Ссылка Документ,
    Ответственный МатериальноОтветственный
    ИЗ Документ.АвансовыйОтчет

    6. Обращение к табличной части как вложенной таблице

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

    //получение табличной части как вложенной таблицы результата запроса
    ВЫБРАТЬ Номер, Дата, Товары
    ИЗ Документ.АвансовыйОтчет

    //получение нескольких колонок табличной части как вложенной таблицы
    ВЫБРАТЬ Номер, Дата, Товары.(Номенклатура, Количество)
    ИЗ Документ.АвансовыйОтчет

    Обратите внимание, что если выполнить следующий запрос, то в результате запроса будет две вложенные таблицы: в первой — одна колонка Номенклатура, а во второй — колонка Количество:

    ВЫБРАТЬ Номер, Дата, Товары.Номенклатура, Товары.Количество
    ИЗ Документ.АвансовыйОтчет

    7. Обращение к табличной части как таблице-источнику

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

    //выборка всех полей из табличной части
    ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет.Товары

    // выборка определенных полей из табличной части
    ВЫБРАТЬ Номенклатура, Количество, Цена, Сумма
    ИЗ Документ.АвансовыйОтчет.Товары

    //задание псевдонимов для полей табличной части
    ВЫБРАТЬ Документ.АвансовыйОтчет.Товары.(Номенклатура, Сумма КАК СуммаПоСтроке)

    //обращение к реквизитам документа и реквизитам табличной части (поле Ссылка)
    ВЫБРАТЬ
    Ссылка.Номер, Ссылка.Дата, Ссылка.Ответственный, //реквизиты документа
    Номенклатура, Количество, Цена, Сумма //реквизиты табличной части
    ИЗ Документ.АвансовыйОтчет.Товары

    8. Ключевое слово РАЗЛИЧНЫЕ / DISTINCT

    Ключевое слово РАЗЛИЧНЫЕ позволяет оставить в результате запроса только отличающиеся строки.

    ВЫБРАТЬ РАЗЛИЧНЫЕ Ответственный
    ИЗ Документ.АвансовыйОтчет

    9. Ключевое слово ПЕРВЫЕ / TOP

    Данное ключевое слово позволяет ограничить выборку несколькими первыми записями. Часто это ключевое слово применяется в комбинации с сортировкой (предложение УПОРЯДОЧИТЬ ПО).

    ВЫБРАТЬ ПЕРВЫЕ 10 Номер, Дата, СуммаДокумента
    ИЗ Документ.АвансовыйОтчет
    УПОРЯДОЧИТЬ ПО СуммаДокумента УБЫВ

    10. Выражения в списке полей выборки

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

    • Литералы типов: число, строка (в кавычках), булево (значения Истина и Ложь), Null, Неопределено. [ Замечание : Чтобы указать литерал типа «дата», можно воспользоваться ключевым словом языка запросов ДАТАВРЕМЯ или передать дату через параметр запроса].
    • Параметры запроса (со знаком &)
    • Имя поля
    • Имя табличной части
    • Разыменование ссылочного поля (через одну или несколько точек)
    • Арифметические операции (+, -, /, *) [ Замечание : операция получения остатка % в языке запросов не поддерживается]
    • Операция конкатенации строк (+) [ Замечание : операцию конкатенации нельзя использовать для виртуальных полей]
    • Встроенные функции языка запросов (ДЕНЬ, МЕСЯЦ, ГОД и т.д.)
    • Агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, КОЛИЧЕСТВО)
    • Операция выбора ВЫБОР / CASE — позволяет получить одно из возможных значений в соответствии с указанными условиями.
    • Операция приведения типов ВЫРАЗИТЬ / CAST

    Ниже приведено несколько примеров с выражениями в списке полей выборки:

    //арифметические операции
    ВЫБРАТЬ
    Номенклатура,
    Количество * Цена КАК РасчСумма1,
    Сумма / Количество КАК РасчСумма2
    ИЗ Документ.АвансовыйОтчет.Товары

    //литералы типа «булево», «число», «строка», «дата»
    ВЫБРАТЬ Истина, Ложь, 10.5, «Текст», ДАТАВРЕМЯ(2003,12,25)

    //конкатенация строк
    ВЫБРАТЬ «Сотрудник » + Ответственный.Наименование
    ИЗ Документ.АвансовыйОтчет

    //агрегатные функции
    ВЫБРАТЬ
    ПодразделениеКомпании,
    СУММА(СуммаДокумента),
    МАКСИМУМ(СуммаДокумента),
    МИНИМУМ(СуммаДокумента),
    СРЕДНЕЕ(СуммаДокумента),
    КОЛИЧЕСТВО(*)
    ИЗ Документ.АвансовыйОтчет
    СГРУППИРОВАТЬ ПО ПодразделениеКомпании

    //операция выбора
    ВЫБРАТЬ Наименование,
    ВЫБОР
    КОГДА СтранаПроисхождения.Наименование = «КИТАЙ» ТОГДА «Азия»
    КОГДА СтранаПроисхождения.Наименование = «ТАЙВАНЬ» ТОГДА «Азия»
    КОГДА СтранаПроисхождения.Наименование = «США» ТОГДА «Америка»
    КОГДА СтранаПроисхождения.Наименование = «КАНАДА» ТОГДА «Америка»
    ИНАЧЕ «Другое»
    КОНЕЦ КАК Страна
    ИЗ Справочник.Номенклатура

    //операция приведения типов
    ВЫБРАТЬ
    Ссылка,
    Номенклатура,
    ВЫРАЗИТЬ(Сумма / 3 КАК Число(5,2)) КАК ТретьСуммы
    ИЗ Документ.АвансовыйОтчет.Товары

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

    Все функции и конструкции языка запросов 1С 8.2 и 1с 8.3

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

    Функции языка запросов 1с

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

    1. Функция ДАТАВРЕМЯ — данная функция создает константное поле с типом «Дата».

    Запрос.Текст = "ВЫБРАТЬ | ДАТАВРЕМЯ(2015, 3, 1) КАК ПервоеМарта" ; // 1 марта 2015

    2. Функция РАЗНОСТЬДАТ — возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.

    Запрос.Текст = "ВЫБРАТЬ | РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015, 4, 17), ДАТАВРЕМЯ(2015, 2, 1), ДЕНЬ) | КАК КолвоДней";

    3. Функция ЗНАЧЕНИЕ — задает константное поле с предопределенной записью из базы данных, также можно получить пустую ссылку любого типа.

    Запрос.Текст = "ВЫБРАТЬ //предопределенный элемент | ЗНАЧЕНИЕ(Справочник.Валюты.Доллар) КАК Доллар, //пустая ссылка | ЗНАЧЕНИЕ(Документ.ПоступлениеТоваровУслуг.ПустаяСсылка) КАК Поступление, //знач. перечисления | ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ФизЛицо) КАК ФизЛицо, //предопределенный счет | ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы) КАК Счет_10" ;

    4. Функция ВЫБОР — перед нами аналог конструкции ЕСЛИ который используется в коде, только эта используется в запросах 1С.

    Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ

    Запрос.Текст = //если сумма больше 7500, тогда должна быть скидка 300 рублей, //поэтому если условие срабатывает то функция //возвращает Сумма - 300 //в противном случае запрос вернет просто Сумма "ВЫБРАТЬ | ВЫБОР | КОГДА ТЧПоступления.Сумма > 7500 | ТОГДА ТЧПоступления.Сумма - 300 | ИНАЧЕ ТЧПоступления.Сумма | КОНЕЦ КАК СуммаСоСкидкой |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ТЧПоступления";

    5. Функция ВЫРАЗИТЬ — позволяет выразить константное поле определенным типом.

    Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)

    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Продажи.Регистратор.Номер, | ВЫБОР | КОГДА Продажи.Регистратор ССЫЛКА Документ.Расходная | ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.Расходная) | ИНАЧЕ ВЫБОР | КОГДА Продажи.Регистратор ССЫЛКА Документ.Реализация | ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.Реализация) | КОНЕЦ | . | КОНЕЦ КАК Номер | ИЗ | РегистрНакопления.Закупки КАК Закупки";

    Еще есть вариант использования функции ВЫРАЗИТЬ в полях смешанных типах, где такие встречаются? Самый простой пример это «Регистратор» у любого регистра. Так зачем нам может понадобиться уточнять тип в регистраторе? Давайте рассмотрим ситуацию когда мы из регистратора выбираем поле «Номер», из какой таблицы будет выбран номер? Правильный ответ из всех! Поэтому чтобы наш запрос работал быстро следует указывать явный тип с помощью функции ВЫРАЗИТЬ

    Запрос.Текст = "ВЫБРАТЬ | ВЫРАЗИТЬ(Номенклатура.Комментарий КАК Строка(300)) КАК Комментарий, | ВЫРАЗИТЬ(Номенклатура.Сумма КАК Число(15,2)) КАК Сумма |ИЗ | Справочник.Номенклатура КАК Номенклатура";

    6. Функция ISNULL (альтернативное написание ЕСТЬNULL) — если поле имеет тип NULL, то оно заменяется на второй параметр функции.

    Также отметим что тип NULL желательно ВСЕГДА заменять на какое-то значение, т.к. сравнение с типом NULL всегда дает ЛОЖЬ даже если вы сравниваете NULL с NULL. Чаще всего значения NULL образуются в результате соединения таблиц (все виды соединений кроме внутреннего).

    Запрос.Текст = //Выбираем всю номенклатуру и остатки по ней //если остатокв но какой-то номенклатуре нет то будет поле //NULL которое заменится значением 0 "ВЫБРАТЬ | Ном.Ссылка, | ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток |ИЗ | Справочник.Номенклатура КАК Ном | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки | ПО (ТоварыНаСкладахОстатки.Номенклатура = Ном.Ссылка)";

    7. Функция ПРЕДСТАВЛЕНИЕ — позволяет получить представление поля запроса.

    Запрос.Текст = "ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(СвободныеОстаткиОстатки.Номенклатура) КАК Номенклатура, | ПРЕДСТАВЛЕНИЕ(СвободныеОстаткиОстатки.Склад) КАК Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки";

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

    Выше мы рассмотрели с Вами функции языка запросов 1с, теперь пришло время рассмотреть конструкции в языке запросов 1с, они не менее важны и полезны, приступаем.

    1. Конструкция ССЫЛКА — представляет из себя логический оператор проверки ссылочного типа. Наиболее часто встречается при проверки поля составного типа на конкретный тип. Синтаксис: ССЫЛКА

    Запрос.Текст = //если тип значения регистратора документ Приходная, //тогда запрос вернет "Поступление товаров", иначе "Реализация товаров" "ВЫБРАТЬ | ВЫБОР | КОГДА Остатки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ТОГДА ""Приход"" | ИНАЧЕ ""Расход"" | КОНЕЦ КАК ВидДвижения |ИЗ | РегистрНакопления.ОстаткиТоваровНаСкладах КАК Остатки" ;

    2. Конструкция МЕЖДУ — данный оператор проверяет входит ли значение в указанный диапазон.

    Синтаксис: МЕЖДУ И

    Запрос.Текст = //получим всю номенклатуру код которой лежит в диапазоне от 1 до 100 "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Код МЕЖДУ 1 И 100" ;

    3. Конструкция В и В ИЕРАРХИИ — проверяют находится ли значение в передаваемом списке (в качестве списка могут передаваться массивы, таблицы значений и т.д.). Оператор В ИЕРАРХИИ позволяет просматривать иерархию (пример использования ПланСчетов).

    Запрос.Текст = //выбираем все субсчета счета "ВЫБРАТЬ | Хозрасчетный.Ссылка КАК Счет |ИЗ | ПланСчетов.Хозрасчетный КАК Хозрасчетный |ГДЕ | Хозрасчетный.Ссылка В ИЕРАРХИИ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)";

    4. Конструкция ПОДОБНО — эта функция позволяет нам сравнивать строку с шаблоном строки.

    Варианты шаблона строки:

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

    _ — один произвольный символ.

    [. ] — любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.

    [^. ] — любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок кроме тех, которые перечислены следом за значком отрицания.

    Запрос.Текст = //найдем всю номенклатуру которая содержит корень ТАБУР и начинается //либо с маленькой либо с большой буквы т "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Товары.Наименование ПОДОБНО ""[Тт]абур%""" ;

    5. Конструкция РАЗРЕШЕННЫЕ — этот оператор позволяет выбрать только те записи из БД, на которые вызывающий имеет право чтения. Данные права настраиваются на уровне записей (RLS).

    Синтаксис: РАЗРЕШЕННЫЕ пишется после ключевого слова ВЫБРАТЬ

    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты";

    6. Конструкция РАЗЛИЧНЫЕ — позволяет выбрать записи в которых отсутствуют повторные записи.

    Синтаксис: РАЗЛИЧНЫЕ пишется после ключевого слова ВЫБРАТЬ

    Запрос.Текст = //выбирает записи на которые есть права у читающего "ВЫБРАТЬ РАЗЛИЧНЫЕ | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты" ;

    Также Конструкция РАЗЛИЧНЫЕ может использоваться с оператором РАЗРЕШЕННЫЕ и другими операторами.

    Запрос.Текст = //выбирает различные записи на которые есть права у читающего "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты";

    7. Конструкция ПЕРВЫЕ — выбирает указанное в параметре число записей из результата запроса.

    Запрос.Текст = //выбирают первые 4 номера ГТД из справочника "ВЫБРАТЬ ПЕРВЫЕ 4 | НомераГТД.Ссылка |ИЗ | Справочник.НомераГТД КАК НомераГТД";

    8. Конструкция ДЛЯ ИЗМЕНЕНИЯ — позволяет заблокировать таблицу, работает только в транзакциях (актуально только для автоматических блокировок).

    Синтаксис: ДЛЯ ИЗМЕНЕНИЯ

    Запрос.Текст = "ВЫБРАТЬ | СвободныеОстаткиОстатки.Номенклатура, | СвободныеОстаткиОстатки.Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки |ДЛЯ ИЗМЕНЕНИЯ | РегистрНакопления.СвободныеОстатки.Остатки";

    9. Конструкция УПОРЯДОЧИТЬ ПО — упорядочивает данные по определенному полю. Если полем является ссылка то при установке флага АВТОУПОРЯДОЧИВАНИЕ будет происходить сортировка по представлению ссылки, если флаг выключен то ссылки сортируются по старшинству адреса ссылки в памяти.

    Синтаксис: УПОРЯДОЧИТЬ ПО АВТОУПОРЯДОЧИВАНИЕ

    Запрос.Текст = "ВЫБРАТЬ | СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура, | СвободныеОстаткиОстатки.Склад КАК Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки | |УПОРЯДОЧИТЬ ПО | Номенклатура |АВТОУПОРЯДОЧИВАНИЕ";

    10. Конструкция СГРУППИРОВАТЬ ПО — используется для группировки строк запроса по определенным полям. Числовые поля должны использоваться с любой агрегатной функцией.

    Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладах.Номенклатура КАК Номенклатура, | ТоварыНаСкладах.Склад, | СУММА(ТоварыНаСкладах.ВНаличии) КАК ВНаличии |ИЗ | РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладах.Номенклатура, | ТоварыНаСкладах.Склад";

    11. Конструкция ИМЕЮЩИЕ — позволяет применить агрегатную функцию к условию выборки данных, похожа на конструкцию ГДЕ.

    Запрос.Текст = //выбирает сгруппированные записи где поле ВНаличии больше 3 "ВЫБРАТЬ | ТоварыНаСкладах.Номенклатура КАК Номенклатура, | ТоварыНаСкладах.Склад, | СУММА(ТоварыНаСкладах.ВНаличии) КАК ВНаличии |ИЗ | РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладах.Номенклатура, | ТоварыНаСкладах.Склад | |ИМЕЮЩИЕ | СУММА(ТоварыНаСкладах.ВНаличии) > 3" ;

    12. Конструкция ИНДЕКСИРОВАТЬ ПО — используется для индексации поле запроса. Запрос с индексацией дольше выполняется, но ускоряет поиск по индексированным полям. Можно использовать только в виртуальных таблицах.

    Синтаксис: ИНДЕКСИРОВАТЬ ПО

    Запрос.Текст = "ВЫБРАТЬ | Тз.НаименованиеОС, | Тз.НомерПапки, | Тз.КодОС, | Тз.Срок, | Тз.Тип |ПОМЕСТИТЬ ДанныеТз |ИЗ | &Тз КАК Тз | |ИНДЕКСИРОВАТЬ ПО | Тз.НаименованиеОС, | Тз.КодОС";

    13. Конструкция ГДЕ — позволяет наложить условие на любые поля выборки. В результат попадут записи только удовлетворяющие условию.

    Запрос.Текст = //выбираются все записи у которых КомпенсацияОстаток <> 0 и //СуммаДляРасчКомпОстаток > 100 "ВЫБРАТЬ | КомпенсацияРПОстатки.Контрагент, | КомпенсацияРПОстатки.Ребенок, | КомпенсацияРПОстатки.КомпенсацияОстаток, | КомпенсацияРПОстатки.СуммаДляРасчКомпОстаток |ПОМЕСТИТЬ ДанныеТз |ИЗ | РегистрНакопления.КомпенсацияРП.Остатки КАК КомпенсацияРПОстатки |ГДЕ | КомпенсацияРПОстатки.КомпенсацияОстаток <> 0 | И КомпенсацияРПОстатки.СуммаДляРасчКомпОстаток > 100" ;

    14. Конструкция ИТОГИ . ПО ОБЩИЕ — применяется для подсчета итогов, в конструкции указываются поля по которым будут считаться итоги и агрегатные функции применяемые к итоговым полям. При использовании итогов на каждое поле следующее после конструкции ИТОГИ производится группировка данных. Есть необязательная конструкция ОБЩИЕ, ее использование также обеспечивает дополнительную группировку. Пример результата запроса вы увидите ниже.

    Запрос.Текст = "ВЫБРАТЬ | Расчеты.ДоговорКонтрагента.ВидДоговора КАК ВидДоговора, | Расчеты.ДоговорКонтрагента КАК Договор, | Расчеты.Контрагент, | Расчеты.СуммаВзаиморасчетовОстаток КАК Остаток |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Расчеты |ИТОГИ | СУММА(Остаток) |ПО | ОБЩИЕ, | ВидДоговора";

    Результат запроса с конструкцией ИТОГИ

    На рисунке обведены группировки которые образовались в ходе выполнения запроса, самая верхняя относится к секции ОБЩИЕ, а вторая к полю ДоговорКонтрагентаВидДоговора.

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

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