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