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

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

Как добавить поле в запросе 1С

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

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

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

Ниже разобраны оба способа, работа с псевдонимами и вычисляемыми полями, особенности полей через точку, типичные ошибки и способы проверить результат до переноса запроса в рабочий код.

Где именно в запросе добавляется поле

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

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

Добавление поля через конструктор запроса

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

Чтобы добавить поле, раскройте нужную таблицу в дереве, найдите реквизит и перетащите его в список «Поля» в центральной части конструктора. Если таблицы ещё нет в запросе, сначала перенесите её в список «Таблицы» — тогда её реквизиты станут доступны для выбора. Порядок полей в списке определяет порядок колонок в результате.

Порядок действий в конструкторе
  1. 1
    Откройте конструктор запроса из модуля или консоли
  2. 2
    Добавьте нужную таблицу в список «Таблицы»
  3. 3
    Раскройте таблицу и перетащите реквизит в список «Поля»
  4. 4
    При необходимости задайте псевдоним в колонке «Имя»
  5. 5
    Нажмите «ОК» и проверьте сформированный текст запроса

После нажатия «ОК» конструктор сформирует текст запроса автоматически. Полезно сравнить его с прежним вариантом: конструктор иногда переписывает весь текст, и ручные правки, сделанные ранее вне конструктора, могут быть переформатированы.

Добавление поля вручную в тексте запроса

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

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

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

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

Псевдонимы и вычисляемые поля

Псевдоним (КАК Имя) стоит задавать всегда, даже если имя совпадает с именем реквизита. Это делает код устойчивым: при обращении к результату запроса вы используете предсказуемое имя, а не автоматически сгенерированное. Для полей через точку псевдоним обязателен на практике — иначе обратиться к колонке будет неудобно.

Вычисляемое поле — это выражение вместо реквизита: арифметика, функции, конструкция ВЫБОР. Например, можно вывести сумму с НДС или признак просрочки документа. Такое поле обязательно должно иметь псевдоним, иначе запрос не выполнится.

bsl
ВЫБРАТЬ
	Таб.Сумма КАК Сумма,
	Таб.Сумма * 0.2 КАК СуммаНДС,
	ВЫБОР
		КОГДА Таб.Сумма > 100000
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК КрупнаяСделка
ИЗ
	Документ.ЗаказКлиента КАК Таб

Поля через точку и соединение таблиц

Конструкция «Таблица.Ссылка.Реквизит» позволяет вывести данные связанного объекта без явного соединения: например, Док.Контрагент.Наименование. Это удобно для одного-двух полей, но каждое обращение через точку фактически порождает скрытое соединение, что при большом количестве таких полей замедляет запрос.

Если нужно много полей из связанной таблицы, правильнее явно добавить её в секцию ИЗ и настроить соединение через закладку «Связи» в конструкторе или конструкцию ЛЕВОЕ СОЕДИНЕНИЕ вручную. После этого реквизиты второй таблицы добавляются в выборку обычным способом.

Сравнение вариантов

Поле через точку

Быстро для 1–2 реквизитов связанного объекта; при массовом использовании снижает производительность и затрудняет отладку

Явное соединение таблиц

Оптимально при выборке нескольких полей связанного объекта; требует корректного условия связи, иначе возможны задвоения строк

Вычисляемое поле

Подходит для расчётов и признаков на лету; результат не хранится в базе и вычисляется при каждом выполнении запроса

Проверка результата в консоли запросов

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

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

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

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

Наличие колонки в результате
Норма

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

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

Запрос не выполняется или колонки нет — ошибка в имени поля

Значения в новой колонке
Норма

Значения соответствуют данным объектов

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

Пустые значения там, где реквизит заполнен — неверная таблица или связь

Количество строк
Норма

Число строк совпадает с ожидаемым по отбору

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

Строки задвоились — ошибка в условии соединения таблиц

Типичные ошибки и ограничения

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

Вторая группа ошибок связана с группировкой и итогами: добавление неагрегатного поля в запрос с СГРУППИРОВАТЬ ПО, а также использование поля в секции ИМЕЮЩИЕ без агрегатной функции. Третья группа — обращение к добавленному полю в коде по старому имени: если псевдоним изменили, все обращения вида Выборка.СтароеИмя нужно обновить.

Типичные ошибки
01
Опечатка в имени реквизита — запрос падает с ошибкой «Поле не найдено»
02
Добавление поля без псевдонима для выражения — синтаксическая ошибка при выполнении
03
Новое поле в запросе с группировкой без агрегатной функции — ошибка компоновки запроса
04
Изменён псевдоним, но код обращения к результату не обновлён — обращение к несуществующему свойству
05
Множество полей через точку вместо соединения — заметное замедление запроса на больших объёмах

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

Как добавить поле табличной части документа в запрос?

Табличную часть нужно добавить как отдельный источник: в конструкторе раскройте документ и перенесите в список таблиц узел вида «Документ.РеализацияТоваровУслуг.Товары». После этого её реквизиты доступны для выборки. Учтите, что результат будет содержать по строке на каждую строку табличной части.

Можно ли добавить поле, которого нет в базе данных?

Да, через вычисляемое выражение: константу, результат арифметики, функции или конструкцию ВЫБОР. Такое поле существует только в результате запроса и обязательно должно иметь псевдоним. Сохранить его в базу можно только через запись в реквизит объекта отдельным кодом.

Почему после добавления поля в запрос отчёта на СКД оно не появилось в отчёте?

В схеме компоновки данных поле набора данных и поле отчёта — разные сущности. После добавления поля в запрос набора откройте закладку «Настройки» и добавьте поле в выбранные поля отчёта, а также проверьте закладку «Ресурсы», если поле должно суммироваться.

Что делать, если конструктор запроса не открывается из кода?

Конструктор работает только в конфигураторе и только для текста запроса, оформленного как строковый литерал в модуле. Если запрос собирается динамически из нескольких строк, скопируйте итоговый текст в консоль запросов и редактируйте там, либо временно оформите его единым литералом.

Влияет ли добавление поля на права доступа?

Да. Если у пользователя нет права «Чтение» на объект, чьё поле добавлено в запрос, выполнение завершится ошибкой нарушения прав доступа. Для отчётов, которые должны работать у пользователей с ограниченными правами, проверяйте состав полей или используйте привилегированный режим там, где это оправдано.

Итог

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

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