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

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

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

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

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

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

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

Где находится запрос и как его открыть для редактирования

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

Если запрос написан в модуле, его текст обычно выглядит как длинная строка, присвоенная свойству Запрос.Текст. Установите курсор внутрь этой строки, нажмите правую кнопку мыши и выберите «Конструктор запроса» — платформа распознает текст и откроет его в визуальном редакторе. Если курсор стоит вне строки запроса, конструктор предложит создать новый запрос, поэтому позиция курсора важна.

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

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

Конструктор запроса — основной инструмент, который исключает синтаксические ошибки. В левой части окна расположено дерево «База данных» со всеми доступными таблицами, в центре — выбранные таблицы запроса, справа — список полей выборки.

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

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

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

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

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

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

"ВЫБРАТЬ

| Документы.Ссылка,

| Документы.Номер,

| Документы.Дата,

| Документы.Ответственный

|ИЗ

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

Здесь поле Документы.Ответственный добавлено последним в списке. Обратите внимание на запятые: они ставятся после каждого поля, кроме последнего. Лишняя запятая перед словом ИЗ — самая частая синтаксическая ошибка при ручном редактировании.

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

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

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

Документы.Ответственный КАК Менеджер,

Документы.СуммаДокумента * 0.2 КАК СуммаНДС

Вычисляемые поля строятся на выражениях: арифметика, функции языка запросов (РАЗНОСТЬДАТ, НАЧАЛОПЕРИОДА, ПОДСТРОКА), конструкция ВЫБОР для условной логики. В конструкторе выражение добавляется кнопкой «Добавить» над списком полей с последующим редактированием текста поля.

Ограничение: вычисляемое поле нельзя использовать в секции ГДЕ того же запроса по его псевдониму — условие нужно повторить полным выражением или вынести расчёт во временную таблицу.

Добавление поля из связанной таблицы

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

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

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

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

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

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

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

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

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

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

Колонки нет или все значения пустые

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

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

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

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

Значения из связанной таблицы
Норма

NULL только там, где связи действительно нет

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

NULL во всех строках — неверное условие связи

Выполнение в коде
Норма

Выборка обращается к полю по имени без ошибки

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

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

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

Типичные ошибки и их причины

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

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

Когда конструктор, а когда ручное редактирование

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

Конструктор запроса

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

Ручное редактирование

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

Консоль запросов

Лучший вариант для отладки: позволяет добавить поле и сразу увидеть результат на реальных данных до переноса текста в модуль

Практичный подход — комбинировать инструменты: собрать и проверить запрос в консоли, затем перенести готовый текст в модуль. Это сокращает количество итераций «изменил — запустил — получил ошибку» при доработке конфигурации.

FAQ: частые вопросы о добавлении полей в запрос 1С

Как добавить поле в запрос, если его нет в дереве конструктора?

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

Можно ли добавить поле без переписывания всего запроса?

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

Почему после добавления поля запрос стал возвращать больше строк?

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

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

Используйте конструкцию ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦ в тексте поля. В конструкторе добавьте новое поле кнопкой «Добавить» и впишите выражение вручную в колонку текста поля, задав псевдоним.

Поле добавлено в запрос СКД, но в отчёте не отображается. Что делать?

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

Влияет ли порядок полей в запросе на результат?

На данные — нет, порядок полей определяет только порядок колонок в результате. Но если код обращается к выборке по индексу, а не по имени, изменение порядка полей сломает логику. Обращение по имени поля надёжнее.