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

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

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

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

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

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

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

Что считается «своим полем» в запросе 1С

Прежде чем менять текст запроса, определите, какой именно тип поля нужен. От этого зависит синтаксис и место добавления. Реквизит объекта просто дописывается в выборку, вычисляемое поле требует выражения, а поле-константа — литерала или параметра.

Типичные сценарии:

  • добавить реквизит, которого нет в выборке, например к выборке документов подключить поле «Ответственный»;
  • вычислить значение на лету: сумма с НДС, количество дней между датами, признак просрочки;
  • вывести фиксированное значение для всех строк — например, признак типа строки или наименование источника;
  • подставить значение параметра, переданного из кода, в каждую строку результата.

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

Конструктор запроса — самый безопасный способ для тех, кто не уверен в синтаксисе. Откройте текст модуля, установите курсор внутрь строки запроса, нажмите правую кнопку мыши и выберите «Конструктор запроса». Если запроса еще нет, конструктор предложит создать его с нуля.

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

Для вычисляемого поля нажмите кнопку «Добавить» над списком полей и впишите выражение вручную, например РеализацияТоваров.Сумма * 1.2. Затем на вкладке «Дополнительно» или прямо в списке задайте псевдоним — конструктор добавит ключевое слово КАК.

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

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

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

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

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

"ВЫБРАТЬ

| РеализацияТоваров.Номенклатура КАК Номенклатура,

| РеализацияТоваров.Количество КАК Количество,

| РеализацияТоваров.Сумма КАК Сумма,

| РеализацияТоваров.Сумма * 1.2 КАК СуммаСНДС

|ИЗ

| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваров";

В примере поле «СуммаСНДС» — вычисляемое: его нет в таблице документа, но оно появляется в результате запроса. Обратиться к нему из кода можно через Выборка.СуммаСНДС.

Вычисляемые поля: выражения, функции и ВЫБОР

Язык запросов поддерживает арифметику, строковые функции, работу с датами и условную логику. Это позволяет формировать сложные поля без постобработки в коде. Например, разницу в днях между датой документа и произвольной датой дает функция РАЗНОСТЬДАТ.

Условное значение формируется конструкцией ВЫБОР — аналогом «если-иначе»:

ВЫБОР

КОГДА РеализацияТоваров.Сумма > 100000

ТОГДА "Крупная отгрузка"

ИНАЧЕ "Стандартная"

КОНЕЦ КАК КатегорияОтгрузки

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

bsl
Запрос.Текст = "ВЫБРАТЬ Т.Номенклатура КАК Номенклатура, Т.Сумма * 1.2 КАК СуммаСНДС, &ТипЦен КАК ТипЦен ИЗ Документ.РеализацияТоваровУслуг.Товары КАК Т"; Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦен.НайтиПоНаименованию("Розничная"));

Поле из параметра и константное поле

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

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

"ВЫБРАТЬ

| Товары.Номенклатура КАК Номенклатура,

| &Склад КАК СкладОтгрузки

|ИЗ

| Документ.РеализацияТоваровУслуг.Товары КАК Товары";

Запрос.УстановитьПараметр("Склад", ТекущийСклад);

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

Маршрут решения

Как выбрать способ

Нужен существующий реквизит объектаДобавьте его в список выборки через точку от таблицы-источника
Значение нужно рассчитать на летуИспользуйте выражение или функцию языка запросов с псевдонимом КАК
Значение одинаково для всех строк и известно в кодеПередайте его параметром и выведите в выборку
Логика зависит от условийПримените конструкцию ВЫБОР...КОГДА...ТОГДА...КОНЕЦ

Проверка результата и типичные ошибки

После правки запроса проверьте его до запуска в боевом режиме. В конфигураторе удобно использовать консоль запросов: вставьте текст, задайте параметры и выполните — сразу видны состав полей и данные. В коде результат проверяется выборкой: Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ... КонецЦикла;.

Обращение к несуществующему полю выборки по псевдониму вызовет ошибку «Поле не найдено». Поэтому псевдонимы должны быть уникальными и не совпадать с зарезервированными словами. Если поле добавлено в объединяемый запрос (ОБЪЕДИНИТЬ ВСЕ), аналогичное по типу поле должно присутствовать во всех частях объединения — в тех частях, где данных нет, подставляйте NULL или литерал нужного типа.

Типичные ошибки
01
Лишняя запятая перед ИЗ — запрос не проходит синтаксический контроль
02
Поле без указания таблицы при соединении нескольких таблиц — ошибка неоднозначности
03
Разные типы поля в частях ОБЪЕДИНИТЬ — ошибка выполнения или потеря данных
04
Псевдоним с пробелом или кириллическим зарезервированным словом — обращение из кода не работает
05
Забытый УстановитьПараметр — ошибка «Параметр не определен» при выполнении
Контрольные точки

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

Состав полей результата
Норма

Новое поле видно в консоли запросов или доступно через Выборка.Псевдоним

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

Ошибка «Поле не найдено» или поле отсутствует в колонках

Значения вычисляемого поля
Норма

Значения соответствуют формуле на контрольном примере

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

NULL, нули или неверный тип данных

Производительность
Норма

Запрос выполняется за приемлемое время на реальном объеме

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

Резкое замедление после добавления поля из соединяемой таблицы

Ограничения и безопасная работа

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

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

Итог

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

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

Частые вопросы

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

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

Можно ли добавить поле с произвольным текстом в каждую строку?

Да. Впишите строковый литерал в кавычках прямо в список выборки, например "Реализация" КАК ВидОперации. Такой прием часто используют при объединении запросов, чтобы различать источники строк.

Почему вычисляемое поле возвращает NULL?

Чаще всего потому, что один из операндов выражения равен NULL — арифметика с NULL всегда дает NULL. Оберните поля в функцию ЕСТЬNULL(Поле, 0), чтобы подставить значение по умолчанию.

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

По псевдониму, заданному после КАК: Выборка.СуммаСНДС. Если псевдоним не задан, платформа присвоит полю имя вида «Поле1», которое неудобно и ненадежно использовать — всегда задавайте осмысленные псевдонимы.

Добавится ли поле запроса в отчет на СКД автоматически?

В схеме компоновки данных поле запроса появится в списке доступных полей, но для вывода в отчет его нужно добавить на вкладку настроек (выбранные поля, ресурсы или группировки). После изменения запроса откройте конструктор СКД и обновите настройки.

Можно ли добавить поле в запрос динамического списка?

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