Разработка и Конфигурация · 9 мин
Как добавить поле в запрос в 1С
Как добавить поле в запрос 1С: конструктор запроса, ручное редактирование текста, псевдонимы, соединения таблиц и типичные ошибки при работе с полями.
Добавление поля в запрос — одна из самых частых операций при доработке отчётов, обработок и выборок данных в 1С. Задача решается двумя способами: через визуальный конструктор запроса или прямым редактированием текста запроса на встроенном языке. Оба подхода дают одинаковый результат, но отличаются по скорости и контролю над деталями.
Прежде чем добавлять поле, важно понимать, откуда оно берётся: из основной таблицы запроса, из присоединённой таблицы или вычисляется как выражение. От этого зависит, нужно ли просто перенести реквизит в список выборки или сначала настроить соединение таблиц.
Ниже разобраны оба способа, работа с псевдонимами и вычисляемыми полями, а также типичные ошибки, из-за которых запрос перестаёт выполняться или возвращает не те данные.
Где находится запрос и как его открыть для редактирования
Запрос в 1С может существовать в нескольких местах: в модуле объекта как строка на встроенном языке, в схеме компоновки данных отчёта, в консоли запросов на этапе отладки. Способ редактирования зависит от того, где запрос расположен.
Если запрос написан в модуле, его текст обычно выглядит как длинная строка, присвоенная свойству Запрос.Текст. Установите курсор внутрь этой строки, нажмите правую кнопку мыши и выберите «Конструктор запроса» — платформа распознает текст и откроет его в визуальном редакторе. Если курсор стоит вне строки запроса, конструктор предложит создать новый запрос, поэтому позиция курсора важна.
В отчётах на СКД текст запроса находится на закладке «Наборы данных» в схеме компоновки. Там же доступен тот же конструктор запроса, но изменения нужно дополнительно проверять на закладках «Ресурсы» и «Настройки», потому что новое поле не появится в отчёте автоматически.
Добавление поля через конструктор запроса
Конструктор запроса — основной инструмент, который исключает синтаксические ошибки. В левой части окна расположено дерево «База данных» со всеми доступными таблицами, в центре — выбранные таблицы запроса, справа — список полей выборки.
- 1Откройте конструктор запроса из модуля или схемы компоновки данных
- 2На закладке «Таблицы и поля» раскройте в левом дереве таблицу, из которой нужно поле
- 3Найдите реквизит и перенесите его в список «Поля» двойным щелчком или кнопкой со стрелкой
- 4Если таблицы нет в центральном списке — сначала перенесите её туда, а затем добавьте поле
- 5Нажмите «ОК» и проверьте, что текст запроса обновился
Если нужный реквизит относится к таблице, которой ещё нет в запросе, сначала перенесите саму таблицу в центральную область. Конструктор автоматически предложит связь по ссылочному полю, если она очевидна, но связь стоит проверить на закладке «Связи» — неверное соединение приведёт к задвоению строк или потере данных.
Для виртуальных таблиц (остатки, обороты регистров) поля добавляются так же, но обратите внимание: часть полей там доступна только после настройки параметров виртуальной таблицы, например периода или отбора по измерениям.
Добавление поля вручную в тексте запроса
Ручное редактирование быстрее, когда нужно добавить одно поле в готовый запрос или когда конструктор недоступен, например при работе с текстом в переменной. Поле дописывается в секцию выборки после ключевого слова ВЫБРАТЬ через запятую.
Запрос.Текст =
"ВЫБРАТЬ
| Документы.Ссылка,
| Документы.Номер,
| Документы.Дата,
| Документы.Ответственный
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документы";
Здесь поле Документы.Ответственный добавлено последним в списке. Обратите внимание на запятые: они ставятся после каждого поля, кроме последнего. Лишняя запятая перед словом ИЗ — самая частая синтаксическая ошибка при ручном редактировании.
Поле указывается через псевдоним таблицы, заданный в секции ИЗ (в примере это Документы). Если обратиться к реквизиту без псевдонима, запрос может сработать при одной таблице, но при соединении нескольких таблиц платформа выдаст ошибку неоднозначности поля.
Псевдонимы полей и вычисляемые поля
По умолчанию поле в результате запроса получает имя реквизита. Если нужно другое имя — например, для схемы компоновки данных или для обращения к выборке в коде, — используется конструкция КАК. В конструкторе псевдоним задаётся в колонке «Имя» списка полей, вручную — после описания поля.
Документы.Ответственный КАК Менеджер,
Документы.СуммаДокумента * 0.2 КАК СуммаНДС
Вычисляемые поля строятся на выражениях: арифметика, функции языка запросов (РАЗНОСТЬДАТ, НАЧАЛОПЕРИОДА, ПОДСТРОКА), конструкция ВЫБОР для условной логики. В конструкторе выражение добавляется кнопкой «Добавить» над списком полей с последующим редактированием текста поля.
Ограничение: вычисляемое поле нельзя использовать в секции ГДЕ того же запроса по его псевдониму — условие нужно повторить полным выражением или вынести расчёт во временную таблицу.
Добавление поля из связанной таблицы
Когда нужного реквизита нет в основной таблице, его берут из связанной. Типичный пример: в запросе по табличной части документа нужен реквизит шапки, или в запросе по документам нужен телефон контрагента из справочника.
В конструкторе достаточно раскрыть поле ссылочного типа в дереве — платформа показывает реквизиты связанного объекта через точку, например Контрагент.ИНН. Такое обращение называется разыменованием, и для одиночных полей оно работает без явного соединения.
Для явного соединения перенесите вторую таблицу в запрос, на закладке «Связи» укажите поля связи и тип соединения. Левое соединение сохранит все строки основной таблицы даже при отсутствии связанной записи — в этом случае добавленные поля вернут NULL, что нужно учитывать при дальнейшей обработке.
Проверка результата после добавления поля
После изменения запроса его нужно выполнить и убедиться, что поле возвращает ожидаемые данные. Быстрее всего это сделать в консоли запросов: скопируйте текст, задайте параметры и выполните запрос на реальных данных.
Как проверить результат
Новое поле присутствует и заполнено данными
Колонки нет или все значения пустые
Число строк не изменилось после добавления поля
Строки задвоились — ошибка в соединении таблиц
NULL только там, где связи действительно нет
NULL во всех строках — неверное условие связи
Выборка обращается к полю по имени без ошибки
Ошибка «Поле не найдено» — не совпадает псевдоним
Если запрос используется в отчёте на СКД, добавление поля в текст запроса — только половина работы. Поле должно быть доступно на закладке «Настройки» в списке выбранных полей, а для числовых показателей часто требуется добавить его в ресурсы на соответствующей закладке.
Типичные ошибки и их причины
Отдельная группа проблем связана с правами доступа. Если у пользователя нет права просмотра объекта, из которого добавлено поле, запрос у этого пользователя завершится ошибкой, хотя у разработчика под полными правами всё работает. Проверяйте доработанные запросы под типовой ролью пользователя.
Когда конструктор, а когда ручное редактирование
Сравнение вариантов
Подходит для сложных запросов с соединениями, группировками и итогами; исключает синтаксические ошибки, но медленнее при мелких правках
Быстрее для добавления одного-двух полей и выражений; требует внимательности к запятым, псевдонимам и символам продолжения строки
Лучший вариант для отладки: позволяет добавить поле и сразу увидеть результат на реальных данных до переноса текста в модуль
Практичный подход — комбинировать инструменты: собрать и проверить запрос в консоли, затем перенести готовый текст в модуль. Это сокращает количество итераций «изменил — запустил — получил ошибку» при доработке конфигурации.
FAQ: частые вопросы о добавлении полей в запрос 1С
Как добавить поле в запрос, если его нет в дереве конструктора?
Поле отсутствует в дереве, если его таблица не добавлена в запрос или если это реквизит, недоступный для выборки (например, табличная часть без соединения с ней). Добавьте нужную таблицу в центральный список конструктора либо используйте разыменование через ссылочное поле.
Можно ли добавить поле без переписывания всего запроса?
Да. Достаточно дописать имя поля через запятую в секции ВЫБРАТЬ существующего текста. Весь запрос переписывать не нужно — конструктор и ручное редактирование изменяют только затронутую часть.
Почему после добавления поля запрос стал возвращать больше строк?
Почти всегда причина не в самом поле, а в соединении таблиц, которое добавили вместе с ним. Если связь идёт по полю, не уникальному во второй таблице, строки основной таблицы дублируются. Проверьте условие связи и тип соединения на закладке «Связи».
Как добавить поле с условием — например, разные значения по виду документа?
Используйте конструкцию ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦ в тексте поля. В конструкторе добавьте новое поле кнопкой «Добавить» и впишите выражение вручную в колонку текста поля, задав псевдоним.
Поле добавлено в запрос СКД, но в отчёте не отображается. Что делать?
Откройте схему компоновки и проверьте три места: поле должно быть в списке выборки набора данных, доступно в настройках отчёта на закладке «Выбранные поля», а для числовых показателей — добавлено в ресурсы. После изменений обновите настройки варианта отчёта.
Влияет ли порядок полей в запросе на результат?
На данные — нет, порядок полей определяет только порядок колонок в результате. Но если код обращается к выборке по индексу, а не по имени, изменение порядка полей сломает логику. Обращение по имени поля надёжнее.