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

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

Как открыть локальные переменные в 1С при отладке

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

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

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

Ниже разобраны все рабочие способы: классическое табло, окно «Вычислить выражение», всплывающие подсказки, стек вызовов и особенности отладки серверного кода в клиент-серверном варианте. Отдельно описаны типичные проблемы — когда переменные «не видны» или отладка не останавливается.

Что такое локальные переменные и где они «живут»

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

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

Область видимости важна при отладке: табло показывает переменные только той процедуры, в которой выполнение остановлено сейчас. Если нужно посмотреть переменные вызывающей процедуры, придется переключиться по стеку вызовов — об этом ниже.

Подготовка: как включить и запустить отладку

Откройте конфигуратор и проверьте, что отладка разрешена: меню «Сервис → Параметры», вкладка «Запуск 1С:Предприятия», раздел «Отладка» — должен быть выбран протокол отладки (обычно TCP/IP или HTTP, в современных версиях чаще HTTP). Также убедитесь, что в меню «Отладка» включен пункт «Отладка» (галочка «Разрешить отладку»).

Для файловой базы достаточно нажать F5 или выбрать «Отладка → Начать отладку» — конфигуратор сам запустит сеанс предприятия под отладкой. Если сеанс уже запущен, подключите его через «Отладка → Подключение», выбрав нужный сеанс из списка.

В клиент-серверном варианте отладку должен разрешить администратор: в свойствах сервера 1С или в консоли кластера должна быть включена отладка (для HTTP-протокола — соответствующая настройка srv1cv8 или параметр запуска агента). Без этого серверные процедуры останавливаться не будут.

Основной способ: табло локальных переменных

Поставьте точку останова: откройте нужный модуль, найдите строку внутри процедуры и нажмите F9 или кликните по левому полю редактора — появится красный маркер. Запустите отладку (F5) и выполните в предприятии действие, которое вызывает этот код, — например, проведите документ.

Когда выполнение остановится на точке, откройте меню «Отладка → Локальные переменные». Появится табло: слева имена переменных, справа значения и типы. Коллекции (массивы, структуры, таблицы значений) раскрываются крестиком — можно «провалиться» внутрь и посмотреть каждый элемент.

Табло обновляется автоматически при пошаговом выполнении: F11 (шаг с заходом в процедуры), F10 (шаг без захода), Shift+F11 (выход из текущей процедуры). Так можно наблюдать, как переменная меняется на каждой итерации цикла.

Порядок действий
  1. 1
    Откройте модуль в конфигураторе и поставьте точку останова (F9) внутри процедуры
  2. 2
    Запустите отладку клавишей F5 и выполните в предприятии действие, вызывающее код
  3. 3
    При остановке откройте «Отладка → Локальные переменные» — появится табло
  4. 4
    Раскройте коллекции крестиком, чтобы увидеть элементы массивов и структур
  5. 5
    Шагайте по коду (F10/F11) и наблюдайте изменение значений
  6. 6
    Снимите точки останова и завершите отладку (Shift+F5)

Альтернативные способы посмотреть значения

Окно «Вычислить выражение»

Сочетание Shift+F9 или «Отладка → Вычислить выражение» открывает окно, где можно ввести любое выражение: имя переменной, обращение к свойству, вызов функции, арифметику. Это удобно, когда нужно не просто значение переменной, а производное от него — например, «ТаблицаТоваров.Количество()» или «СтруктураПараметров.Свойство("Склад")».

Всплывающая подсказка

Во время остановки наведите курсор мыши на переменную прямо в тексте модуля — появится всплывающее значение. Это самый быстрый способ для разовой проверки, но подсказка не раскрывает глубоко вложенные коллекции и исчезает при уходе курсора.

Окно «Наблюдать» (Watches)

Через «Отладка → Наблюдать» можно составить постоянный список выражений, которые будут пересчитываться на каждом шаге. Полезно, когда отслеживаете 3–5 ключевых переменных в длинном цикле и не хотите каждый раз искать их в общем табло.

В табло можно изменить значение переменной прямо во время остановки: встаньте на строку, нажмите F2 или введите новое значение. Это позволяет проверить гипотезу «а что, если бы здесь было другое значение» без правки кода и перезапуска. Изменение действует только в текущем выполнении.
ПЗ
Практическое замечание

Переменные вызывающих процедур: стек вызовов

Табло показывает только текущую процедуру. Если нужно увидеть локальные переменные той процедуры, которая вызвала текущую, откройте «Отладка → Стек вызовов». В списке отобразится цепочка вызовов от внешнего события до текущей строки.

