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

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

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

Запрос выполняется в соответствии с заданными инструкциями — текстом запроса. Текст запроса составляется в соответствии с синтаксисом и правилами языка запросов. Язык запросов 1С:Предприятие 8 основан на базе стандартного SQL, но имеет некоторые отличия и расширения.

Схема работы с запросом

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

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

1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.

3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить () , который возвращает объект РезультатЗапроса. Из результата запроса можно:

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

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

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

4. Обойти выборку результата запроса можно с помощью цикла:

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

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

Состав текста запроса

Текст запроса состоит из нескольких секций:

Обязательной является только первая секция.

Временные таблицы и пакетные запросы

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

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

Для использования временной таблицы ВТВалюты в других запросах необходимо этим запросам присвоить общий менеджер временных таблиц — МенеджерВТ.

Виртуальные таблицы

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

Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):

  • Для регистров сведений:
    • СрезПервых( , ) — наиболее ранние записи на указанную дату;
    • СрезПоследних( , ) — наиболее поздние записи на указанную дату;
    • Остатки( , ) — остатки на указанную дату;
    • Обороты( , , , ) — обороты за период;
    • ОстаткиИОбороты( , , , , ) — остатки и обороты за период;
    • Остатки( , , , ) — остатки на указанную дату в разрезе счета, измерений и субконто;
    • Обороты( , , , , , , , ) — обороты за период в разрезе счета, измерений, кор. счета, субконто, кор. субконто;
    • ОстатковИОборотов( , , , , , , ) — остатки и оборотов в разрезе счета, измерений и субконто;
    • ОборотыДтКт( , , , , , , , ) — обороты за период в разрезе счета Дт, счета Кт, Субконто Дт, Субконто Кт;
    • ДвиженияССубконто( , , , , ) — движения вместе со значениями субконто;
    • База( , , , ) — базовые данные регистра расчета;
    • ДанныеГрафика( ) — данные графика;
    • ФактическийПериодДействия( ) — фактический период действия.

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

    Конструктор запроса

    Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата. Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:

    Вызов конструктора запроса

    Также конструкторы можно вызвать из главного меню Текст.

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

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

    Конструктор запроса 1С

    Объект СхемаЗапроса

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

    • УстановитьТекстЗапроса ( Текст >) — заполняет свойство ПакетЗапросов на основании переданного текста запроса;
    • ПолучитьТекстЗапроса () — возвращает сформированный на основании свойства ПакетЗапросов текст запроса;

    Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

    ВЫБРАТЬ
    Валюты.Ссылка КАК Валюта,
    Валюты.Код
    ИЗ
    Справочник.Валюты КАК Валюты
    ГДЕ
    НЕ Валюты.ПометкаУдаления

    УПОРЯДОЧИТЬ ПО
    Валюты.Код

    Код на встроенном языке может выглядеть так:

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

    Распечатать

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

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

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

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

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

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

    Условия в запросах 1С

    Если необходимо отобрать выплаты на сумму не менее 10 000, то запрос будет выглядеть следующим образом

    Запрос . Текст = "ВЫБРАТЬ
    | Выплаты.Сотрудник,
    | Выплаты.Зарплата
    |ИЗ
    | Выплаты
    |ГДЕ
    | Выплаты.Зарплата >=10000"

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

    Условия в запросах 1С

    Ключевое слово ИМЕЮЩИЕ в запросах 1С применяется, когда необходимо произвести отбор среди уже выбранных записей. Напрмиер, это ключевое слово применяется, когда нужно произвести фильтрацию сгруппированных записей в результате запроса.

    Вернемся к примеру, рассмотренному выше. Допустим, необходимо выбрать из таблицы Выплаты сотрудников, которые в сумме получили больше 20 000. Для этого, сначала нужно ввести группировку по полю Сотрудник, подсчитать сумму по полю Зарплата для каждого сотрудника, а потом из полученных записей отобрать те, которые удовлетворяют условию.

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

    Запрос . Текст = "ВЫБРАТЬ
    | Выплаты.Сотрудник,
    | СУММА(Выплаты.Зарплата) КАК Зарплата
    |ИЗ
    | Выплаты
    |СГРУППИРОВАТЬ ПО
    | Выплаты.Сотрудник
    |ИМЕЮЩИЕ
    | СУММА(Выплаты.Зарплата) > 20000"

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

    Условия в запросах 1С

    На этом примере наглядно видна разница между ключевыми словами ГДЕ и ИМЕЮЩИЕ. Если бы мы использовали слово ГДЕ вместо ИМЕЮЩИЕ, то сначала был бы произведен отбор записей с зарплатой больше 20000, а потом по ним подсчитана сумма по каждому сотруднику. В результате мы получили бы пустой результат запроса, т.к. ни один сотрудник не получал больше 20000 за одну выплату.

    Условия отбора в вирутальных таблицах регистров

    Виртуальные таблицы есть у всех регистров в системе 1С:Предприятие: регистров накопления, регистров сведений, регистров бухгалтерии. Задать условия к виртуальным таблицам можно двумя способами:

    1. через параметры виртуальной таблица;
    2. через секции запроса ГДЕ или ИМЕЮЩИЕ.

    Различия между секциями ГДЕ и ИМЕЮЩИЕ мы уже рассматривали. Чтобы было понятно, чем условия в этих секциях запроса отличаются от условий в параметрах виртуальной таблицы, нужно понять, что же такое виртуальные таблицы регистров в 1С. Важной их особенностью является то, что они не существуют в информационной базе. Это инструмент, предоставляемый нам платформой 1С:предприятие для оптимизации работы конфигурации.

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

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

    Условия в запросах 1С

    Требуется выбрать на наименьшую дату валюты, курс которых меньше 30 р.

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

    Запрос . Текст = "ВЫБРАТЬ
    | КурсыВалютСрезПервых.Период,
    | КурсыВалютСрезПервых.Валюта,
    | КурсыВалютСрезПервых.Курс,
    |ИЗ
    | РегистрСведений.КурсыВалют.СрезПервых (, Курс

    В этом случае мы получим одну запись: Доллар 28,3 от 01.02.2007. Это будет верное решение задачи.

    Если же мы поместим условие в секцию ГДЕ, то результат запроса будет пустым, поскольку сначала будет сделан срез первых по каждой валюте (в результате получим две записи от 01.01.2007 Доллар 30,25 и Евро 40,5), а потом из них будут выбраны записи, удовлетворяющие условию. Но обе полученные записи условию Курс Раздел: Программирование Статьи по 1С Метки: язык запросов 1С

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Синтаксис: В( ), В ИЕРАРХИИ( )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Синтаксис: СГРУППИРОВАТЬ ПО , . ,

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

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

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

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

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

    Синтаксис: ИТОГИ ПО

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

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

    Синтаксис: ДАТАВРЕМЯ( , , , , , )

    РАЗНОСТЬДАТ

    Возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.

    Синтаксис: РАЗНОСТЬДАТ( , , )

    ЗНАЧЕНИЕ

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

    Синтаксис: ЗНАЧЕНИЕ( )

    ВЫБОР

    Аналог конструкции ЕСЛИ , который используется в коде, только эта используется в запросах 1С.

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

    Более сложный пример, с использованием ПОДОБНО :

    ВЫРАЗИТЬ

    Позволяет выразить константное поле определенным типом.

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

    ISNULL, ЕСТЬNULL

    Если поле имеет тип NULL , то оно заменяется на второй параметр функции.

    Синтаксис: ЕСТЬNULL( , )

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

    ПРЕДСТАВЛЕНИЕ

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

    Синтаксис: ПРЕДСТАВЛЕНИЕ( )

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

    ССЫЛКА

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

    Синтаксис: ССЫЛКА

    МЕЖДУ

    Проверяет, входит ли значение в указанный диапазон.

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

    В и В ИЕРАРХИИ

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

    Синтаксис: В( ), В ИЕРАРХИИ( )

    ПОДОБНО

    Сравнивает строку с шаблоном строки.

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

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

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