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

В этой статье мы разберём все актуальные способы вывода сообщений в 1С 8.3, включая нюансы работы в разных режимах (тонкий клиент, толстый клиент, веб-клиент), а также покажем, как оформить сообщение так, чтобы оно не потерялось среди других уведомлений. Особое внимание уделим практическим примерам кода и типичным ошибкам, которые допускают начинающие программисты.

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

📊 Для чего вам чаще всего нужно выводить сообщения в 1С?
Для отладки кода
Чтобы предупредить пользователя об ошибке
Для вывода результатов обработки
Для справочной информации
Другое

1. Базовый способ: функция Сообщить()

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

Основной синтаксис:

Сообщить(ТекстСообщения, Режим = РежимСообщенияПользователю.Важное, Длительность = 5);

Где:

  • 📝 ТекстСообщения — строка, которая будет отображена. Можно использовать многострочный текст с переносами (Символы.ПС).
  • 🔧 Режим (необязательно) — определяет внешний вид сообщения. Варианты:
    • РежимСообщенияПользователю.Обычное (по умолчанию)
    • РежимСообщенияПользователю.Важное (выделено жирным)
    • РежимСообщенияПользователю.ОченьВажное (красный крестик)
  • ⏱️ Длительность (необязательно) — время в секундах, сколько сообщение будет висеть на экране (только для тонкого и веб-клиента).

Примеры использования:

// Простое сообщение

Сообщить("Обработка завершена успешно!");

// Важное сообщение с таймаутом

Сообщить("Внимание! Обнаружены ошибки в данных!", РежимСообщенияПользователю.Важное, 10);

// Многострочное сообщение

Сообщить("Результаты проверки:" + Символы.ПС +

"1. Нарушений не найдено" + Символы.ПС +

"2. Все документы проведены");

⚠️ Внимание: В толстом клиенте параметр Длительность игнорируется — сообщение закроется только после нажатия пользователем на крестик или кнопку OK.
💡

Чтобы быстро убрать все сообщения с экрана в режиме отладки, используйте горячие клавиши Ctrl+Shift+F2 (очистка окна сообщений).

2. ПоказатьОповещениеПользователя() — для интерактивных уведомлений

Если нужно вывести сообщение, которое не блокирует работу пользователя и может содержать кнопки для взаимодействия, используйте метод ПоказатьОповещениеПользователя(). Этот способ доступен только в тонком и веб-клиенте.

Синтаксис:

ПоказатьОповещениеПользователя(Текст, Заголовок = "", Кнопки = Неопределено, Длительность = 5, Модальность = Ложь);

Ключевые параметры:

  • 📌 Кнопки — массив с названиями кнопок (например, Новый Массив("Да", "Нет")). Если не указано, будет одна кнопка OK.
  • 🔄 Модальность — если Истина, сообщение заблокирует работу с программой до закрытия.
  • 🎨 Заголовок — отображается в шапке окна (по умолчанию "1С:Предприятие").

Пример с обработкой нажатия кнопки:

Результат = ПоказатьОповещениеПользователя(

"Сохранить изменения перед закрытием?",

"Подтверждение",

Новый Массив("Сохранить", "Не сохранять", "Отмена"),

0,

Истина

);

Если Результат = "Сохранить" Тогда

СохранитьДанные();

ИначеЕсли Результат = "Не сохранять" Тогда

ЗакрытьБезСохранения();

КонецЕсли;

Параметр Толстый клиент Тонкий клиент Веб-клиент
Сообщить() ✅ Да ✅ Да ✅ Да
ПоказатьОповещениеПользователя() ❌ Нет ✅ Да ✅ Да
Кнопки в сообщении ❌ Нет ✅ Да ✅ Да
Автозакрытие по таймеру ❌ Нет ✅ Да ✅ Да
⚠️ Внимание: В веб-клиенте сообщения, выведенные через ПоказатьОповещениеПользователя(), могут не отображаться, если пользователь заблокировал всплывающие окна в браузере. Проверьте настройки браузера или используйте альтернативные методы (например, вывод в статусную строку).

3. Вывод сообщений в статусную строку

Если нужно показать пользователю краткую информацию без прерывания его работы, подойдёт вывод в статусную строку (нижняя панель окна ). Этот метод не блокирует интерфейс и не требует подтверждения.

Синтаксис:

СтатуснаяСтрока.УстановитьТекст(Текст, Режим = РежимОтображенияСообщения.Обычный);