Двойной клик по строке стека переключает контекст отладчика: табло и «Вычислить выражение» начнут работать с переменными выбранной процедуры, а редактор покажет строку, откуда был сделан вызов. Это незаменимо при расследовании, откуда в функцию пришло «неправильное» значение параметра.

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

Особенности клиент-серверного режима и внешних соединений

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

Фоновые задания, веб-сервисы и HTTP-сервисы отлаживаются через подключение: «Отладка → Подключение» → выбор нужного сеанса. Предметы отладки настраиваются в том же диалоге через «Предметы отладки». Для фонового задания часто применяют прием: в коде временно добавляют ожидание или используют автоматическое подключение отладчика к новым сеансам.

Маршрут решения

Как выбрать действие

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

Типичные ошибки и ограничения

Частая ошибка — попытка посмотреть локальную переменную после выхода из процедуры. Как только выполнение вышло из функции, её переменные уничтожены, и табло покажет уже контекст вызывающего кода. Если значение нужно «вынести наружу», используйте возвращаемое значение, параметр по ссылке (Знач) или временно добавьте вывод через Сообщить().

Вторая ошибка — отладка оптимизированного кода клиентского приложения не является проблемой в 1С (в отличие от компилируемых языков), но переменные могут быть «не видны», если остановка произошла на строке объявления до присваивания: переменная еще не инициализирована и покажет «Неопределено».

Ограничение табло — объемные объекты. Таблица значений на тысячи строк раскрывается медленно, а содержимое COM-объектов и некоторых системных типов может быть недоступно. В таких случаях используйте «Вычислить выражение» с обращением к конкретным строкам и колонкам.

Типичные ошибки
01
Ставить точку останова на строку заголовка «Процедура ...» — выполнение не остановится, переменные еще не созданы; ставьте точку на первую исполняемую строку
02
Искать локальную переменную после выхода из процедуры — она уже уничтожена, используйте стек вызовов или возвращаемое значение
03
Забыть включить серверный предмет отладки в клиент-серверной базе — точки в серверных модулях не сработают
04
Оставлять точки останова в рабочей базе — случайная остановка у пользователя вызовет зависание сеанса
Контрольные точки

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

Табло открыто при остановке
Норма

Видны имена, типы и значения всех локальных переменных процедуры

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

Окно пустое или показывает переменные другой процедуры — проверьте контекст в стеке вызовов

Пошаговое выполнение
Норма

Значения в табло меняются после каждого шага F10/F11

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

Значения не меняются — возможно, смотрите не ту переменную или шагаете по другой ветке кода

Коллекции
Норма

Массивы и структуры раскрываются крестиком, видны элементы

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

Вместо значения — описание типа; раскройте узел или используйте «Вычислить выражение»

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

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

Нет, штатного способа нет: локальные переменные доступны только отладчику конфигуратора в момент остановки выполнения. В режиме предприятия остаются косвенные приемы — временный вывод значений через Сообщить(), запись в журнал регистрации или в текстовый файл, но это требует изменения кода.

Почему в табло переменная показывает «Неопределено»?

Либо она объявлена, но ей еще не присвоено значение (остановка произошла раньше строки присваивания), либо присваивание в этой ветке кода не выполнялось. Сделайте несколько шагов F10 и проверьте логику условий выше по коду.

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

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

Можно ли сохранить значения переменных для анализа после завершения отладки?

Штатного экспорта табло нет. Практичные варианты: скопировать значение через буфер обмена из табло или окна выражений, либо временно добавить в код выгрузку коллекции (например, таблицы значений) в файл через встроенные средства сериализации.

Точка останова есть, но отладчик не останавливается. Что проверить в первую очередь?

Убедитесь, что код вообще выполняется (добавьте временное Сообщить()), что отлаживаемый сеанс подключен к конфигуратору, что в клиент-серверной базе включен нужный предмет отладки и что конфигурация базы данных обновлена — иначе вы можете смотреть не ту версию модуля.

Безопасно ли менять значения переменных в табло в рабочей базе?

Рискованно: измененное значение пойдет дальше по алгоритму и может попасть в данные — например, в проводки документа. Для экспериментов используйте копию базы, а в рабочей ограничивайтесь просмотром.

Итог

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

Локальные переменные в 1С смотрят только через отладчик: точка останова (F9), запуск (F5), окно «Локальные переменные» из меню «Отладка». Для произвольных выражений — Shift+F9, для переменных вызывающих процедур — стек вызовов. В клиент-серверной базе не забудьте включить серверный предмет отладки, а эксперименты с изменением значений проводите на копии базы.