Разработка и Конфигурация · 12 мин
Как вывести текст в 1С: все рабочие способы с примерами
Все способы вывести текст в 1С: Сообщить, ПоказатьПредупреждение, элементы формы, макеты и печать. Примеры кода, различия тонкого и толстого клиента, типичные ошибки.
Вывод текста — одна из первых задач, с которой сталкивается разработчик в 1С: показать сообщение пользователю, вывести результат обработки, отобразить надпись на форме или сформировать печатный документ. Платформа предлагает несколько принципиально разных механизмов, и выбор зависит от того, где выполняется код — на клиенте или на сервере — и куда именно нужно вывести текст.
Главная ошибка новичков — использовать один и тот же метод везде. Например, Сообщить() на сервере работает иначе, чем на клиенте, а модальные окна в тонком клиенте и веб-клиенте вообще запрещены. Ниже разобраны все основные способы с рабочими примерами кода, ограничениями и критериями выбора.
Вывод сообщения пользователю через Сообщить()
Самый простой способ вывести текст — процедура Сообщить(). Она выводит строку в панель сообщений внизу окна программы. Подходит для отладки, информирования о ходе длительной операции и вывода несущественных уведомлений, которые не требуют реакции пользователя.
Сообщить("Обработка завершена. Обработано документов: " + Количество);
// С указанием статуса сообщения
Сообщить("Внимание: документ не проведён", СтатусСообщения.Внимание);
Сообщить("Ошибка при записи", СтатусСообщения.ОченьВажное);
Второй параметр — СтатусСообщения — определяет оформление: обычное сообщение, информация, внимание, важное или очень важное. Визуально статус меняет иконку рядом с текстом, что помогает пользователю отличить ошибку от обычного уведомления.
Важно понимать: Сообщить() на сервере накапливает сообщения и показывает их пользователю только после завершения серверного вызова. Если внутри длительной серверной процедуры нужно показывать прогресс в реальном времени, этот способ не подойдёт — потребуется механизм длительных операций.
Объект СообщениеПользователю — правильный способ на сервере
В управляемых формах при серверной обработке данных рекомендуется использовать объект СообщениеПользователю вместо Сообщить(). Его ключевое преимущество — привязка сообщения к конкретному полю формы: платформа сама подсветит поле с ошибкой и позиционирует на нём курсор при клике по сообщению.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнено поле ""Контрагент""";
Сообщение.Поле = "Контрагент";
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();
Свойство Поле принимает имя реквизита, а УстановитьДанные() связывает сообщение с объектом данных формы. Для табличных частей можно указать путь к данным с номером строки, например "Товары[2].Цена" — тогда сообщение привяжется к конкретной строке таблицы.
Такой подход — стандарт для проверки заполнения в типовых конфигурациях. Если пишете собственную проверку в процедуре ОбработкаПроверкиЗаполнения, используйте именно СообщениеПользователю, а не Сообщить(): пользователь получит понятную навигацию по ошибкам.
Диалоговые окна: предупреждение и вопрос
Когда текст нужно показать заметно и дождаться реакции пользователя, применяются методы глобального контекста ПоказатьПредупреждение() и ПоказатьВопрос(). Они работают только на клиенте — вызов на сервере приведёт к ошибке.
&НаКлиенте
Процедура КомандаУдалить(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОбУдалении", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения,
"Удалить выбранный документ?",
РежимДиалогаВопрос.ДаНет,
20, // таймаут в секундах
КодВозвратаДиалога.Нет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОбУдалении(Результат, ДопПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
УдалитьНаСервере();
КонецЕсли;
КонецПроцедуры
Обратите внимание на асинхронную модель: результат диалога возвращается через ОписаниеОповещения, а не как возвращаемое значение функции. Старые синхронные методы Предупреждение() и Вопрос() без оповещения в тонком и веб-клиенте работают только в режиме модальности, который в современных конфигурациях обычно запрещён свойством РежимИспользованияМодальности.
Вывод текста на форму: декорации и поля надписи
Если текст должен постоянно отображаться на форме — подсказка, статус, итоговая сумма прописью — используются элементы формы. Статический текст выводится через элемент Декорация с видом «Надпись»: добавьте её в редакторе формы и задайте заголовок в свойствах или программно.
&НаКлиенте
Процедура ОбновитьСтатус()
Элементы.ДекорацияСтатус.Заголовок = "Документ проверен, ошибок не найдено";
КонецПроцедуры
Для текста, привязанного к данным, удобнее поле надписи: создайте реквизит формы строкового типа, перетащите его на форму и установите вид «Поле надписи». Тогда обновление текста сводится к присваиванию значения реквизиту — платформа сама обновит отображение.
Для форматированного текста со ссылками, выделением цветом и картинками используйте тип ФорматированнаяСтрока или поле форматированного документа. Это позволяет, например, вывести часть текста красным цветом без добавления отдельных элементов.
Сравнение вариантов вывода на форму
Подходит для статических подписей и редко меняющихся статусов; обновляется через свойство Заголовок элемента.
Лучший выбор для текста из данных: привязан к реквизиту формы, обновляется автоматически при изменении значения.
Нужен для многострочного форматированного текста со ссылками и оформлением; тяжелее в настройке.
Вывод текста в табличный документ и на печать
Печатные формы и отчёты в 1С строятся на объекте ТабличныйДокумент. Текст выводится либо напрямую в ячейки, либо — что правильнее — через макет с областями и параметрами. Прямой вывод подходит для простых случаев:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Отчёт сформирован";
ТабДок.Область("R2C1").Текст = "Период: " + ПредставлениеПериода(НачалоПериода, КонецПериода);
ТабДок.Показать("Результат");
Для печатных форм документов стандартный подход — макет типа «Табличный документ» с именованными областями. В ячейках макета указываются параметры в квадратных скобках, которые заполняются при выводе:
Макет = ПолучитьМакет("МакетПечати");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Номер;
ОбластьШапка.Параметры.Контрагент = Контрагент;
ТабДок.Вывести(ОбластьШапка);
Параметры макета могут работать и как шаблон: если в свойстве ячейки «Заполнение» выбрано «Шаблон», в тексте можно комбинировать фиксированные фрагменты и параметры, например "Договор № [Номер] от [Дата]". Это удобно для сложных текстовых блоков.
Как выбрать способ вывода текста
Выбор механизма определяется тремя вопросами: где выполняется код, требуется ли реакция пользователя и где текст должен остаться видимым. Краткий ориентир: уведомление без реакции — Сообщить() или СообщениеПользователю; нужна реакция — ПоказатьВопрос(); постоянный текст на форме — реквизит с полем надписи; печать — табличный документ с макетом; служебная информация — журнал регистрации.
Как выбрать действие
Как проверить результат
Текст появился в панели сообщений, клик по нему активирует нужное поле формы
Сообщение не появляется — вероятно, код не выполнился или вызван в недоступном контексте
Окно появилось, после ответа сработала процедура оповещения
Ошибка о модальности — замените синхронный вызов на асинхронный с оповещением
Все параметры подставлены, вместо пустых мест нет текста в квадратных скобках
В документе видны [ИмяПараметра] — параметр не заполнен или имя не совпадает с макетом
Частые вопросы
Как вывести многострочный текст в сообщении?
Используйте символ переноса строки: Сообщить("Строка 1" + Символы.ПС + "Строка 2"). Для сборки длинных текстов удобнее функция СтрШаблон("Обработано %1 из %2", Число1, Число2) — она читается лучше, чем цепочка конкатенаций.
Почему Сообщить() на сервере не показывает текст сразу?
Серверные сообщения буферизуются и передаются на клиент только после завершения серверного вызова. Это нормальное поведение платформы. Для реального отображения прогресса длительной операции используйте механизм длительных операций фоновых заданий.
Как вывести текст красным цветом на форме?
Через условное оформление формы: добавьте элемент условного оформления, задайте условие и установите оформление «Цвет текста». Альтернатива — форматированная строка, где отдельным фрагментам задаётся цвет программно.
Чем ПоказатьОповещениеПользователя отличается от Сообщить?
Оповещение появляется всплывающим окном в углу экрана и исчезает само, может содержать пояснение и навигационную ссылку на объект. Сообщить() пишет в панель сообщений и остаётся там до закрытия. Оповещение лучше для информации «для сведения», сообщение — для того, что пользователь должен увидеть и прочитать.
Как вывести текст в консоль при отладке?
В 1С нет консоли в привычном смысле. Для отладки используйте Сообщить(), точки останова с просмотром значений в конфигураторе (Табло) или запись в журнал регистрации. В мобильной платформе доступен вывод в журнал отладки.
Можно ли вывести текст в файл?
Да, через объекты ЗаписьТекста и ЧтениеТекста: создайте объект, укажите путь к файлу и кодировку, вызовите ЗаписатьСтроку() и Закрыть(). На сервере файл создаётся в файловой системе сервера, поэтому для передачи пользователю используйте временное хранилище.
Что важно запомнить
Выбор способа вывода текста в 1С зависит от контекста: Сообщить и СообщениеПользователю — для уведомлений, ПоказатьВопрос и ПоказатьПредупреждение — для диалогов на клиенте, реквизиты формы — для постоянного текста, табличный документ с макетом — для печати, журнал регистрации — для служебных событий. На сервере диалоги недоступны, а модальные вызовы в современных конфигурациях запрещены.