Пример:

// Вывести сообщение в статусную строку на 10 секунд

СтатуснаяСтрока.УстановитьТекст("Идёт обработка данных...", РежимОтображенияСообщения.Важный);

Пause(10); // Пауза в секундах (только для демонстрации!)

СтатуснаяСтрока.Очистить();

Особенности метода:

  • ⏳ Сообщение автоматически исчезает через 5 секунд (или по истечении времени, заданного в Пause()).
  • 🖥️ Работает во всех клиентах, кроме мобильного приложения.
  • 📛 Можно выводить прогресс-бар (для длинных операций):
СтатуснаяСтрока.НачатьПрогресс("Обработка документов...");

Для Сч = 1 По 100 Цикл

СтатуснаяСтрока.УстановитьПрогресс(Сч, 100);

// ... код обработки ...

КонецЦикла;

СтатуснаяСтрока.ЗакончитьПрогресс();

💡

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

4. Предупреждение() и Вопрос() — для критичных действий

Если требуется принудительное подтверждение пользователя перед выполнением операции (например, удаление данных), используйте функции Предупреждение() и Вопрос(). Эти методы блокируют дальнейшее выполнение кода до получения ответа.

Сравнение функций:

Функция Возвращаемое значение Кнопки Пример использования
Предупреждение() Нет (просто окно с OK) Только OK Вывод информации об ошибке
Вопрос() Истина (Да) / Ложь (Нет) Да / Нет Подтверждение удаления

Примеры:

// Предупреждение об ошибке

Предупреждение("Недостаточно прав для выполнения операции!", 10);

// Вопрос с обработкой ответа

Если Вопрос("Удалить выбранные документы?", РежимДиалогаВопрос.ДаНет) Тогда

УдалитьДокументы();

КонецЕсли;

Дополнительные параметры:

  • Таймаут (в секундах) — через сколько окно закроется автоматически (только для Предупреждение()).
  • 🎭 РежимДиалогаВопрос — можно задать варианты кнопок:
    • РежимДиалогаВопрос.ДаНет (по умолчанию)
    • РежимДиалогаВопрос.ОкОтмена
    • РежимДиалогаВопрос.ДаНетОтмена
⚠️ Внимание: В веб-клиенте функция Вопрос() может не сработать корректно, если пользователь открыл в нескольких вкладках браузера. В этом случае используйте ПоказатьОповещениеПользователя() с кнопками.

5. Вывод сообщений в журнал регистрации

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

Способы записи в журнал:

// 1. Простая запись

ЗаписатьЖурналРегистрации(НСтр("ru = 'Ошибка при обмене данными'"), УровеньЖурналаРегистрации.Ошибка);

// 2. Запись с детализацией

ЗаписьЖурнала = Новый Структура();

ЗаписьЖурнала.Вставить("Сообщение", "Не удалось подключиться к серверу обмена");

ЗаписьЖурнала.Вставить("Данные", ОбъектВСтроку(ПараметрыПодключения));

ЗаписатьЖурналРегистрации(ЗаписьЖурнала, УровеньЖурналаРегистрации.Предупреждение);

Уровни важности сообщений:

  • 🟢 УровеньЖурналаРегистрации.Информация — стандартные события.
  • 🟡 УровеньЖурналаРегистрации.Предупреждение — некритичные ошибки.
  • 🔴 УровеньЖурналаРегистрации.Ошибка — сбои, требующие вмешательства.

Как просмотреть журнал:

  1. Откройте Администрирование → Журналы регистрации.
  2. Выберите нужный период и уровень сообщений.
  3. Используйте фильтр по тексту или модулю, где была сделана запись.
Как очистить журнал регистрации?

Очистка журнала регистрации доступна только пользователям с правами администратора. Для этого перейдите в Администрирование → Журналы регистрации, выберите нужный журнал и нажмите "Очистить". Учтите, что это необратимая операция!

6. Вывод сообщений без программирования (для пользователей)

Если вы не программист, но нужно вывести сообщение в , можно использовать стандартные механизмы платформы без написания кода. Вот несколько способов:

Способ 1: Настройка уведомлений в документах

  • 📄 Откройте нужный документ (например, Реализация товаров).
  • 🔧 Перейдите в меню Ещё → Настроить форму.
  • 🔔 Добавьте поле типа "Поле сообщения" и настройте условие его отображения (например, при некорректной сумме).

Способ 2: Использование бизнес-процессов

  • 📈 В разделе Администрирование → Бизнес-процессы создайте новый процесс.
  • 💬 Добавьте действие "Уведомление" и настройте текст сообщения.
  • 🔗 Привяжите бизнес-процесс к событию (например, проведение документа).

Способ 3: Печатные формы с комментариями

  • 🖨️ При печати документа добавьте в макет печатной формы текстовый блок с нужным сообщением.
  • 📌 Используйте условное оформление, чтобы сообщение появлялось только при определенных условиях.

☑️ Подготовка к выводу сообщения без кода

Выполнено: 0 / 4

7. Типичные ошибки и как их избежать

При работе с выводом сообщений в даже опытные разработчики допускают ошибки. Вот самые распространённые из них и способы их решения:

Ошибка 1: Сообщение не появляется в веб-клиенте

  • 🚫 Причина: Использование Сообщить() в серверном коде (например, в модуле объекта с правом выполнения "На сервере").
  • Решение: Перенесите вывод сообщения в клиентский код или используйте ПоказатьОповещениеПользователя().

Ошибка 2: Сообщение блокирует интерфейс

  • 🚫 Причина: Чрезмерное использование Вопрос() или Предупреждение() в циклах.
  • Решение: Замените на вывод в статусную строку или журнал регистрации.

Ошибка 3: Текст сообщения обрезается

  • 🚫 Причина: Слишком длинная строка без переносов (Символы.ПС).
  • Решение: Разбейте текст на абзацы или используйте функцию СтрЗаменить() для вставки переносов.

Ошибка 4: Сообщение дублируется

  • 🚫 Причина: Вызов Сообщить() в обработчике события, который срабатывает многократно (например, ПриИзменении).
  • Решение: Добавьте проверку на изменение значения или используйте флаг-признак.

Пример исправления дублирования:

Перем СообщениеВыведено Ложь;

Процедура ТоварПриИзменении(Элемент)

Если НЕ СообщениеВыведено Тогда

Сообщить("Внимание! Изменено наименование товара.");

СообщениеВыведено = Истина;

КонецЕсли;

КонецПроцедуры

⚠️ Внимание: В управляемых формах некоторые события (например, ПриАктивизацииСтроки) могут срабатывать несколько раз при одном действии пользователя. Всегда тестируйте вывод сообщений на реальных данных.

FAQ: Частые вопросы по выводу сообщений в 1С

Можно ли вывести сообщение с картинкой?

Да, но только в тонком и веб-клиенте через ПоказатьОповещениеПользователя(). Для этого нужно:

  1. Поместить изображение в хранилище дополнительной информации.
  2. Получить ссылку на картинку через ПолучитьИзображение().
  3. Передать ссылку в параметре Картинка функции ПоказатьОповещениеПользователя().

Пример:

Картинка = Новый Картинка(ПолучитьИзображение("path/to/image.png"));

ПоказатьОповещениеПользователя("Внимание!", "", , , , Картинка);

Как вывести сообщение в мобильном приложении 1С?

В мобильном клиенте работают только:

  • Сообщить() — появляется как всплывающее уведомление.
  • ПоказатьОповещениеПользователя() — с ограниченным функционалом (без картинок и сложных кнопок).

Функции Предупреждение() и Вопрос() в мобильной версии не поддерживаются.

Почему сообщение выводится дважды?

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

  • Проверьте директивы компиляции (&НаКлиенте, &НаСервере).
  • Используйте флаг для контроля вывода (как в примере выше).
  • Перенесите Сообщить() в процедуру с явным указанием &НаКлиенте.
Как изменить цвет текста в сообщении?

В стандартных функциях (Сообщить(), Предупреждение()) цвет текста изменить нельзя. Альтернативы:

  • Используйте HTML-документ с выводом через ПоказатьHTMLДокумент() (только для тонкого клиента).
  • Создайте свою форму с полем ПолеHTMLДокумента и настройте стили через CSS.
Где хранятся сообщения из журнала регистрации?

Записи журнала регистрации хранятся в таблице _EventLog базы данных . Чтобы их просмотреть:

  1. Откройте Администрирование → Журналы регистрации.
  2. Нажмите "Настроить список" и добавьте нужные колонки (например, "Модуль", "ТекстСообщения").
  3. Для экспорта используйте кнопку "Выгрузить".

Очистка журнала не удаляет записи из базы физически — они помечаются как удалённые иlater удаляются при сжатии базы.