К статье
Практический материал

Разработка и Конфигурация · 13 мин

Псевдонимы в языке запросов 1С: назначение, синтаксис и практика

Что такое псевдонимы в языке запросов 1С, зачем нужно ключевое слово КАК, правила именования полей и таблиц, типичные ошибки и примеры кода.

Псевдонимы в языке запросов 1С — это альтернативные имена, которые разработчик присваивает полям и таблицам в тексте запроса с помощью ключевого слова КАК (в английском синтаксисе — AS). Псевдоним не изменяет данные в базе: он действует только внутри конкретного запроса и определяет, как будут называться источники данных и результирующие колонки.

Без псевдонимов платформа формирует имена полей результата автоматически, и они часто оказываются длинными, неудобными или неоднозначными. Например, при обращении к полю через точку (Товары.Номенклатура.Наименование) имя колонки результата будет сложно предсказать. Псевдоним решает эту проблему: вы явно задаёте имя, по которому затем обращаетесь к данным в коде — Выборка.НаименованиеТовара.

Псевдонимы применяются в двух местах: в секции ВЫБРАТЬ для полей результата и в секции ИЗ для таблиц-источников. Оба приёма считаются хорошей практикой: они делают запрос читаемым, упрощают сопровождение и защищают от ошибок при изменении конфигурации.

Для чего нужны псевдонимы полей

Основная задача псевдонима поля — задать понятное и стабильное имя колонки в результате запроса. Когда вы выбираете поле через несколько уровней точки или используете выражение (сумму, функцию, конструкцию ВЫБОР), платформа не всегда может сформировать осмысленное имя автоматически. Без явного псевдонима обращение к такой колонке из кода становится невозможным или требует угадывания сгенерированного имени.

Вторая причина — устранение конфликтов имён. Если запрос соединяет две таблицы, в каждой из которых есть поле Сумма, в результате окажутся две колонки с одинаковым именем, что вызовет ошибку или неоднозначность. Псевдонимы СуммаПродажи и СуммаОплаты снимают проблему полностью.

Третья причина — совместимость с конструкциями языка. Секции УПОРЯДОЧИТЬ ПО, СГРУППИРОВАТЬ ПО и ИТОГИ ПО могут ссылаться на поля результата по их псевдонимам, что делает текст запроса короче и понятнее. А в пакетных запросах и при объединении через ОБЪЕДИНИТЬ имена колонок определяются именно псевдонимами первого запроса.

Синтаксис: как объявить псевдоним

Псевдоним поля объявляется в секции ВЫБРАТЬ после выражения с ключевым словом КАК:

ВЫБРАТЬ

Продажи.Номенклатура КАК Товар,

СУММА(Продажи.Количество) КАК КоличествоПродано,

СУММА(Продажи.Сумма) КАК СуммаПродаж

ИЗ

РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО

Продажи.Номенклатура

Псевдоним таблицы объявляется в секции ИЗ (а также в секциях соединений) после имени источника с тем же ключевым словом КАК. Дальше все обращения к полям этой таблицы идут через псевдоним: Продажи.Номенклатура, а не РегистрНакопления.Продажи.Номенклатура.

Ключевое слово КАК для таблиц формально может опускаться — запрос сработает. Однако стандарты разработки рекомендуют писать его всегда: так текст читается однозначно, и меньше риск случайно принять имя таблицы за псевдоним или наоборот.

Псевдонимы присваиваются и вложенным запросам, и временным таблицам в секции ИЗ. Для вложенного запроса псевдоним обязателен — без него обратиться к его полям невозможно:

ВЫБРАТЬ

Сводка.Товар,

Сводка.КоличествоПродано

ИЗ

(ВЫБРАТЬ

Продажи.Номенклатура КАК Товар,

СУММА(Продажи.Количество) КАК КоличествоПродано

ИЗ

РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО

Продажи.Номенклатура) КАК Сводка

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

Псевдонимы таблиц: когда они обязательны

