Что такое псевдонимы в языке запросов 1с
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: условный оператор
Автор уроков и преподаватель школы: Владимир Милькин
Условный оператор в запросе
Давайте напишем запрос, который получает названия и калорийность еды:
А теперь добавим в результат запроса колонку, в которую будем выводить жирность еды по следующим правилам:
- если калорийность меньше 100, то жирность низкая;
- если калорийность от 100 до 200, то жирность нормальная;
- если калорийность больше 200, то жирность высокая.
Как этого можно добиться, ведь в таблице Справочник.Еда нет колонки Жирность?
Оказывается, эту колонку мы можем добавить сами, используя условный оператор внутри запроса:
Давайте внимательнее присмотримся к тексту запроса:
В секции ВЫБРАТЬ идёт перечисление полей выборки: Наименование, Калорийность, а затем вместо третьего поля идёт конструкция условного оператора, результат которого и попадает в третью колонку.
Условия оператора обрабатываются последовательно . Если одно из них оказалось верным, то в качестве результата возвращается соответствующее значение. Если же ни одно из условий не выполнилось, то возвращается значение из секции ИНАЧЕ. Если же ни одно из условий не выполнилось, и в операторе отсутствует секция ИНАЧЕ, то возвращается значение NULL (о нём мы поговорим в одном из следующих уроков).
Поэтому новый запрос вернёт такую таблицу:
Отступление
Обратите внимание, что третья колонка в таблице, которую вернул запрос, называется Поле1. Это имя было сгенерировано системой автоматически, потому что третьей колонке не соответствует никакого реального поля в таблице Справочник.Еда, откуда можно было бы это имя получить.
Но в наших силах дать ей это имя. Для этого сразу после описания поля нужно написать ключевое слово КАК, а после этого через пробел указать само имя. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Такое имя будет называться псевдонимом поля .
Псевдонимы можно присваивать любым полям, в том числе тем, у которых уже есть имя. Давайте сделаем псевдоним Еда для поля Наименование:
Но вернёмся к условному оператору в запросах.
Более сложные логические выражения в условиях оператора
В логических условиях оператора выбора можно использовать и более сложные выражения.
Пример использования логического оператора ПОДОБНО:
Пример использования функции ПОДСТРОКА:
Более сложные результаты условного оператора
Конечно, результатом условного оператора может быть не только константная строка, но и любое другое выражение, допустимое в запросе.
Сегодня рассмотрим одну из причин низкой производительности отчета на СКД. Связано это с правильностью назначения псевдонимов полей временных таблиц и использованием отборов.
Создадим запрос для демонстрации примера. Выберем ссылки контрагентов, поместим их во временную таблицу, а в итоговом запросе получим договоры контрагентов, связав их по владельцу из контрагентов временной таблицы. Такой запрос создан исключительно для демонстрации – просьба не давать комментарии по поводу правильности получения таких данных.
Как видно, псевдоним у поля временной таблицы не назначен.
А в итоговом запросе это поле уже имеет псевдоним «Контрагент».
Поставим в отчете отбор по контрагенту и посмотрим, какой запрос будет сформирован системой компоновки данных.
Видим, что условие отбора накладывается в итоговом запросе. Что, естественно, при отборе большого массива данных негативно скажется на производительности такого отчета.
Теперь в запросе, формирующем временную таблицу, дадим псевдоним полю ссылки контрагента такой же, как и в итоговом запросе.
Также в этом случае потребуется обновить связи таблиц , и снова добавить нужное поле в итоговый запрос.
В отчете оставим условие отбора по контрагенту и посмотрим, какой же теперь запрос будет сформирован системой компоновки данных.
Видим, что теперь СКД делает отбор необходимых данных на самом раннем этапе. И, соответственно, при больших объемах получаемых данных и громоздких запросах с большим количеством временных таблиц, это может очень существенно сказаться на производительности таких отчетов (да и не только отчетов – ведь сфера применения СКД ими не ограничивается). Возможно, подобный эффект наблюдается и в отчетах на построителе отчета, но был обнаружен в СКД – так что не судите строго.
Почти все объекты метаданных, например справочники, документы, константы и т.п. имеют свои таблицы в базе данных. Запись в таблицу выполняется через объект. Запись и чтение через объект называется объектной моделью. Например:
ОплатаНаСчет = Документы . ОплатаНаСчет . СоздатьДокумент ( ) ;С помощью объектной модели можно как записывать данные, так и читать. Но для чтения есть множество ограничений. Отборы можно накладывать только на код, наименование или индексированные реквизиты, за один раз можно обратиться только к одному источнику.
С помощью табличной модели можно только читать данные, но зато можно применять различные отборы, использовать несколько источников данных, группировать данные, выполнять различные манипуляции с выбранными реквизитами и т.п. Для этого используется Язык запросов 1С.
Язык запросов 1С и SQL
Язык запросов 1С очень сильно похож на язык SQL, если вы уже знакомы с языком SQL, то вам легко будет разобраться в языке запросов 1С.
Рассмотрим основные отличия:
- В языке запросов 1С можно только выбирать данные из базы. Грубо говоря из SQL реализована только конструкция SELECT
- В 1С в качестве выходного поля нельзя использовать другой запрос, зато можно выбрать табличную часть (будет представлена в виде вложенной таблицы)
- Из языка запросов 1С нельзя обращаться к хранимым процедурам (stored procedure) и представлениям (view) СУБД
- Зато в языке запросов 1С можно разыменовывать поля, например: Оплата.Контрагент.Наименование
- В 1С добавлена конструкция ИТОГИ
- Из языка запросов 1С нет доступа к таблицам СУБД. Есть только доступ к таблицам, которые предоставляет платформа 1С. А уже платформа транслирует запрос на языке запросов 1С в запрос на языке SQL.
- В языке запросов 1С можно использовать как русский язык, так и английский.
Консоль запросов
При изучении языка запросов мы будем пользоваться консолью запросов, чтобы писать запросы прямо в пользовательском режиме и сразу видеть результат.
Консоль запросов выглядит так:
В поле Текст запроса пишется сам запрос. В поле Результат запроса будет результат выполнения запроса. В верхнем поле указываются параметры запроса, к ним мы вернемся позже.
Мы не будем им пользоваться, чтобы лучше разобраться в языке запросов. Хотя на практике им очень удобно пользоваться. Но выучив язык запросов вы без труда разберетесь с ним сами.
Ссылки на консоль запросов:
Привет мир
Конструктор запроса имеет достаточно простой, интуитивно понятный интерфейс. Тем не менее рассмотрим применение конструктора запроса подробнее.
Запуск конструктора текста запроса производится контекстным меню (правой кнопкой мыши) в нужном месте программного кода.
Описание конструктора запроса 1С
Вкладка Таблицы и поля
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
В качестве источника может служить физическая таблица базы данных, виртуальная таблица регистров, временные таблицы, вложенные запросы и т.д.
В контекстном меню виртуальных таблиц можно задать параметры этих таблиц:
Вкладка Связи
Вкладка служит для описания соединений нескольких таблиц, создает конструкции со словом СОЕДИНЕНИЕ.
Вкладка Группировка
На данной вкладке система позволяет группировать и суммировать нужные поля результата таблицы. Описывается использование конструкций СГРУППИРОВАТЬ ПО, СУММА, МИНИМУМ, СРЕДНЕЕ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫХ.
Вкладка Условия
Отвечает за всё, что идёт в тексте запроса после конструкции ГДЕ, т.е. за все условия, накладываемые на получаемые данные.
Вкладка Дополнительно
Вкладка Дополнительно изобилует всевозможными параметрами, которые являются очень важными. Рассмотрим каждое из свойств.
Группировка Выборка записей:
Группировка Тип запроса определяет, каким будет тип запроса: выборка данных, создание временных таблицы или же уничтожение временной таблицы.
Ниже существует флаг Блокировать полученные данные для последующего изменения. Он позволяет включить возможность установки блокировки данных, которая обеспечивает сохранность данных от момента их чтения до изменения (актуально только для Автоматического режима блокировок, конструкция ДЛЯ ИЗМЕНЕНИЯ).
Вкладка Объединения/Псевдонимы
Вкладка Порядок
Вкладка Пакет запросов
В левом нижнем углу конструктора запроса есть кнопка Запрос, с помощью которого можно в любой момент просмотреть текст запроса:
В данном окне можно внести коррективы в запрос и выполнить его.
Видео про конструктор запросов:
Читайте также: