бесплатно без регистрации урок 3 из 18

Первый запрос: ВЫБРАТЬ и ИЗ

Написать запрос с выбором полей, псевдонимами, сортировкой и отсечением повторов; понимать, чем РАЗЛИЧНЫЕ отличается от группировки и почему ПЕРВЫЕ без сортировки бессмысленно.

17 мин чтения · 4 главы ·4 задания ·домашняя работа

ВЫБРАТЬ: поля и псевдонимы

Пора написать первый настоящий запрос. Начнём с части ВЫБРАТЬ — она отвечает на вопрос, какие колонки окажутся в результате.

ВЫБРАТЬ
    Наименование,
    Код
ИЗ
    Справочник.Номенклатура

Поля перечисляются через запятую, и порядок в списке — это порядок колонок в ответе. Перенос строк и отступы язык не волнуют: можно написать всё в одну строку, и запрос отработает так же. Но читать такой запрос будет некому, включая вас через месяц, поэтому принято ставить каждое поле на свою строку.

Первое, что хочется сделать новичку, — написать «выбрать всё». В языке запросов 1С такая возможность есть (ВЫБРАТЬ *), и пользоваться ею не стоит. Причина не в красоте: лишние поля стоят денег. Каждое поле — это данные, которые база прочитает, передаст платформе и положит в память; у справочника с двадцатью реквизитами разница между «всё» и «два нужных поля» — десятикратная. А если среди полей окажется ссылка на другой объект, платформа добавит ещё и соединение.

Второе, что стоит освоить сразу, — псевдонимы полей. Ключевое слово КАК задаёт имя колонки в результате:

ВЫБРАТЬ
    Наименование КАК Товар,
    Код КАК Артикул
ИЗ
    Справочник.Номенклатура

Зачем это нужно. Во-первых, имя колонки видит человек: в консоли, в отчёте, в выгрузке. «Товар» понятнее, чем «Наименование». Во-вторых, псевдоним обязателен там, где поле не имеет собственного имени, — для вычисленных значений, сумм и выражений; без него платформа откажется выполнять запрос. В-третьих, по псевдониму потом ссылаются в сортировке и в компоновке.

ВЫБРАТЬТов.Наименование КАК ТоварИЗСправочник.Номенклатура КАК ТовГДЕНЕ Тов.ПометкаУдаленияколонка в ответе назовётся «Товар»у таблицы появилось короткое имя «Тов»поле пишется через псевдоним таблицыпсевдоним таблицы задают один раз и пользуются им везде
Псевдоним таблицы сокращает запись полей, псевдоним поля задаёт имя колонки в результате.

Есть и третий повод давать псевдонимы, о котором вспоминают поздно. Поля с одинаковыми именами в результате запроса не уживаются: взяли наименование товара и наименование склада — и платформа потребует различить их. Псевдоним решает это сразу и заодно избавляет от колонок вроде «Наименование1», которые платформа придумывает сама, когда её вынуждают.

Имя псевдонима пишется без пробелов и не может совпадать с ключевым словом языка. Если хочется пробел в заголовке колонки отчёта — это делается не здесь, а в настройках компоновки: псевдоним живёт в запросе, заголовок — в отчёте.

ИЗ: источник и его псевдоним

Часть ИЗ называет таблицу, из которой берутся строки. Имя пишется полностью и слитно: вид, точка, имя объекта.

ИЗ
    Справочник.Номенклатура

Для табличной части документа имя длиннее: Документ.РеализацияТоваровУслуг.Товары. Для виртуальной таблицы регистра — с параметрами в скобках: РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ). Форма записи одна и та же: вы называете источник так, как он называется в конфигурации.

У таблицы почти всегда задают псевдоним — короткое имя, которым к ней обращаются дальше:

ВЫБРАТЬ
    Тов.Наименование КАК Товар,
    Тов.Код КАК Артикул
ИЗ
    Справочник.Номенклатура КАК Тов

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

Имя псевдонима принято делать коротким и говорящим: Тов, Док, Ост, Шапка, Строки. Однобуквенные имена вроде Т и Д экономят три знака и стоят получаса разбирательств при чтении чужого запроса через полгода.

