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