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

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

Как посмотреть запрос динамического списка в 1С

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

Динамический список в 1С — основа большинства форм списков документов, справочников и журналов. Когда список выводит не те данные, работает медленно или «теряет» записи после отбора, первым делом нужно посмотреть, какой запрос реально уходит в СУБД. В зависимости от ситуации текст запроса можно увидеть в конфигураторе, в отладчике, в консоли запросов или в технологическом журнале.

Важно понимать, что запрос динамического списка существует в двух видах: тот, что задан разработчиком в свойствах списка (или установлен программно), и тот, который платформа фактически формирует с учётом отборов, сортировки, прав доступа на уровне записей (RLS) и параметров. Первый видно сразу, второй — только косвенными способами.

Ниже разобраны все рабочие способы: от простого просмотра в конфигураторе до перехвата итогового SQL-запроса. Выбор зависит от того, есть ли у вас доступ к конфигуратору, право на отладку и монопольный ли режим доступен.

Просмотр запроса в конфигураторе через свойства формы

Самый простой случай — запрос задан статически в метаданных формы. Откройте конфигуратор, найдите нужный объект (справочник, документ, журнал), откройте его основную форму списка. В дереве реквизитов формы найдите реквизит типа «ДинамическийСписок» — обычно он называется «Список».

Откройте палитру свойств этого реквизита. Если установлен флажок «Произвольный запрос», рядом со свойством «Запрос» будет кнопка открытия — нажмите её, и откроется конструктор запроса с полным текстом. Если флажок не установлен, список построен по основной таблице объекта, и явного запроса нет: платформа сама формирует выборку всех полей.

Обратите внимание на соседние свойства: «Основная таблица», «Динамическое считывание данных», «Автозаполнение доступных полей». Они влияют на итоговый запрос, который платформа отправит в СУБД, даже если исходный текст выглядит простым.

Как открыть запрос в конфигураторе
  1. 1
    Откройте конфигуратор и форму списка нужного объекта
  2. 2
    В реквизитах формы найдите ДинамическийСписок (обычно «Список»)
  3. 3
    Откройте свойства реквизита и проверьте флажок «Произвольный запрос»
  4. 4
    Нажмите кнопку открытия у свойства «Запрос» — откроется конструктор
  5. 5
    Скопируйте текст запроса для анализа в консоли запросов

Просмотр запроса, установленного программно

Часто запрос меняется из кода — например, в обработчике «ПриСозданииНаСервере» формы списка. Тогда в свойствах реквизита вы увидите пустой или базовый запрос, а реальный текст подставляется строкой вида:

Список.ТекстЗапроса = "ВЫБРАТЬ ... ИЗ Документ.РеализацияТоваровУслуг КАК Реализация";

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

Просмотр фактического запроса через отладчик

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

В табло или через «Вычислить выражение» проверьте:

  • Список.ТекстЗапроса — текущий текст запроса;
  • Список.Параметры — значения параметров, подставляемых в запрос;
  • Список.Отбор — элементы отбора, которые платформа добавит к запросу сама;
  • Список.КомпоновщикНастроек.Настройки — пользовательские отборы и сортировка.

Именно комбинация текста запроса, параметров и отборов даёт итоговый SQL. Учтите: платформа дополнительно накладывает ограничения RLS и поля для динамического считывания, поэтому итоговый запрос в СУБД всегда шире того, что вы видите в свойстве ТекстЗапроса.

Анализ запроса в консоли запросов

Скопированный из конфигуратора или отладчика текст удобно проверить в консоли запросов (встроенной в типовые конфигурации через «Все функции» → стандартная обработка, либо внешней). Вставьте текст, заполните параметры значениями из отладчика и выполните.

Консоль позволяет сравнить результат запроса с тем, что показывает список. Если консоль возвращает записи, а список — нет, проблема не в запросе, а в отборах, настройках компоновщика или RLS. Если и консоль пуста — дело в условиях самого запроса или значениях параметров.

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

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

Результат в консоли запросов
Норма

Записи возвращаются и совпадают со списком

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

