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

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

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

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

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

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

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

Как включить и запустить отладку в 1С

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

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

Проверить, что отладка сервера доступна, можно через меню «Отладка → Подключение». В списке предметов отладки должны отображаться доступные сеансы, включая серверные. Если серверных предметов нет, а код точно выполняется на сервере, — отладчик не остановится на ваших точках останова.

Точки останова: как остановить код в нужном месте

Точка останова ставится клавишей F9 или кликом по левому полю редактора модуля напротив нужной строки. Появляется красный маркер. Когда выполнение дойдёт до этой строки, программа остановится, и вы сможете изучить состояние всех переменных в этой точке.

Ставьте точку останова на строку, которая гарантированно выполнится. Частая ошибка — установка точки внутри условия, которое не срабатывает, или в процедуре, которая вообще не вызывается в текущем сценарии. Если отладчик не останавливается, проверьте, действительно ли выполняется эта ветка кода.

Полезный вариант — условная точка останова. Кликните правой кнопкой по маркеру и задайте условие, например Строка.Номенклатура = ИскомаяНоменклатура. Отладчик остановится только когда условие истинно, что удобно в циклах по большим таблицам.

Порядок действий
  1. 1
    Откройте нужный модуль в конфигураторе и найдите строку, где переменная уже заполнена
  2. 2
    Нажмите F9 на этой строке — появится красная точка останова
  3. 3
    Запустите отладку клавишей F5 и выполните в клиентском приложении действие, которое вызывает этот код
  4. 4
    Когда выполнение остановится, наведите курсор на переменную или добавьте её в табло через Shift+F9
  5. 5
    Продолжите выполнение клавишей F5 или пошагово — F11 (с заходом) / F10 (без захода)

Табло, окно выражений и всплывающие подсказки

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

Табло (Shift+F9 или меню «Отладка → Табло») — окно, куда вы добавляете переменные и произвольные выражения для постоянного наблюдения. Значения в табло обновляются при каждом шаге отладки. Здесь можно раскрыть структуру, посмотреть строки таблицы значений, свойства объекта документа.

Окно «Вычислить выражение» (Ctrl+Alt+W или «Отладка → Вычислить выражение») позволяет выполнить произвольное выражение в текущем контексте — например, ТаблицаТоваров.Количество() или Объект.Проведен. Это удобно, когда нужно не просто посмотреть переменную, а проверить результат метода.

СпособКогда использоватьОграничение
Всплывающая подсказкаБыстрый взгляд на простое значениеНеудобна для больших структур
ТаблоПостоянное наблюдение за несколькими переменнымиНужно вручную добавлять выражения
Вычислить выражениеВызов методов, проверка условийВыражение может изменить состояние, если метод имеет побочные эффекты

Просмотр сложных типов: таблицы, структуры, объекты

Примитивные значения (числа, строки, даты) видны сразу. Сложнее обстоит дело с составными типами. Таблица значений в табло раскрывается как коллекция строк; чтобы увидеть всю таблицу целиком, выделите переменную в табло и нажмите F2 — откроется отдельное окно просмотра в виде таблицы.

Структуры и соответствия раскрываются по стрелке рядом с именем переменной — видны все ключи и значения. Ссылки на объекты базы (документы, справочники) показывают представление; чтобы увидеть реквизиты объекта, добавьте в табло выражение вида ДокументСсылка.Номер или получите объект через ДокументСсылка.ПолучитьОбъект() — но помните, что вызов в окне выражений выполняется реально.

Для запросов полезно проверять результат до обхода: добавьте в табло выражение РезультатЗапроса.Пустой(), а чтобы увидеть данные, временно преобразуйте выборку в таблицу значений через РезультатЗапроса.Выгрузить() и откройте её клавишей F2.

Если переменная в табло показывает «Не вычислено» или пустое значение, хотя по логике она должна быть заполнена, — проверьте, на каком шаге вы стоите. Значение появится только после выполнения строки присваивания: сделайте шаг F10 и посмотрите снова.
ПЗ
Практическое замечание

Альтернативы отладчику: Сообщить и журнал регистрации

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

Сообщить("Количество строк: " + ТаблицаТоваров.Количество());

