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