Вывод сообщений в 1С:Предприятие — одна из самых востребованных операций как для разработчиков, так и для обычных пользователей. Без этой функции невозможно отладить код, предупредить оператора об ошибке или просто вывести справочную информацию. В зависимости от задачи можно использовать разные методы: от простого Сообщить() до сложных диалоговых окон с кнопками.
В этой статье мы разберём все актуальные способы вывода сообщений в 1С 8.3, включая нюансы работы в разных режимах (тонкий клиент, толстый клиент, веб-клиент), а также покажем, как оформить сообщение так, чтобы оно не потерялось среди других уведомлений. Особое внимание уделим практическим примерам кода и типичным ошибкам, которые допускают начинающие программисты.
Если вы не программист, а обычный пользователь 1С, не закрывайте статью — в конце есть раздел с инструкциями, как вывести сообщение без написания кода, используя стандартные механизмы платформы.
1. Базовый способ: функция Сообщить()
Самый простой и универсальный метод вывода сообщений — встроенная функция Сообщить(). Она работает во всех режимах 1С:Предприятия (тонкий клиент, толстый клиент, веб-клиент, сервер) и не требует подключения дополнительных библиотек.
Основной синтаксис:
Сообщить(ТекстСообщения, Режим = РежимСообщенияПользователю.Важное, Длительность = 5);
Где:
- 📝 ТекстСообщения — строка, которая будет отображена. Можно использовать многострочный текст с переносами (
Символы.ПС). - 🔧 Режим (необязательно) — определяет внешний вид сообщения. Варианты:
РежимСообщенияПользователю.Обычное(по умолчанию)РежимСообщенияПользователю.Важное(выделено жирным)РежимСообщенияПользователю.ОченьВажное(красный крестик)
- ⏱️ Длительность (необязательно) — время в секундах, сколько сообщение будет висеть на экране (только для тонкого и веб-клиента).
Примеры использования:
// Простое сообщение
Сообщить("Обработка завершена успешно!");
// Важное сообщение с таймаутом
Сообщить("Внимание! Обнаружены ошибки в данных!", РежимСообщенияПользователю.Важное, 10);
// Многострочное сообщение
Сообщить("Результаты проверки:" + Символы.ПС +
"1. Нарушений не найдено" + Символы.ПС +
"2. Все документы проведены");
⚠️ Внимание: В толстом клиенте параметр Длительность игнорируется — сообщение закроется только после нажатия пользователем на крестик или кнопку OK.
Чтобы быстро убрать все сообщения с экрана в режиме отладки, используйте горячие клавиши Ctrl+Shift+F2 (очистка окна сообщений).
2. ПоказатьОповещениеПользователя() — для интерактивных уведомлений
Если нужно вывести сообщение, которое не блокирует работу пользователя и может содержать кнопки для взаимодействия, используйте метод ПоказатьОповещениеПользователя(). Этот способ доступен только в тонком и веб-клиенте.
Синтаксис:
ПоказатьОповещениеПользователя(Текст, Заголовок = "", Кнопки = Неопределено, Длительность = 5, Модальность = Ложь);
Ключевые параметры:
- 📌 Кнопки — массив с названиями кнопок (например,
Новый Массив("Да", "Нет")). Если не указано, будет одна кнопка OK. - 🔄 Модальность — если
Истина, сообщение заблокирует работу с программой до закрытия. - 🎨 Заголовок — отображается в шапке окна (по умолчанию "1С:Предприятие").
Пример с обработкой нажатия кнопки:
Результат = ПоказатьОповещениеПользователя(
"Сохранить изменения перед закрытием?",
"Подтверждение",
Новый Массив("Сохранить", "Не сохранять", "Отмена"),
0,
Истина
);
Если Результат = "Сохранить" Тогда
СохранитьДанные();
ИначеЕсли Результат = "Не сохранять" Тогда
ЗакрытьБезСохранения();
КонецЕсли;
| Параметр | Толстый клиент | Тонкий клиент | Веб-клиент |
|---|---|---|---|
Сообщить() |
✅ Да | ✅ Да | ✅ Да |
ПоказатьОповещениеПользователя() |
❌ Нет | ✅ Да | ✅ Да |
| Кнопки в сообщении | ❌ Нет | ✅ Да | ✅ Да |
| Автозакрытие по таймеру | ❌ Нет | ✅ Да | ✅ Да |
⚠️ Внимание: В веб-клиенте сообщения, выведенные через ПоказатьОповещениеПользователя(), могут не отображаться, если пользователь заблокировал всплывающие окна в браузере. Проверьте настройки браузера или используйте альтернативные методы (например, вывод в статусную строку).
3. Вывод сообщений в статусную строку
Если нужно показать пользователю краткую информацию без прерывания его работы, подойдёт вывод в статусную строку (нижняя панель окна 1С). Этот метод не блокирует интерфейс и не требует подтверждения.
Синтаксис:
СтатуснаяСтрока.УстановитьТекст(Текст, Режим = РежимОтображенияСообщения.Обычный);
Пример:
// Вывести сообщение в статусную строку на 10 секунд
СтатуснаяСтрока.УстановитьТекст("Идёт обработка данных...", РежимОтображенияСообщения.Важный);
Пause(10); // Пауза в секундах (только для демонстрации!)
СтатуснаяСтрока.Очистить();
Особенности метода:
- ⏳ Сообщение автоматически исчезает через 5 секунд (или по истечении времени, заданного в
Пause()). - 🖥️ Работает во всех клиентах, кроме мобильного приложения.
- 📛 Можно выводить прогресс-бар (для длинных операций):
СтатуснаяСтрока.НачатьПрогресс("Обработка документов...");
Для Сч = 1 По 100 Цикл
СтатуснаяСтрока.УстановитьПрогресс(Сч, 100);
// ... код обработки ...
КонецЦикла;
СтатуснаяСтрока.ЗакончитьПрогресс();
Статусная строка идеальна для отображения фоновых процессов (например, выгрузки данных или проверки связности), когда не нужно прерывать работу пользователя.
4. Предупреждение() и Вопрос() — для критичных действий
Если требуется принудительное подтверждение пользователя перед выполнением операции (например, удаление данных), используйте функции Предупреждение() и Вопрос(). Эти методы блокируют дальнейшее выполнение кода до получения ответа.
Сравнение функций:
| Функция | Возвращаемое значение | Кнопки | Пример использования |
|---|---|---|---|
Предупреждение() |
Нет (просто окно с OK) | Только OK | Вывод информации об ошибке |
Вопрос() |
Истина (Да) / Ложь (Нет) |
Да / Нет | Подтверждение удаления |
Примеры:
// Предупреждение об ошибке
Предупреждение("Недостаточно прав для выполнения операции!", 10);
// Вопрос с обработкой ответа
Если Вопрос("Удалить выбранные документы?", РежимДиалогаВопрос.ДаНет) Тогда
УдалитьДокументы();
КонецЕсли;
Дополнительные параметры:
- ⏰ Таймаут (в секундах) — через сколько окно закроется автоматически (только для
Предупреждение()). - 🎭 РежимДиалогаВопрос — можно задать варианты кнопок:
РежимДиалогаВопрос.ДаНет(по умолчанию)РежимДиалогаВопрос.ОкОтменаРежимДиалогаВопрос.ДаНетОтмена
⚠️ Внимание: В веб-клиенте функцияВопрос()может не сработать корректно, если пользователь открыл 1С в нескольких вкладках браузера. В этом случае используйтеПоказатьОповещениеПользователя()с кнопками.
5. Вывод сообщений в журнал регистрации
Для отладки или логирования действий (например, при работе с фоновыми заданиями или регламентными операциями) удобно выводить сообщения в журнал регистрации. Эти записи сохраняются в базе данных и могут быть проанализированы позже.
Способы записи в журнал:
// 1. Простая запись
ЗаписатьЖурналРегистрации(НСтр("ru = 'Ошибка при обмене данными'"), УровеньЖурналаРегистрации.Ошибка);
// 2. Запись с детализацией
ЗаписьЖурнала = Новый Структура();
ЗаписьЖурнала.Вставить("Сообщение", "Не удалось подключиться к серверу обмена");
ЗаписьЖурнала.Вставить("Данные", ОбъектВСтроку(ПараметрыПодключения));
ЗаписатьЖурналРегистрации(ЗаписьЖурнала, УровеньЖурналаРегистрации.Предупреждение);
Уровни важности сообщений:
- 🟢
УровеньЖурналаРегистрации.Информация— стандартные события. - 🟡
УровеньЖурналаРегистрации.Предупреждение— некритичные ошибки. - 🔴
УровеньЖурналаРегистрации.Ошибка— сбои, требующие вмешательства.
Как просмотреть журнал:
- Откройте
Администрирование → Журналы регистрации. - Выберите нужный период и уровень сообщений.
- Используйте фильтр по тексту или модулю, где была сделана запись.
Как очистить журнал регистрации?
Очистка журнала регистрации доступна только пользователям с правами администратора. Для этого перейдите в Администрирование → Журналы регистрации, выберите нужный журнал и нажмите "Очистить". Учтите, что это необратимая операция!
6. Вывод сообщений без программирования (для пользователей)
Если вы не программист, но нужно вывести сообщение в 1С, можно использовать стандартные механизмы платформы без написания кода. Вот несколько способов:
Способ 1: Настройка уведомлений в документах
- 📄 Откройте нужный документ (например,
Реализация товаров). - 🔧 Перейдите в меню
Ещё → Настроить форму. - 🔔 Добавьте поле типа "Поле сообщения" и настройте условие его отображения (например, при некорректной сумме).
Способ 2: Использование бизнес-процессов
- 📈 В разделе
Администрирование → Бизнес-процессысоздайте новый процесс. - 💬 Добавьте действие "Уведомление" и настройте текст сообщения.
- 🔗 Привяжите бизнес-процесс к событию (например, проведение документа).
Способ 3: Печатные формы с комментариями
- 🖨️ При печати документа добавьте в макет печатной формы текстовый блок с нужным сообщением.
- 📌 Используйте условное оформление, чтобы сообщение появлялось только при определенных условиях.
☑️ Подготовка к выводу сообщения без кода
7. Типичные ошибки и как их избежать
При работе с выводом сообщений в 1С даже опытные разработчики допускают ошибки. Вот самые распространённые из них и способы их решения:
Ошибка 1: Сообщение не появляется в веб-клиенте
- 🚫 Причина: Использование
Сообщить()в серверном коде (например, в модуле объекта с правом выполнения "На сервере"). - ✅ Решение: Перенесите вывод сообщения в клиентский код или используйте
ПоказатьОповещениеПользователя().
Ошибка 2: Сообщение блокирует интерфейс
- 🚫 Причина: Чрезмерное использование
Вопрос()илиПредупреждение()в циклах. - ✅ Решение: Замените на вывод в статусную строку или журнал регистрации.
Ошибка 3: Текст сообщения обрезается
- 🚫 Причина: Слишком длинная строка без переносов (
Символы.ПС). - ✅ Решение: Разбейте текст на абзацы или используйте функцию
СтрЗаменить()для вставки переносов.
Ошибка 4: Сообщение дублируется
- 🚫 Причина: Вызов
Сообщить()в обработчике события, который срабатывает многократно (например,ПриИзменении). - ✅ Решение: Добавьте проверку на изменение значения или используйте флаг-признак.
Пример исправления дублирования:
Перем СообщениеВыведено Ложь;
Процедура ТоварПриИзменении(Элемент)
Если НЕ СообщениеВыведено Тогда
Сообщить("Внимание! Изменено наименование товара.");
СообщениеВыведено = Истина;
КонецЕсли;
КонецПроцедуры
⚠️ Внимание: В управляемых формах некоторые события (например, ПриАктивизацииСтроки) могут срабатывать несколько раз при одном действии пользователя. Всегда тестируйте вывод сообщений на реальных данных.
FAQ: Частые вопросы по выводу сообщений в 1С
Можно ли вывести сообщение с картинкой?
Да, но только в тонком и веб-клиенте через ПоказатьОповещениеПользователя(). Для этого нужно:
- Поместить изображение в хранилище дополнительной информации.
- Получить ссылку на картинку через
ПолучитьИзображение(). - Передать ссылку в параметре
КартинкафункцииПоказатьОповещениеПользователя().
Пример:
Картинка = Новый Картинка(ПолучитьИзображение("path/to/image.png"));
ПоказатьОповещениеПользователя("Внимание!", "", , , , Картинка);
Как вывести сообщение в мобильном приложении 1С?
В мобильном клиенте работают только:
Сообщить()— появляется как всплывающее уведомление.ПоказатьОповещениеПользователя()— с ограниченным функционалом (без картинок и сложных кнопок).
Функции Предупреждение() и Вопрос() в мобильной версии не поддерживаются.
Почему сообщение выводится дважды?
Это происходит из-за особенностей работы управляемых форм, где код может выполняться как на сервере, так и на клиенте. Решения:
- Проверьте директивы компиляции (
&НаКлиенте,&НаСервере). - Используйте флаг для контроля вывода (как в примере выше).
- Перенесите
Сообщить()в процедуру с явным указанием&НаКлиенте.
Как изменить цвет текста в сообщении?
В стандартных функциях (Сообщить(), Предупреждение()) цвет текста изменить нельзя. Альтернативы:
- Используйте HTML-документ с выводом через
ПоказатьHTMLДокумент()(только для тонкого клиента). - Создайте свою форму с полем
ПолеHTMLДокументаи настройте стили через CSS.
Где хранятся сообщения из журнала регистрации?
Записи журнала регистрации хранятся в таблице _EventLog базы данных 1С. Чтобы их просмотреть:
- Откройте
Администрирование → Журналы регистрации. - Нажмите "Настроить список" и добавьте нужные колонки (например, "Модуль", "ТекстСообщения").
- Для экспорта используйте кнопку "Выгрузить".
Очистка журнала не удаляет записи из базы физически — они помечаются как удалённые иlater удаляются при сжатии базы.