Разработка и Конфигурация · 10 мин
Как изменить запрос в 1С: пошаговая инструкция
Как изменить запрос в 1С: редактирование текста запроса в конфигураторе, консоли запросов и СКД, типовые ошибки, проверка результата и ответы на частые вопросы.
Запрос в 1С — это обращение к базе данных на встроенном языке запросов, похожем на SQL. Изменить запрос может понадобиться в трёх типичных ситуациях: правка запроса в модуле конфигурации, настройка отчёта на СКД без изменения кода и отладка запроса в консоли запросов на реальных данных. Подход различается: где-то достаточно прав пользователя, а где-то потребуется доступ к конфигуратору и понимание структуры метаданных.
Прежде чем менять текст запроса, определите, где именно он находится: в модуле объекта или формы, в схеме компоновки данных отчёта, в динамическом списке или во внешней обработке. От этого зависит и способ редактирования, и риски: ошибка в запросе динамического списка сломает рабочую форму у всех пользователей, а ошибка в консоли запросов не затронет никого, кроме вас.
Ниже разобраны все основные сценарии: от безопасной отладки в консоли до правки запросов в конфигураторе и проверки результата.
Где находится запрос: определяем место правки
Первый шаг — найти, какой именно запрос нужно изменить. В типовой конфигурации запросы встречаются в нескольких местах: в модулях объектов и форм (текст в свойстве Запрос.Текст), в схеме компоновки данных отчётов, в настройках динамических списков форм, в регламентных заданиях и во внешних обработках.
Быстрый способ найти запрос по фрагменту текста — глобальный поиск в конфигураторе: меню «Правка → Глобальный поиск», введите уникальную строку из запроса (например, имя таблицы или поля) и ограничьте поиск модулями. Если запрос формируется в отчёте на СКД, откройте отчёт, перейдите на закладку «Схема компоновки данных» и найдите набор данных.
Если запрос виден пользователю как динамический список (журнал документов, список справочника с отбором), откройте форму списка в конфигураторе, выделите таблицу формы и проверьте свойство «Произвольный запрос» — именно там хранится текст.
Ищите присвоение Запрос.Текст в модулях через глобальный поиск
Откройте схему компоновки данных отчёта в конфигураторе
Проверьте свойства основной таблицы формы списка
Используйте консоль запросов, конфигурацию менять не нужно
Как изменить запрос в конфигураторе
Для правки запроса в коде откройте конфигуратор, найдите нужный модуль и место, где формируется текст запроса. Обычно это строковый литерал в кавычках, присваиваемый свойству Запрос.Текст. Редактировать текст удобнее через конструктор запроса: поставьте курсор внутрь строки запроса, нажмите правую кнопку мыши и выберите «Конструктор запроса».
Конструктор позволяет визуально добавлять таблицы, поля, условия, группировки и соединения без ручного набора текста. После нажатия «ОК» изменённый текст автоматически подставится в модуль. Если конструктор сообщает об ошибке при открытии — в исходном тексте запроса уже есть синтаксическая ошибка, и её придётся исправить вручную.
После правки сохраните модуль и обновите конфигурацию базы данных (F7), если изменения затрагивают серверный код. Затем проверьте работу на тестовой копии базы: выполните действие, которое вызывает запрос, и убедитесь, что данные возвращаются корректно.
Изменение запроса отчёта на СКД
Отчёты на системе компоновки данных хранят запрос в наборе данных схемы. Откройте отчёт в конфигураторе, перейдите на закладку «Схема компоновки данных», выберите набор данных типа «Запрос» и нажмите кнопку редактирования текста запроса или вызовите конструктор.
В схеме компоновки действуют дополнительные правила: поля запроса должны быть согласованы с закладкой «Поля» и «Ресурсы» схемы. Если вы добавили в запрос новое поле, его нужно включить в список полей СКД, иначе оно не появится в отчёте. Удалённое из запроса поле, оставшееся в настройках, вызовет ошибку при формировании отчёта.
Изменение запроса без конфигуратора
Если конфигурация поддерживает пользовательские настройки, часть изменений доступна в режиме «1С:Предприятие»: через «Ещё → Изменить вариант отчёта» можно менять отборы, группировки и поля без правки самого запроса. Полностью заменить текст запроса так нельзя, но для большинства задач аналитики этого достаточно. Для внешних отчётов (.erf) схему можно открыть и отредактировать в конфигураторе через «Файл → Открыть».
Отладка и изменение запроса в консоли запросов
Консоль запросов — внешняя обработка, которая позволяет писать, изменять и выполнять запросы на реальных данных без изменения конфигурации. Это основной инструмент для проверки гипотез: скопируйте текст запроса из модуля, вставьте в консоль, задайте параметры и выполните. Вы сразу увидите результат и сможете итеративно подобрать правильный вариант.
Типовой порядок работы: скопировать запрос из кода, воспроизвести его в консоли с теми же параметрами, добиться нужного результата изменениями, затем перенести исправленный текст обратно в конфигурацию. Так вы исключаете цикл «изменил — обновил — проверил — ошибся» в рабочей базе.
Обратите внимание на параметры: в коде они часто заполняются динамически (Запрос.УстановитьПараметр). В консоли каждый параметр нужно задать вручную с тем же типом значения, иначе результат отладки будет отличаться от поведения в программе.
- 1Найдите запрос: глобальный поиск по тексту или схема компоновки отчёта
- 2Сохраните исходный текст запроса в отдельный файл
- 3Воспроизведите запрос в консоли запросов с реальными параметрами
- 4Внесите изменения и добейтесь нужного результата в консоли
- 5Перенесите текст в конфигурацию через конструктор запроса
- 6Обновите конфигурацию и проверьте работу на тестовой базе
- 7Только после проверки переносите изменение в рабочую базу
Типовые приёмы изменения текста запроса
Чаще всего запрос меняют по нескольким сценариям. Добавление поля: допишите поле в секцию ВЫБРАТЬ и убедитесь, что таблица-источник присутствует в секции ИЗ. Добавление отбора: дополните секцию ГДЕ условием с параметром (ГДЕ Таблица.Склад = &Склад) и не забудьте установить параметр в коде.
Добавление соединения таблиц выполняется через ЛЕВОЕ СОЕДИНЕНИЕ с условием связи по ключевым полям. Ошибка в условии соединения — частая причина задвоения строк результата. Если после добавления соединения суммы в отчёте выросли, проверьте, не соединяете ли вы таблицы по неуникальному ключу.
Для работы с периодическими данными (цены, курсы валют, кадровые сведения) используются виртуальные таблицы СрезПоследних и СрезПервых. При изменении таких запросов важно передавать дату среза параметром, а не функцией текущей даты, иначе отчёт за прошлый период покажет неверные значения.
Проверка результата после изменения
После правки запроса проверку стоит вести по трём направлениям: корректность данных, полнота выборки и производительность. Сравните результат нового запроса со старым на одинаковых данных: количество строк, итоговые суммы, наличие ключевых записей. Расхождение итогов — первый признак ошибки в соединениях или условиях.
Производительность проверяйте на объёме, близком к рабочему. Запрос, выполняющийся за секунду на пустой тестовой базе, может работать минутами на реальных данных. Особое внимание — обращениям к виртуальным таблицам без условий и вложенным запросам в секции ГДЕ.
Как проверить результат
Совпадает с ожиданием или изменилось объяснимо
Строки задвоились или пропали без причины
Сходятся с контрольными данными учёта
Суммы выросли или уменьшились после добавления соединения
Запрос выполняется за приемлемое время на реальном объёме
Выполнение занимает минуты, форма зависает
Все параметры из текста установлены в коде
Ошибка «Параметр не найден» при выполнении
Ограничения и когда нужен специалист
Самостоятельная правка оправдана для отчётов, консольной отладки и простых выборок. Привлекать разработчика стоит, когда запрос участвует в проведении документов, обмене данными, расчёте себестоимости или зарплаты — там ошибка влияет на учётные данные, а не только на отображение.
Отдельное ограничение — лицензионная политика: изменение типовых объектов на поддержке затрудняет обновления. Промышленный подход — выносить изменения в расширения конфигурации, которые позволяют переопределять модули и добавлять свои объекты, не трогая типовой код.
Что важно запомнить
Сначала найдите, где живёт запрос, затем отладьте изменения в консоли запросов и только потом переносите их в конфигурацию. Рабочую базу правьте последней, после проверки на копии, а типовые объекты меняйте через расширения.
Частые вопросы
Можно ли изменить запрос в 1С без конфигуратора?
Да, в ограниченных пределах. В режиме «1С:Предприятие» через настройки варианта отчёта можно менять отборы, поля и группировки, не трогая текст запроса. Для произвольного выполнения и отладки запросов используется внешняя обработка «консоль запросов». Полностью заменить текст запроса встроенного отчёта без конфигуратора нельзя.
Как открыть конструктор запроса, если кнопка неактивна?
Конструктор доступен, только когда курсор стоит внутри строкового литерала с текстом запроса в модуле. Если текст запроса собирается из нескольких строк или переменных, конструктор может не открыться — тогда скопируйте итоговый текст в консоль запросов и редактируйте там.
Почему после добавления таблицы в запрос суммы удвоились?
Причина почти всегда в соединении по неуникальному ключу: на одну строку левой таблицы нашлось несколько строк правой. Проверьте условие соединения, добавьте недостающие ключевые поля или замените соединение на подзапрос с группировкой.
Что делать, если запрос работает медленно после изменения?
Проверьте обращения к виртуальным таблицам: им нужны параметры отбора (период, измерения). Уберите выборку «по всем» данным, добавьте условия в секцию ГДЕ как можно раньше и избегайте соединений с подзапросами без индексируемых полей. Замер выполнения удобно делать в консоли запросов.
Как откатить изменение запроса, если что-то пошло не так?
Если исходный текст сохранён — просто верните его через конструктор или вставкой в модуль и обновите конфигурацию. Если копии нет, типовой текст можно восстановить из конфигурации поставщика через сравнение и объединение. Поэтому сохранение исходного текста перед правкой — обязательный шаг.
Можно ли изменить запрос типового отчёта, не снимая конфигурацию с поддержки?
Да, два пути: создать внешний отчёт с собственной схемой компоновки или использовать расширение конфигурации. Оба варианта сохраняют типовой объект нетронутым и не мешают штатному обновлению.