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

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

Как работает табло в 1С: назначение, вывод данных и практическое применение

Что такое табло в 1С, как оно выводит данные через Показать() и ОповеститьПользователя, чем отличается от окна сообщений и как использовать его в работе.

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

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

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

Что такое табло и чем оно отличается от окна сообщений

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

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

Как открыть табло в конфигураторе при отладке

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

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

Порядок действий при отладке через табло
  1. 1
    Запустите конфигурацию в режиме отладки (F5 или «Начать отладку»)
  2. 2
    Установите точку останова в проверяемом месте кода
  3. 3
    Дождитесь остановки выполнения и откройте табло (Shift+F9)
  4. 4
    Введите выражение в колонку «Выражение» и посмотрите вычисленное значение
  5. 5
    Для объектов раскройте значение кнопкой просмотра, чтобы увидеть структуру и реквизиты

Вывод данных в табло из встроенного языка

Из кода значение в табло выводится оператором Показать(). Он приостанавливает выполнение и открывает табло с переданным значением — это удобно как грубая, но быстрая точка контроля при поиске ошибки. Например: Показать(РезультатЗапроса.Количество()); — и выполнение остановится с отображением числа строк.

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

bsl
// Быстрый контроль значения при отладке (не оставлять в рабочем коде)
Показать(ТаблицаТоваров.Количество());

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

// Для серверного и фонового выполнения
ЗаписьЖурналаРегистрации("Проверка", УровеньЖурналаРегистрации.Информация, , , "Строк: " + ТаблицаТоваров.Количество());

Вычисление выражений и просмотр сложных объектов

Табло умеет не только показывать примитивные значения. Если выражение возвращает объект — структуру, таблицу значений, ссылку на документ, результат запроса — значение отображается как представление объекта, а рядом появляется возможность открыть детальный просмотр. Для таблицы значений и результата запроса платформа покажет содержимое в виде таблицы, для структуры и объекта — дерево свойств.

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

Практические сценарии использования табло

Первый сценарий — поиск причины неверного расчёта. Остановитесь перед проблемной строкой, выведите в табло все входные значения формулы и сравните с ожидаемыми. Часто оказывается, что одна из переменных не заполнена или имеет неожиданный тип (например, строка вместо числа), и дальнейшая отладка сужается до места её присвоения.

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

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

Чем выводить диагностическую информацию

Табло (Shift+F9, Показать)

Подходит для интерактивной отладки и разового контроля значений. Ограничение: требует остановки выполнения и не работает в фоновых и серверных сценариях

Сообщить() / окно сообщений

Подходит для текстовых уведомлений в клиентском коде. Ограничение: сообщения легко потерять среди прочих, нет структурированного просмотра объектов

Журнал регистрации

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

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

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

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

Типичные ошибки
01
Оставлять Показать() в рабочем коде — выполнение останавливается у пользователей или игнорируется на сервере
02
Вычислять в табло выражения с записью данных — реальные изменения в базе во время отладки
03
Искать переменную не в том контексте — ошибка «переменная не определена» при корректном коде
04
Ожидать журналирования — табло не сохраняет историю, после закрытия значения теряются
05
Вычислять тяжёлые запросы без ограничений — зависание сеанса отладки

Как проверить, что диагностика сработала

После вычисления выражения убедитесь, что значение соответствует ожидаемому типу и диапазону. Число, показанное как строка, ссылка вместо ожидаемого значения перечисления, пустая таблица там, где должны быть строки, — всё это признаки, что данные формируются не так, как задумано, и искать нужно выше по алгоритму.

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

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

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

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

Отображается ожидаемый тип и значение

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

Ошибка вычисления, пустое значение или неожиданный тип

Состав коллекции
Норма

Строки и ключи соответствуют логике алгоритма

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

Лишние или отсутствующие элементы, незаполненные поля

Условие ветвления
Норма

Выражение возвращает ожидаемое Истина/Ложь

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

Результат противоречит ожиданию — ищите подусловие, дающее другой ответ

Рабочий код после отладки
Норма

Все вызовы Показать() удалены или заменены на Сообщить()/журнал регистрации

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

В коде остались отладочные вызовы, останавливающие выполнение

Итог

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

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

Частые вопросы о табло в 1С

Чем табло отличается от окна «Вычислить выражение»?

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

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

Выражение вычисляется в текущем контексте выполнения. Если вы остановились в другой процедуре или модуле, локальная переменная недоступна. Проверьте стек вызовов и перейдите в нужный кадр, либо остановитесь непосредственно в процедуре, где объявлена переменная.

Можно ли вывести в табло таблицу значений целиком?

Да. Введите имя переменной с таблицей значений — платформа покажет её как объект, а кнопка просмотра откроет содержимое в табличном виде. Аналогично просматриваются результаты запросов, массивы, структуры и соответствия.

Работает ли Показать() на сервере или в фоновом задании?

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

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

Выражение выполняется по-настоящему. Чтение данных безопасно, но вызов функций, которые записывают объекты или меняют состояние, приведёт к реальным изменениям в базе. Вводите только выражения чтения и избегайте тяжёлых запросов без ограничения результата.

Как смотреть значения без остановки программы?

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