В простом запросе к одной таблице псевдоним источника — вопрос стиля, хотя короткое имя заметно сокращает текст. Но есть ситуации, где без псевдонима таблицы запрос написать нельзя в принципе.

Первая ситуация — соединение таблицы с самой собой (self join). Например, нужно сравнить цены товара на две даты или найти сотрудников с одинаковыми фамилиями. Оба экземпляра таблицы должны иметь разные псевдонимы, иначе платформа не сможет различить, к какому экземпляру относится поле:

ВЫБРАТЬ

Сотрудники1.ФИО КАК Сотрудник1,

Сотрудники2.ФИО КАК Сотрудник2

ИЗ

Справочник.Сотрудники КАК Сотрудники1

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники2

ПО Сотрудники1.Фамилия = Сотрудники2.Фамилия

И Сотрудники1.Ссылка <> Сотрудники2.Ссылка

Вторая ситуация — вложенные запросы и производные таблицы. Любой подзапрос в секции ИЗ обязан иметь псевдоним, потому что у него нет собственного имени метаданных. То же относится к временным таблицам, помещённым ранее в пакетном запросе: при обращении к ним псевдоним нужен для краткости и однозначности.

Правила именования и ограничения

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

Имя псевдонима не должно совпадать с другим псевдонимом поля в том же запросе — это вызовет ошибку дублирования колонки. Также не стоит называть псевдонимы зарезервированными словами языка запросов (ВЫБРАТЬ, ГДЕ, СУММА и т.п.) — конструктор может отказаться сохранять такой текст.

Практические рекомендации по именованию:

  • псевдоним поля должен описывать содержимое колонки: СуммаПродаж, а не Поле1;
  • псевдоним таблицы — короткое имя сущности: Товары, Оплаты, а не Т1;
  • в одном запросе придерживайтесь единого стиля — либо русские имена, либо английские, без смешения;
  • не используйте псевдоним, совпадающий с именем самой таблицы метаданных, если в запросе участвуют похожие источники, — это путает при чтении.
Типичные ошибки
01
Одинаковые псевдонимы у двух полей результата — ошибка дублирования колонки, запрос не выполнится
02
Обращение к полю по старому имени после переименования псевдонима — в коде возникает ошибка «Поле не найдено»
03
Псевдоним таблицы, совпадающий с именем другой таблицы в запросе, — неоднозначность и неверные соединения
04
Отсутствие псевдонима у вложенного запроса в секции ИЗ — синтаксическая ошибка, запрос не сохраняется
05
Пробелы и спецсимволы в имени псевдонима — нарушение правил идентификаторов

Псевдонимы в объединениях, итогах и коде

При объединении запросов через ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ имена колонок итогового результата берутся из псевдонимов первого запроса. В остальных частях объединения псевдонимы можно не писать — важен только порядок и совместимость типов полей. Это удобно, но таит риск: если переставить поля местами во втором запросе, данные молча попадут не в те колонки.

В секциях УПОРЯДОЧИТЬ ПО и ИТОГИ ПО допустимо ссылаться на псевдонимы полей выборки. Это особенно полезно при сортировке по вычисляемому выражению: вместо повторения всей конструкции ВЫБОР КОГДА... достаточно указать её псевдоним.

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Продажи.Номенклатура КАК Товар,

| СУММА(Продажи.Сумма) КАК СуммаПродаж

|ИЗ

| РегистрНакопления.Продажи КАК Продажи

|СГРУППИРОВАТЬ ПО

| Продажи.Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Товар);

КонецЦикла;

Если в схеме компоновки данных используется запрос с псевдонимами, именно они становятся именами полей набора данных, доступных для настроек отчёта, отборов и ресурсов. Осмысленные псевдонимы здесь напрямую влияют на удобство пользователя, который видит эти имена в настройках.

Контрольные точки

Как проверить результат

Имена колонок результата
Норма

Совпадают с псевдонимами после КАК, обращение из кода работает

Тревожный признак

Колонка называется иначе — псевдоним не задан или задан не у того выражения

Запрос с самосоединением
Норма

У каждого экземпляра таблицы свой псевдоним, условия связи однозначны

