В процессе разработки на платформе 1С:Предприятие программисты часто сталкиваются с особенностями работы встроенного конструктора запросов. Одной из таких особенностей является генерация текста запроса с явным указанием псевдонимов полей. Многие разработчики предпочитают видеть в коде конструкцию ВЫБРАТЬ Поле КАК Поле вместо лаконичного ВЫБРАТЬ Поле, так как это упрощает чтение структуры запроса и последующий перенос полей во временные таблицы или вложенные запросы. Разберем подробно, как добиться автоматической подстановки ключевого слова КАК и почему поведение системы может меняться.
Проанализируем ситуацию, возникшую в обсуждении: в старых версиях платформы (например, 8.2.16) конструктор запросов придерживался принципа «минимизации кода». Если имя поля в базе данных полностью совпадало с желаемым именем в результате запроса, система считала избыточным добавлять оператор КАК. Это делало текст запроса чище, но лишало его явной структуры синонимов.
Рассмотрим пример того, как это выглядит в «сжатом» виде:
ВЫБРАТЬ
Банки.Ссылка,
Банки.Код,
Банки.Наименование
ИЗ
Справочник.Банки КАК Банки
В современных версиях платформы (начиная с релизов 8.3.15–8.3.18 и выше) логика была пересмотрена. Теперь стандартный конструктор запросов при простом открытии и закрытии (нажатии кнопки «ОК») автоматически дописывает псевдонимы ко всем выбранным полям, даже если они совпадают с именами объектов метаданных. Посмотрим, как преобразуется тот же запрос в актуальных версиях платформы:
ВЫБРАТЬ
Банки.Ссылка КАК Ссылка,
Банки.Код КАК Код,
Банки.Наименование КАК Наименование
ИЗ
Справочник.Банки КАК Банки
Таким образом, первым и самым простым решением проблемы является обновление платформы 1С до актуального релиза. Если же вы вынуждены работать на устаревших версиях, разберем альтернативные методы.
Выясним, как заставить конструктор прописать псевдонимы вручную, не прибегая к редактированию текста. В конструкторе запросов существует специализированная закладка «Объединения/Псевдонимы». Рассмотрим алгоритм действий:
ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, платформа обязана жестко закрепить имена полей для обеспечения совместимости типов и структур разных частей запроса. Использование объединения — гарантированный способ получить явные псевдонимы в тексте.Зачастую штатный конструктор в конфигураторе ведет себя слишком консервативно. Проанализируем возможности сторонних инструментов. Многие разработчики используют расширенные консоли запросов (например, консоль от ИР, консоли на управляемых формах с порталов сообществ). В таких инструментах часто встроены функции форматирования текста.
При нажатии кнопки «Выполнить» или «ОК» в продвинутой консоли, текст запроса прогоняется через специальный парсер, который автоматически расставляет КАК для каждого поля. Это особенно полезно при работе со сложными выборками, где присутствуют обращения через точку или вычисляемые выражения.
Рассмотрим ситуацию, когда нам необходимо поместить результат во временную таблицу. При использовании закладки «Дополнительно» и указании имени временной таблицы в поле ПОМЕСТИТЬ, конструктор более строго относится к именованию колонок. Выясним причину: для создания структуры таблицы в оперативной памяти серверу 1С необходимо четко понимать идентификатор каждой колонки.
Если вам нужно быстро сгенерировать текст с псевдонимами, попробуйте следующий прием:
Важно помнить, что явное указание псевдонима становится критически важным при использовании зарезервированных слов языка запросов. Если ваше поле называется так же, как встроенная функция или оператор, конструктор (особенно в версии 8.3) автоматически добавит КАК, чтобы избежать синтаксической ошибки при выполнении запроса на стороне СУБД. Проанализируем это: явное именование полей — это не только вопрос красоты кода, но и залог его стабильной работы при миграции между различными СУБД (MS SQL Server, PostgreSQL, Oracle).
Подведем итог: если ваш конструктор не ставит синонимы автоматически, скорее всего, вы используете платформу ниже версии 8.3.15. В этом случае используйте закладку «Объединения/Псевдонимы» или воспользуйтесь современной внешней консолью запросов, которая берет на себя задачу форматирования текста запроса.