Профессия — 1С

Рукопашный бой Карташ

Категории

Язык запросов 1С

рубрики: Запросы | Дата: 15 Октябрь, 2016

Программирование в среде 1С:Предприятия версии 8 невозможно представить
без применения языка запросов. На самом деле в версии 7.7 запросы тоже
существовали, но обладали гораздо меньшими возможностями, и с моей точки
зрения тот язык запросов был гораздо сложнее для понимания. Синтаксис
языка запросов версии 8 с некоторыми различиями практически полностью
повторяет синтаксис
языка запросов SQL, что тоже является большим плюсом.




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

Алгоритм использования языка запросов можно представить следующим образом:
Формирование текста запроса —> Выполнение запроса —> Обход выборки,
полученной в результате выполнения запроса. Рассмотрим вкратце каждый из
этих этапов.




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

    ВЫБРАТЬ
        {Набор полей через запятую}
    ИЗ
        {Имя таблицы}
    ГДЕ
        {Условия при выполнении которых записи будут отобраны}
    

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

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

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

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

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

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

    
    
    Результат.Выгрузить()
    

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

    
    
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    
        Сообщить(Выборка.Код + "; " + Выборка.Наименование);
    
    КонецЦикла;
    

    Таким образом, если собрать все три пункта вместе, получим следующий код:

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

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

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

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

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С