Тревожный признак

Одинаковые псевдонимы или их отсутствие — ошибка выполнения

Объединение запросов
Норма

Данные каждой части попадают в правильные колонки

Тревожный признак

Значения смещены в чужие колонки — нарушен порядок полей

Частые ошибки и как их избежать

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

Вторая типовая ошибка — копирование фрагментов запроса между отчётами вместе с псевдонимами таблиц. Если в новом запросе уже есть источник с таким псевдонимом, соединения начинают работать не так, как ожидалось, либо запрос падает с ошибкой неоднозначности. Перед вставкой фрагмента проверьте уникальность всех псевдонимов.

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

Псевдонимы в консоли запросов и конструкторе

Конструктор запросов в конфигураторе автоматически проставляет псевдонимы таблиц по имени объекта метаданных и предлагает псевдонимы полей на закладке «Объединения/Псевдонимы». Там же можно переименовать любое поле результата, не редактируя текст вручную. Это удобно при первичной сборке запроса.

При работе в консоли запросов (типовой или сторонней) результат выполнения отображается таблицей, где заголовки колонок — это ваши псевдонимы. Если заголовок выглядит как набор символов или системное имя, значит, псевдоним не задан, и при переносе запроса в код обращение к такой колонке потребует уточнения.

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

Как добавить псевдонимы в существующий запрос
  1. 1
    Откройте текст запроса и найдите секцию ВЫБРАТЬ — выпишите все поля и выражения
  2. 2
    Каждому выражению и полю через точку добавьте КАК с осмысленным именем
  3. 3
    В секции ИЗ и в соединениях задайте короткие псевдонимы таблиц, замените обращения к полям на новые имена
  4. 4
    Проверьте, что все псевдонимы уникальны и не совпадают с зарезервированными словами
  5. 5
    Выполните запрос в консоли и сверьте заголовки колонок с ожидаемыми
  6. 6
    Обновите обращения к полям в коде модуля по новым псевдонимам

Часто задаваемые вопросы

Обязательно ли писать ключевое слово КАК?

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

Можно ли использовать псевдоним поля в секции ГДЕ?

Нет. Секция ГДЕ вычисляется до формирования результата, поэтому в ней нужно ссылаться на реальные поля таблиц или повторять выражение целиком. Псевдонимы доступны в секциях УПОРЯДОЧИТЬ ПО, ИТОГИ ПО и в конструкции ИМЕЮЩИЕ для агрегатных выражений.

Что будет, если два поля получат одинаковый псевдоним?

Запрос завершится с ошибкой дублирования имени колонки результата. Платформа требует уникальности имён полей выборки, поэтому при соединении таблиц с одноимёнными полями каждому нужно дать отдельный псевдоним.

Влияют ли псевдонимы на скорость выполнения запроса?

Нет. Псевдоним — это только имя на уровне текста запроса, СУБД получает уже развёрнутое обращение к реальным полям и индексам. На производительность влияют соединения, отборы и индексы, но не именование.

Как обратиться к полю, если псевдоним не задан?

Платформа присвоит колонке автоматическое имя, обычно совпадающее с именем последнего поля в пути через точку. Однако для выражений (СУММА, ВЫБОР, арифметика) автоматическое имя может отсутствовать или быть неочевидным, поэтому надёжнее всегда задавать псевдоним явно.

Нужны ли псевдонимы во временных таблицах пакетного запроса?

При создании временной таблицы (ПОМЕСТИТЬ) псевдонимы полей определяют имена её колонок — они обязательны для дальнейшего обращения. Псевдоним самой временной таблицы в секции ИЗ не обязателен, но рекомендуется при соединениях для краткости и читаемости.

Итог

Что важно запомнить

Псевдоним задаётся ключевым словом КАК и определяет имя колонки результата или таблицы внутри запроса. Псевдонимы полей обязательны для выражений и нужны для обращения из кода, псевдонимы таблиц обязательны при самосоединениях и во вложенных запросах. После любого переименования псевдонима обновляйте все обращения к нему в коде.