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