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