• МАКС: М.Базаров
  • Телеграм: М.Базаров
  • E-mail: mihail@bazarow.ru

1C-Битрикс getlist как вывести запрос в текстовом виде - увидеть выполняемый SQL

Вопрос задан: 27 мая 2026 в 05:00 | Просмотров: 43 Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetDocResource

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

В 1С-Битрикс есть несколько способов посмотреть SQL-запрос в текстовом виде, который формирует метод getList (как для D7 ORM, так и для старого API). Ниже приведены основные подходы.

Способ 1. SqlTracker (рекомендуемый)

Самый популярный и гибкий способ — использовать класс Bitrix\Main\Diag\SqlTracker. Он перехватывает все SQL-запросы между startTracker() и stopTracker().

Полный пример для ORM D7:

$connection = \Bitrix\Main\Application::getConnection();

// Запускаем трекинг (true — начать новый трекинг)
$connection->startTracker(true);

// Выполняем getList
$result = \Bitrix\Main\UserTable::getList([
    'filter' => ['ACTIVE' => 'Y'],
    'limit'  => 5,
])->fetchAll();

// Получаем объект трекера
$tracker = $connection->getTracker();

// Останавливаем трекинг
$connection->stopTracker();

// Перебираем все перехваченные запросы
$queries = $tracker->getQueries();
foreach ($queries as $query) {
    echo 'SQL: ' . $query->getSql() . '<br>';
    echo 'Время: ' . round($query->getTime(), 5) . ' сек.<hr>';
}

Метод $query->getSql() возвращает непосредственно текст SQL-запроса. Дополнительно доступны:

  • getTime() — время выполнения в секундах;
  • getTrace() — стек вызовов (где был выполнен запрос);
  • getBinds() — значения параметров, подставленные в запрос.

Способ 2. getTrackerQuery() у результата выборки

У объекта Bitrix\Main\DB\Result есть метод getTrackerQuery(), который позволяет получить объект последнего запроса напрямую:

$result = \Bitrix\Main\UserTable::getList([
    'filter' => ['=ID' => 1],
]);

// Получаем объект запроса трекера
$trackerQuery = $result->getTrackerQuery();

if ($trackerQuery) {
    echo 'SQL: ' . $trackerQuery->getSql();
    echo '<br>';
    echo 'Время: ' . $trackerQuery->getTime() . ' сек.';
}

Этот способ удобен, когда нужно «подсмотреть» SQL для одного конкретного вызова getList.

Способ 3. Запись лога SQL-запросов в файл

SqlTracker также умеет писать все запросы в файл:

$tracker = \Bitrix\Main\Application::getConnection()->startTracker(true);

// Указываем путь к лог-файлу
$logPath = $_SERVER['DOCUMENT_ROOT'] . '/upload/sql_queries.log';
$tracker->startFileLog($logPath);

// Выполняем запросы
$result = \Bitrix\Main\UserTable::getList(['filter' => ['ACTIVE' => 'Y']])->fetchAll();

// Останавливаем запись в файл
$tracker->stopFileLog();

Способ 4. Встроенный профайлер в админке

Если сайт работает в режиме отладки (define('BX_DEBUG', true); или SITE_CHARSET != "windows-1251"), в нижней части страницы административного интерфейса появляется панель профайлера. Там есть вкладка SQL, где отображаются все выполненные запросы, их текст и время выполнения.

Включить режим отладки можно в файле bitrix/.settings.php:

'exception_handling' => [
    'value' => [
        'debug' => true,
    ],
],

Важно: не включайте режим отладки на боевом (production) сайте без необходимости, так как это может замедлить работу и раскрыть служебную информацию.