У виртуальных таблиц есть своя особенность записи. Параметры перечисляются в скобках по местам, и пропущенные позиции обозначаются запятыми: Остатки(&НаДату, ) — момент задан, отбор пропущен. Пустые скобки тоже допустимы: Остатки() означает «на текущий момент, без отбора». Пропускать параметр и не ставить запятую нельзя — платформа поймёт вас неправильно и подставит отбор туда, где ожидался момент времени.

И ещё одно свойство части ИЗ, важное для понимания: источник может быть не только таблицей. Дальше в курсе на её месте окажутся соединения нескольких таблиц (урок 7), вложенные запросы (урок 10) и временные таблицы (урок 11). Синтаксис при этом не меняется: ИЗ по-прежнему отвечает на вопрос «откуда берём строки», просто ответ становится сложнее.

Порядок, повторы и первые строки

Две небольшие части языка делают результат запроса пригодным для показа человеку: сортировка и отсечение повторов.

УПОРЯДОЧИТЬ ПО задаёт порядок строк. Пишется в самом конце запроса, поле или несколько через запятую; направление задаётся словами ВОЗР и УБЫВ, по умолчанию — по возрастанию.

ВЫБРАТЬ
    Тов.Наименование КАК Товар
ИЗ
    Справочник.Номенклатура КАК Тов
УПОРЯДОЧИТЬ ПО
    Товар

Обратите внимание: в сортировке использован псевдоним, а не исходное поле. Так можно, и так обычно и пишут. Ещё важнее другое: без УПОРЯДОЧИТЬ ПО порядок строк не определён. Он может совпасть с порядком в справочнике, а может не совпасть; при повторном выполнении может измениться. Полагаться на «и так вроде по алфавиту» нельзя: сегодня совпало, завтра база решит иначе.

Сортировать можно по нескольким полям сразу — они перечисляются через запятую, и каждое со своим направлением: УПОРЯДОЧИТЬ ПО Склад, Сумма УБЫВ. Читается это как «сначала по складам, внутри склада — от большей суммы к меньшей»; порядок перечисления и есть старшинство.

Отдельно стоит знать про сортировку по ссылочному полю. Написав УПОРЯДОЧИТЬ ПО Товар, где Товар — ссылка на номенклатуру, вы получите порядок не по алфавиту: база сортирует ссылки по их внутреннему представлению, а оно к названию отношения не имеет. Выглядит результат как случайный, и человек справедливо говорит «отчёт не отсортирован». Чтобы получить алфавит, сортируют по наименованию: УПОРЯДОЧИТЬ ПО Товар.Наименование.

РАЗЛИЧНЫЕ убирает повторяющиеся строки результата. Ставится сразу после слова ВЫБРАТЬ.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Строки.Номенклатура КАК Товар
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Строки
без РАЗЛИЧНЫЕМолоко · СеверМолоко · СеверХлеб · ЮгМолоко · Югс РАЗЛИЧНЫЕМолоко · СеверХлеб · ЮгМолоко · Югчетыре строкитри строки
Повторяющиеся строки схлопываются в одну; сравниваются все выбранные колонки сразу, а не одна.

Здесь важна тонкость, на которой спотыкаются: РАЗЛИЧНЫЕ сравнивает строку целиком, а не одну колонку. Если к товару добавить склад, строки «Молоко · Север» и «Молоко · Юг» останутся обе — они разные. Ожидание «уберёт повторы товаров» не сбудется, и отчёт покажет товар дважды. Когда нужно именно «по одной строке на товар», это делается не РАЗЛИЧНЫЕ, а группировкой — восьмой урок.

ПЕРВЫЕ отдаёт только начало результата: ВЫБРАТЬ ПЕРВЫЕ 10. Пригодится в двух случаях: посмотреть, что вообще лежит в незнакомой таблице, и получить «топ» — десять самых крупных продаж, пять самых дорогих товаров.

