ВЫБРАТЬ: поля и псевдонимы
Пора написать первый настоящий запрос. Начнём с части ВЫБРАТЬ — она отвечает на вопрос, какие колонки окажутся в результате.
ВЫБРАТЬ
Наименование,
Код
ИЗ
Справочник.Номенклатура
Поля перечисляются через запятую, и порядок в списке — это порядок колонок в ответе. Перенос строк и отступы язык не волнуют: можно написать всё в одну строку, и запрос отработает так же. Но читать такой запрос будет некому, включая вас через месяц, поэтому принято ставить каждое поле на свою строку.
Первое, что хочется сделать новичку, — написать «выбрать всё». В языке запросов 1С такая возможность есть (ВЫБРАТЬ *), и пользоваться ею не стоит. Причина не в красоте: лишние поля стоят денег. Каждое поле — это данные, которые база прочитает, передаст платформе и положит в память; у справочника с двадцатью реквизитами разница между «всё» и «два нужных поля» — десятикратная. А если среди полей окажется ссылка на другой объект, платформа добавит ещё и соединение.
Второе, что стоит освоить сразу, — псевдонимы полей. Ключевое слово КАК задаёт имя колонки в результате:
ВЫБРАТЬ
Наименование КАК Товар,
Код КАК Артикул
ИЗ
Справочник.Номенклатура
Зачем это нужно. Во-первых, имя колонки видит человек: в консоли, в отчёте, в выгрузке. «Товар» понятнее, чем «Наименование». Во-вторых, псевдоним обязателен там, где поле не имеет собственного имени, — для вычисленных значений, сумм и выражений; без него платформа откажется выполнять запрос. В-третьих, по псевдониму потом ссылаются в сортировке и в компоновке.
Есть и третий повод давать псевдонимы, о котором вспоминают поздно. Поля с одинаковыми именами в результате запроса не уживаются: взяли наименование товара и наименование склада — и платформа потребует различить их. Псевдоним решает это сразу и заодно избавляет от колонок вроде «Наименование1», которые платформа придумывает сама, когда её вынуждают.
Имя псевдонима пишется без пробелов и не может совпадать с ключевым словом языка. Если хочется пробел в заголовке колонки отчёта — это делается не здесь, а в настройках компоновки: псевдоним живёт в запросе, заголовок — в отчёте.
ИЗ: источник и его псевдоним
Часть ИЗ называет таблицу, из которой берутся строки. Имя пишется полностью и слитно: вид, точка, имя объекта.
ИЗ
Справочник.Номенклатура
Для табличной части документа имя длиннее: Документ.РеализацияТоваровУслуг.Товары. Для виртуальной таблицы регистра — с параметрами в скобках: РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ). Форма записи одна и та же: вы называете источник так, как он называется в конфигурации.
У таблицы почти всегда задают псевдоним — короткое имя, которым к ней обращаются дальше:
ВЫБРАТЬ
Тов.Наименование КАК Товар,
Тов.Код КАК Артикул
ИЗ
Справочник.Номенклатура КАК Тов
Пока таблица одна, псевдоним кажется лишней работой: Наименование и Тов.Наименование — одно и то же. Но как только таблиц станет две, без псевдонимов запрос перестанет быть однозначным: поле Наименование есть и у номенклатуры, и у склада, и платформа не угадает, о каком идёт речь. Привычку писать псевдоним стоит завести сразу, пока запросы простые: переучиваться дороже.
Имя псевдонима принято делать коротким и говорящим: Тов, Док, Ост, Шапка, Строки. Однобуквенные имена вроде Т и Д экономят три знака и стоят получаса разбирательств при чтении чужого запроса через полгода.
У виртуальных таблиц есть своя особенность записи. Параметры перечисляются в скобках по местам, и пропущенные позиции обозначаются запятыми: Остатки(&НаДату, ) — момент задан, отбор пропущен. Пустые скобки тоже допустимы: Остатки() означает «на текущий момент, без отбора». Пропускать параметр и не ставить запятую нельзя — платформа поймёт вас неправильно и подставит отбор туда, где ожидался момент времени.
И ещё одно свойство части ИЗ, важное для понимания: источник может быть не только таблицей. Дальше в курсе на её месте окажутся соединения нескольких таблиц (урок 7), вложенные запросы (урок 10) и временные таблицы (урок 11). Синтаксис при этом не меняется: ИЗ по-прежнему отвечает на вопрос «откуда берём строки», просто ответ становится сложнее.
Порядок, повторы и первые строки
Две небольшие части языка делают результат запроса пригодным для показа человеку: сортировка и отсечение повторов.
УПОРЯДОЧИТЬ ПО задаёт порядок строк. Пишется в самом конце запроса, поле или несколько через запятую; направление задаётся словами ВОЗР и УБЫВ, по умолчанию — по возрастанию.
ВЫБРАТЬ
Тов.Наименование КАК Товар
ИЗ
Справочник.Номенклатура КАК Тов
УПОРЯДОЧИТЬ ПО
Товар
Обратите внимание: в сортировке использован псевдоним, а не исходное поле. Так можно, и так обычно и пишут. Ещё важнее другое: без УПОРЯДОЧИТЬ ПО порядок строк не определён. Он может совпасть с порядком в справочнике, а может не совпасть; при повторном выполнении может измениться. Полагаться на «и так вроде по алфавиту» нельзя: сегодня совпало, завтра база решит иначе.
Сортировать можно по нескольким полям сразу — они перечисляются через запятую, и каждое со своим направлением: УПОРЯДОЧИТЬ ПО Склад, Сумма УБЫВ. Читается это как «сначала по складам, внутри склада — от большей суммы к меньшей»; порядок перечисления и есть старшинство.
Отдельно стоит знать про сортировку по ссылочному полю. Написав УПОРЯДОЧИТЬ ПО Товар, где Товар — ссылка на номенклатуру, вы получите порядок не по алфавиту: база сортирует ссылки по их внутреннему представлению, а оно к названию отношения не имеет. Выглядит результат как случайный, и человек справедливо говорит «отчёт не отсортирован». Чтобы получить алфавит, сортируют по наименованию: УПОРЯДОЧИТЬ ПО Товар.Наименование.
РАЗЛИЧНЫЕ убирает повторяющиеся строки результата. Ставится сразу после слова ВЫБРАТЬ.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Строки.Номенклатура КАК Товар
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Строки
Здесь важна тонкость, на которой спотыкаются: РАЗЛИЧНЫЕ сравнивает строку целиком, а не одну колонку. Если к товару добавить склад, строки «Молоко · Север» и «Молоко · Юг» останутся обе — они разные. Ожидание «уберёт повторы товаров» не сбудется, и отчёт покажет товар дважды. Когда нужно именно «по одной строке на товар», это делается не РАЗЛИЧНЫЕ, а группировкой — восьмой урок.
ПЕРВЫЕ отдаёт только начало результата: ВЫБРАТЬ ПЕРВЫЕ 10. Пригодится в двух случаях: посмотреть, что вообще лежит в незнакомой таблице, и получить «топ» — десять самых крупных продаж, пять самых дорогих товаров.
Рядом с сортировкой в языке есть слово АВТОУПОРЯДОЧИВАНИЕ. Оно просит платформу доупорядочить результат самой: ссылочные поля — по представлению, а не по внутреннему коду. Звучит удобно, но пользоваться им не стоит: платформа добавляет соединения со справочниками, о которых вы не просили, и запрос дорожает незаметно. Правильный путь — написать сортировку по нужному полю явно.
Выражения и первые ошибки
В ВЫБРАТЬ можно писать не только поля, но и выражения: арифметику, склейку строк, постоянные значения. Результат такого выражения — обычная колонка, и псевдоним для неё обязателен.
ВЫБРАТЬ
Строки.Номенклатура КАК Товар,
Строки.Количество КАК Кол,
Строки.Цена КАК Цена,
Строки.Количество * Строки.Цена КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Строки
Доступны обычные действия: сложение, вычитание, умножение, деление. Со строками работает + — он их склеивает. Постоянное значение тоже можно положить в колонку: число, строку в кавычках, дату в формате ДАТАВРЕМЯ(2026, 3, 1), логическое ИСТИНА и ЛОЖЬ.
Со строковыми значениями есть две тонкости, о которые спотыкаются в первый же день. Первая: строка в запросе пишется в двойных кавычках, и если кавычка нужна внутри строки, её удваивают. Вторая: сравнение строк идёт как есть — с учётом пробелов по краям и, в большинстве баз, без учёта регистра. Поэтому условие «наименование равно Молоко» не найдёт «Молоко » с пробелом на конце, и такие несовпадения выглядят как отсутствие данных.
Даты записываются функцией ДАТАВРЕМЯ(2026, 3, 1) — год, месяц, день, и при необходимости часы, минуты, секунды. Писать дату строкой нельзя: сравнение строки с датой даст ошибку о недопустимых типах. Подробно работа с датами и периодами разбирается в пятом уроке, и там же выяснится, почему «по 31 марта» обычно означает не то, что человек имел в виду.
Отдельно стоит сказать про NULL — значение, которое означает «здесь ничего нет». Оно появляется не там, где поле пустое, а там, где поля не нашлось: при соединениях, которым не хватило пары, и в виртуальных таблицах, где нет движений. Свойство у NULL одно и неприятное: любое действие с ним даёт NULL. Умножили количество на NULL — получили NULL, и сумма в отчёте стала пустой, а не нулевой. Подробно с этим разбираются в уроках 7 и 8; здесь достаточно узнать слово, потому что встретится оно раньше.
Теперь — о сообщениях платформы, потому что первые запросы пишутся с ошибками, и это нормально. Сообщения у языка запросов на удивление внятные, и почти все они попадают в три группы.
| сообщение | что обычно значит |
|---|---|
| Поле не найдено | опечатка в имени или забыт псевдоним таблицы |
| Таблица не найдена | неверное имя объекта или вид: Документ вместо Справочника |
| Недопустимые типы операндов | сравнили или сложили несравнимое: ссылку со строкой, дату с числом |
| Ожидается ключевое слово | перепутан порядок частей или пропущена запятая |
Полезная мелочь напоследок: в тексте запроса можно писать комментарии. Две косые черты закрывают остаток строки, а пара «косая черта — звёздочка» открывает и закрывает многострочный комментарий. Комментарий в запросе стоит того же, что комментарий в коде: через полгода строка «отбор только по проведённым» объяснит будущему читателю больше, чем сам отбор. В отчётах на компоновке комментарии тоже сохраняются — их видно в схеме.
Последнее, что делает первый запрос полезным, — привычка сверять результат с известным числом. Написали запрос по продажам за март — откройте типовой отчёт за тот же март и сравните итог. Совпало — запрос можно показывать людям. Не совпало — вы только что нашли ошибку до того, как её нашёл кто-то другой, и это лучшее, что может случиться с новым отчётом.