Консоль пуста или данные отличаются от списка

Параметры запроса
Норма

Типы и значения параметров соответствуют типам полей

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

Параметр Неопределено или тип не совпадает с типом поля

Отборы списка
Норма

В настройках списка нет скрытых лишних отборов

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

Есть отборы, установленные программно или пользователем

Перехват итогового SQL-запроса через технологический журнал

Когда нужно увидеть именно тот SQL, который платформа отправила в СУБД (с учётом RLS, виртуальных таблиц и соединений), используется технологический журнал. В файл logcfg.xml добавляют события DBMSSQL (для клиент-серверного режима) или DBV8DBENG (для файлового) с фильтром по нужной базе.

После включения журнала откройте форму списка в режиме предприятия, затем найдите в логе события DBMSSQL по времени и пользователю. Текст запроса будет транслирован в диалект конкретной СУБД — он заметно отличается от запроса на языке 1С, но именно его можно профилировать средствами СУБД (план запроса, статистика ожиданий).

После анализа отключите или сузьте фильтры технологического журнала: полная запись событий СУБД сильно нагружает диск и замедляет работу сервера.

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

Типовые ситуации и частые ошибки

Разные симптомы указывают на разные уровни проблемы, и способ просмотра запроса стоит выбирать под конкретную ситуацию.

СимптомГде смотретьВероятная причина
Список пуст, хотя данные естьКонсоль запросов + отборыЛишний отбор или параметр Неопределено
Список медленно открываетсяТехнологический журнал, план запросаСоединения без индексов, RLS
Записи дублируютсяТекст запроса в конфигуратореСоединение с таблицей «один ко многим»
Запрос отличается от ожидаемогоПоиск по коду, расширенияТекстЗапроса переустановлен программно
Типичные ошибки
01
Смотреть только ТекстЗапроса и игнорировать отборы компоновщика — итоговый запрос оказывается другим
02
Забыть про расширения конфигурации: доработанный запрос лежит в расширении, а не в основном модуле
03
Анализировать запрос без фактических значений параметров — выводы о производительности неверны
04
Оставить включённый технологический журнал с событием DBMSSQL — растёт нагрузка на диск

Ограничения и когда нужен специалист

Не все уровни запроса доступны без соответствующих прав. Просмотр в конфигураторе требует права на конфигурирование, отладка — права на отладку и часто монопольный доступ в файловом режиме, технологический журнал — доступа к серверу 1С и каталогу логов.

Если конфигурация на поддержке без возможности изменения, просмотр запроса не ограничен, а вот его изменение потребует снятия с поддержки или расширения. Для анализа производительности итогового SQL на промышленной базе разумно привлекать администратора СУБД: план запроса и индексы — его зона ответственности.

Итог

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

Исходный запрос динамического списка виден в свойствах реквизита формы в конфигураторе, программно заданный — поиском по ТекстЗапроса в коде и расширениях, текущее состояние — в отладчике, а итоговый SQL — в технологическом журнале. Всегда проверяйте отборы и параметры вместе с текстом запроса.

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

Почему в свойствах динамического списка нет текста запроса?

Если флажок «Произвольный запрос» не установлен, платформа сама строит выборку по основной таблице объекта. Явного текста нет — отборы и поля добавляются автоматически. Чтобы увидеть логику, проверьте код формы и настройки списка.

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

Отборы хранятся в Список.КомпоновщикНастроек.Настройки.Отбор — их видно в отладчике. Итоговый SQL с этими отборами доступен только через технологический журнал (событие DBMSSQL).

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

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

Почему запрос в технологическом журнале отличается от текста в конфигураторе?

Платформа транслирует запрос 1С в диалект СУБД, добавляет поля для динамического считывания, условия RLS, отборы и соединения с таблицами представлений. Это нормально — сравнивать нужно логику, а не текст дословно.

Как понять, что запрос переопределён в расширении?

Откройте список расширений конфигурации и поищите в них заимствованную форму списка. Если форма заимствована, код её модуля в расширении выполняется вместе с основным и может менять ТекстЗапроса и параметры.