Метод Сообщить() выводит текст в окно сообщений клиента. Но в фоновых заданиях и на сервере без привязки к сеансу сообщения теряются. Надёжнее писать в журнал регистрации:

ЗаписьЖурналаРегистрации("Отладка.МойМодуль",

УровеньЖурналаРегистрации.Информация, , ,

"Значение переменной: " + Строка(ЗначениеПеременной));

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

Сравнение вариантов

Отладчик (табло, точки останова)

Подходит для локальной разработки и тестовой базы. Не требует изменения кода. Ограничение: нужен отладочный режим сервера для серверного кода.

Сообщить()

Быстрая проверка в клиентском коде и при отладке файловой базы. Ограничение: сообщения теряются в фоновых заданиях и на сервере без сеанса.

ЗаписьЖурналаРегистрации()

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

Типичные ошибки при просмотре переменных

Типичные ошибки
01
Точка останова стоит в серверном коде, а сервер не запущен в режиме отладки — отладчик не останавливается, и кажется, что код не выполняется
02
Просмотр переменной до строки присваивания — значение ещё не заполнено, делается неверный вывод о причине ошибки
03
Использование Сообщить() в фоновом задании — сообщения нигде не отображаются, создаётся ложное впечатление, что код не работает
04
Вычисление выражений с побочными эффектами в окне отладки (например, Записать()) — данные в базе изменяются прямо во время просмотра
05
Путаница между ссылкой и объектом: у ссылки видны не все данные, и разработчик ищет реквизит, которого 'нет', хотя он есть у объекта

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

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

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

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

Остановка отладчика
Норма

Выполнение остановилось на вашей точке, строка подсвечена жёлтым

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

Точка останова стала пустым кружком — строка недостижима или модуль не загружен

Значение в табло
Норма

Показан ожидаемый тип и актуальное значение после строки присваивания

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

«Не вычислено», пусто или старое значение — вы до строки присваивания или в другом контексте

Запись в журнале регистрации
Норма

Событие с вашим комментарием появилось после выполнения операции

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

Записи нет — код не выполнился или событие отфильтровано настройками журнала

FAQ: частые вопросы

Как посмотреть значение переменной без конфигуратора?

Без конфигуратора доступны только методы, встроенные в код: Сообщить() для клиентского контекста и ЗаписьЖурналаРегистрации() для любого. Также можно временно вывести значение в элемент формы (например, в надпись) или в отчёт СКД. Полноценная отладка без конфигуратора невозможна.

Почему отладчик не останавливается на точке останова?

Основные причины: код выполняется на сервере, а сервер запущен без ключа -debug; эта ветка кода реально не выполняется (условие не срабатывает); сеанс отладки подключён к другому предмету отладки; модуль закэширован и выполняется старая версия. Проверьте «Отладка → Подключение» и перезапустите сеанс.

Как посмотреть содержимое таблицы значений целиком?

Добавьте переменную таблицы в табло (Shift+F9), выделите её и нажмите F2 — откроется отдельное окно со всеми строками и колонками в табличном виде. Альтернатива — временно вывести таблицу в табличный документ через ПостроительОтчета или выгрузить в файл.

Можно ли посмотреть переменные в фоновом задании?

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

Опасно ли вычислять выражения в окне отладки?

Да, если выражение имеет побочные эффекты. Вызов Записать(), Провести(), ПолучитьОбъект() с последующим изменением выполняется реально и меняет данные в базе. Вычисляйте только читающие выражения (свойства, запросы без записи), а эксперименты проводите на копии базы.

Как посмотреть значение параметра запроса?

Поставьте точку останова после установки параметра и добавьте в табло выражение вида Запрос.Параметры.ИмяПараметра. Также проверьте результат: выражение РезультатЗапроса.Пустой() покажет, вернул ли запрос данные с этими параметрами.

Итог

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

Основной инструмент — отладчик: точка останова (F9), табло (Shift+F9), просмотр таблиц через F2. Для серверного кода нужен отладочный режим сервера. В фоновых заданиях и на рабочем контуре используйте ЗаписьЖурналаРегистрации(). Не вычисляйте в отладчике выражения, изменяющие данные, и чистите отладочный код после проверки.