все строкиУПОРЯДОЧИТЬ ПОПЕРВЫЕ 10поменяли местами — получили «любые десять», а не «десять лучших»порядок применения задан языком и не зависит от того, как вы написали
ПЕРВЫЕ отрезает строки уже после сортировки; без УПОРЯДОЧИТЬ ПО непонятно, какие именно строки придут.

Рядом с сортировкой в языке есть слово АВТОУПОРЯДОЧИВАНИЕ. Оно просит платформу доупорядочить результат самой: ссылочные поля — по представлению, а не по внутреннему коду. Звучит удобно, но пользоваться им не стоит: платформа добавляет соединения со справочниками, о которых вы не просили, и запрос дорожает незаметно. Правильный путь — написать сортировку по нужному полю явно.

Выражения и первые ошибки

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

ВЫБРАТЬ
    Строки.Номенклатура КАК Товар,
    Строки.Количество КАК Кол,
    Строки.Цена КАК Цена,
    Строки.Количество * Строки.Цена КАК Сумма
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Строки

Доступны обычные действия: сложение, вычитание, умножение, деление. Со строками работает + — он их склеивает. Постоянное значение тоже можно положить в колонку: число, строку в кавычках, дату в формате ДАТАВРЕМЯ(2026, 3, 1), логическое ИСТИНА и ЛОЖЬ.

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

Даты записываются функцией ДАТАВРЕМЯ(2026, 3, 1) — год, месяц, день, и при необходимости часы, минуты, секунды. Писать дату строкой нельзя: сравнение строки с датой даст ошибку о недопустимых типах. Подробно работа с датами и периодами разбирается в пятом уроке, и там же выяснится, почему «по 31 марта» обычно означает не то, что человек имел в виду.

Отдельно стоит сказать про NULL — значение, которое означает «здесь ничего нет». Оно появляется не там, где поле пустое, а там, где поля не нашлось: при соединениях, которым не хватило пары, и в виртуальных таблицах, где нет движений. Свойство у NULL одно и неприятное: любое действие с ним даёт NULL. Умножили количество на NULL — получили NULL, и сумма в отчёте стала пустой, а не нулевой. Подробно с этим разбираются в уроках 7 и 8; здесь достаточно узнать слово, потому что встретится оно раньше.

Теперь — о сообщениях платформы, потому что первые запросы пишутся с ошибками, и это нормально. Сообщения у языка запросов на удивление внятные, и почти все они попадают в три группы.

сообщениечто обычно значит
Поле не найденоопечатка в имени или забыт псевдоним таблицы
Таблица не найденаневерное имя объекта или вид: Документ вместо Справочника
Недопустимые типы операндовсравнили или сложили несравнимое: ссылку со строкой, дату с числом
Ожидается ключевое словоперепутан порядок частей или пропущена запятая

Полезная мелочь напоследок: в тексте запроса можно писать комментарии. Две косые черты закрывают остаток строки, а пара «косая черта — звёздочка» открывает и закрывает многострочный комментарий. Комментарий в запросе стоит того же, что комментарий в коде: через полгода строка «отбор только по проведённым» объяснит будущему читателю больше, чем сам отбор. В отчётах на компоновке комментарии тоже сохраняются — их видно в схеме.

Последнее, что делает первый запрос полезным, — привычка сверять результат с известным числом. Написали запрос по продажам за март — откройте типовой отчёт за тот же март и сравните итог. Совпало — запрос можно показывать людям. Не совпало — вы только что нашли ошибку до того, как её нашёл кто-то другой, и это лучшее, что может случиться с новым отчётом.

Задания урока

Каждое проверяется сразу: ответ сверяется с эталоном, и на неверный вариант приходит разбор.

  1. Зачем в запросе задают псевдонимы полям?средне
  2. Пока в запросе одна таблица, псевдоним ей давать незачем.средне
  3. ВЫБРАТЬ ПЕРВЫЕ 10 без УПОРЯДОЧИТЬ ПО вернёт десять самых крупных строк.средне
  4. Соотнесите сообщение платформы и обычную причину.средне
Пройти урок с проверкой заданий Курс «1С: запросы и отчёты» открыт и бесплатен, прогресс сохраняется.
Открыть курс