Разработка и Конфигурация · 11 мин
Как посмотреть значение переменной в 1С
Как посмотреть значение переменной в 1С: точки останова, табло, окно выражений, Сообщить. Пошаговые инструкции, типичные ошибки и ответы на вопросы.
Просмотр значений переменных — базовая операция при отладке и доработке конфигураций 1С. Чаще всего для этого используют встроенный отладчик конфигуратора: он позволяет остановить выполнение кода в нужной строке и увидеть содержимое любой переменной, включая сложные объекты — таблицы значений, структуры, ссылки на документы.
Помимо отладчика существуют альтернативные способы: вывод через Сообщить(), запись в журнал регистрации, временные проверки условий. Каждый подход имеет свои ограничения — например, отладка на сервере требует специального режима запуска, а Сообщить() в серверном коде виден не всегда очевидно.
Ниже разобраны рабочие способы посмотреть значение переменной в 1С, условия их применения, типичные ошибки и способы проверить, что вы видите именно актуальное значение, а не устаревший кэш или другой экземпляр объекта.
Как включить и запустить отладку в 1С
Отладка запускается из конфигуратора. Откройте конфигуратор нужной базы, убедитесь, что конфигурация не находится на поддержке с запретом изменений (для отладки это не обязательно, но точки останова ставятся в любом случае), и нажмите клавишу F5 или выберите меню «Отладка → Начать отладку». Конфигуратор запустит клиентское приложение в режиме отладки.
Если код выполняется на сервере (а в управляемых формах большая часть логики — серверная), потребуется дополнительная настройка. Для файловой базы серверный код отлаживается автоматически при запуске отладки из конфигуратора. Для клиент-серверного варианта сервер 1С должен быть запущен в отладочном режиме — с ключом -debug в параметрах запуска службы агента сервера.
Проверить, что отладка сервера доступна, можно через меню «Отладка → Подключение». В списке предметов отладки должны отображаться доступные сеансы, включая серверные. Если серверных предметов нет, а код точно выполняется на сервере, — отладчик не остановится на ваших точках останова.
Точки останова: как остановить код в нужном месте
Точка останова ставится клавишей F9 или кликом по левому полю редактора модуля напротив нужной строки. Появляется красный маркер. Когда выполнение дойдёт до этой строки, программа остановится, и вы сможете изучить состояние всех переменных в этой точке.
Ставьте точку останова на строку, которая гарантированно выполнится. Частая ошибка — установка точки внутри условия, которое не срабатывает, или в процедуре, которая вообще не вызывается в текущем сценарии. Если отладчик не останавливается, проверьте, действительно ли выполняется эта ветка кода.
Полезный вариант — условная точка останова. Кликните правой кнопкой по маркеру и задайте условие, например Строка.Номенклатура = ИскомаяНоменклатура. Отладчик остановится только когда условие истинно, что удобно в циклах по большим таблицам.
- 1Откройте нужный модуль в конфигураторе и найдите строку, где переменная уже заполнена
- 2Нажмите F9 на этой строке — появится красная точка останова
- 3Запустите отладку клавишей F5 и выполните в клиентском приложении действие, которое вызывает этот код
- 4Когда выполнение остановится, наведите курсор на переменную или добавьте её в табло через Shift+F9
- 5Продолжите выполнение клавишей F5 или пошагово — F11 (с заходом) / F10 (без захода)
Табло, окно выражений и всплывающие подсказки
После остановки есть три основных способа увидеть значение переменной. Самый быстрый — навести курсор мыши на имя переменной в коде: появится всплывающая подсказка со значением. Для объектов и структур подсказка показывает тип, а раскрыть состав можно через табло.
Табло (Shift+F9 или меню «Отладка → Табло») — окно, куда вы добавляете переменные и произвольные выражения для постоянного наблюдения. Значения в табло обновляются при каждом шаге отладки. Здесь можно раскрыть структуру, посмотреть строки таблицы значений, свойства объекта документа.
Окно «Вычислить выражение» (Ctrl+Alt+W или «Отладка → Вычислить выражение») позволяет выполнить произвольное выражение в текущем контексте — например, ТаблицаТоваров.Количество() или Объект.Проведен. Это удобно, когда нужно не просто посмотреть переменную, а проверить результат метода.
| Способ | Когда использовать | Ограничение |
|---|---|---|
| Всплывающая подсказка | Быстрый взгляд на простое значение | Неудобна для больших структур |
| Табло | Постоянное наблюдение за несколькими переменными | Нужно вручную добавлять выражения |
| Вычислить выражение | Вызов методов, проверка условий | Выражение может изменить состояние, если метод имеет побочные эффекты |
Просмотр сложных типов: таблицы, структуры, объекты
Примитивные значения (числа, строки, даты) видны сразу. Сложнее обстоит дело с составными типами. Таблица значений в табло раскрывается как коллекция строк; чтобы увидеть всю таблицу целиком, выделите переменную в табло и нажмите F2 — откроется отдельное окно просмотра в виде таблицы.
Структуры и соответствия раскрываются по стрелке рядом с именем переменной — видны все ключи и значения. Ссылки на объекты базы (документы, справочники) показывают представление; чтобы увидеть реквизиты объекта, добавьте в табло выражение вида ДокументСсылка.Номер или получите объект через ДокументСсылка.ПолучитьОбъект() — но помните, что вызов в окне выражений выполняется реально.
Для запросов полезно проверять результат до обхода: добавьте в табло выражение РезультатЗапроса.Пустой(), а чтобы увидеть данные, временно преобразуйте выборку в таблицу значений через РезультатЗапроса.Выгрузить() и откройте её клавишей F2.
Если переменная в табло показывает «Не вычислено» или пустое значение, хотя по логике она должна быть заполнена, — проверьте, на каком шаге вы стоите. Значение появится только после выполнения строки присваивания: сделайте шаг F10 и посмотрите снова.
Альтернативы отладчику: Сообщить и журнал регистрации
Когда отладчик недоступен — например, код выполняется в фоновом задании, на рабочем сервере или в регламентной операции — используют вывод значений в лог. Самый простой вариант:
Сообщить("Количество строк: " + ТаблицаТоваров.Количество());
Метод Сообщить() выводит текст в окно сообщений клиента. Но в фоновых заданиях и на сервере без привязки к сеансу сообщения теряются. Надёжнее писать в журнал регистрации:
ЗаписьЖурналаРегистрации("Отладка.МойМодуль",
УровеньЖурналаРегистрации.Информация, , ,
"Значение переменной: " + Строка(ЗначениеПеременной));
После выполнения откройте журнал регистрации («Администрирование → Обслуживание → Журнал регистрации» в типовых конфигурациях) и отфильтруйте по событию. Этот способ работает в любых условиях, включая фоновые задания и веб-сервисы, но требует добавления и последующего удаления кода — не оставляйте отладочные записи в рабочей конфигурации.
Сравнение вариантов
Подходит для локальной разработки и тестовой базы. Не требует изменения кода. Ограничение: нужен отладочный режим сервера для серверного кода.
Быстрая проверка в клиентском коде и при отладке файловой базы. Ограничение: сообщения теряются в фоновых заданиях и на сервере без сеанса.
Единственный надёжный способ для фоновых заданий, регламентных операций и рабочего сервера. Ограничение: нужно добавлять и чистить код, значения видны с задержкой.
Типичные ошибки при просмотре переменных
Отдельная группа ошибок связана с контекстом выполнения. В управляемых формах одна и та же переменная может существовать на клиенте и на сервере с разными значениями. Если вы отлаживаете клиентскую процедуру, а данные заполняются на сервере, вы увидите устаревшее или пустое значение. Проверяйте директивы компиляции (&НаСервере, &НаКлиенте) и ставьте точки останова в нужном контексте.
Ещё одна ловушка — кэширование модулей. Если вы изменили код, а отладчик ведёт себя так, будто выполняется старая версия, перезапустите сеанс отладки: клиентское приложение могло закэшировать модули.
Как проверить результат
Выполнение остановилось на вашей точке, строка подсвечена жёлтым
Точка останова стала пустым кружком — строка недостижима или модуль не загружен
Показан ожидаемый тип и актуальное значение после строки присваивания
«Не вычислено», пусто или старое значение — вы до строки присваивания или в другом контексте
Событие с вашим комментарием появилось после выполнения операции
Записи нет — код не выполнился или событие отфильтровано настройками журнала
FAQ: частые вопросы
Как посмотреть значение переменной без конфигуратора?
Без конфигуратора доступны только методы, встроенные в код: Сообщить() для клиентского контекста и ЗаписьЖурналаРегистрации() для любого. Также можно временно вывести значение в элемент формы (например, в надпись) или в отчёт СКД. Полноценная отладка без конфигуратора невозможна.
Почему отладчик не останавливается на точке останова?
Основные причины: код выполняется на сервере, а сервер запущен без ключа -debug; эта ветка кода реально не выполняется (условие не срабатывает); сеанс отладки подключён к другому предмету отладки; модуль закэширован и выполняется старая версия. Проверьте «Отладка → Подключение» и перезапустите сеанс.
Как посмотреть содержимое таблицы значений целиком?
Добавьте переменную таблицы в табло (Shift+F9), выделите её и нажмите F2 — откроется отдельное окно со всеми строками и колонками в табличном виде. Альтернатива — временно вывести таблицу в табличный документ через ПостроительОтчета или выгрузить в файл.
Можно ли посмотреть переменные в фоновом задании?
Подключиться отладчиком к фоновому заданию можно через «Отладка → Подключение», если сервер в отладочном режиме и включена настройка автоматического подключения фоновых заданий. Если это невозможно — используйте ЗаписьЖурналаРегистрации() с уникальным именем события для фильтрации.
Опасно ли вычислять выражения в окне отладки?
Да, если выражение имеет побочные эффекты. Вызов Записать(), Провести(), ПолучитьОбъект() с последующим изменением выполняется реально и меняет данные в базе. Вычисляйте только читающие выражения (свойства, запросы без записи), а эксперименты проводите на копии базы.
Как посмотреть значение параметра запроса?
Поставьте точку останова после установки параметра и добавьте в табло выражение вида Запрос.Параметры.ИмяПараметра. Также проверьте результат: выражение РезультатЗапроса.Пустой() покажет, вернул ли запрос данные с этими параметрами.
Что важно запомнить
Основной инструмент — отладчик: точка останова (F9), табло (Shift+F9), просмотр таблиц через F2. Для серверного кода нужен отладочный режим сервера. В фоновых заданиях и на рабочем контуре используйте ЗаписьЖурналаРегистрации(). Не вычисляйте в отладчике выражения, изменяющие данные, и чистите отладочный код после проверки.