Сообщения в 1С мешают работать: закрыть, отключить на старте, подавить в коде

· 9 мин

Содержание

Окно сообщений в 1С убирается крестиком в его заголовке, а очищается командой Очистить из контекстного меню. В Конфигураторе то же окно прячется и показывается сочетанием Ctrl+Alt+O. Если окно возвращается снова и снова, причина в коде: где-то вызывается Сообщить(), срабатывает проверка заполнения или платформа предупреждает о модальном вызове.

Типичная ситуация: бухгалтер проводит пачку документов, и после каждого внизу формы всплывает «Не заполнено поле…» или служебный текст от доработки. Закрыть окно — дело одной секунды. Чтобы оно перестало появляться, нужно найти источник: пользовательский, стартовый или программный. Ниже разобраны все три уровня.

Как закрыть и очистить окно сообщений пользователю

В интерфейсе «Такси» сообщения выводятся в панель внизу текущей формы. Если формы нет (сообщение пришло при запуске или из общего модуля), платформа показывает отдельное окно «Сообщения».

Что можно сделать без прав администратора:

  1. Нажмите крестик в правом верхнем углу панели — она свернётся.
  2. Щёлкните правой кнопкой по тексту сообщения и выберите Очистить — список опустеет.
  3. Если сообщение привязано к полю, двойной щелчок по нему переводит курсор в это поле. Исправьте значение — и при следующей записи сообщение не появится.

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

Пользователю стоит различать типы сообщений:

  • 📝 Проверка заполнения — «Поле “Контрагент” не заполнено». Уходит, когда заполнены обязательные реквизиты.
  • ⚙️ Служебный вывод доработки — тексты вроде «Обработано 15 строк» или отладочные строки. Убирается только правкой кода.
  • ⚠️ Предупреждения платформы — о модальных окнах и синхронных вызовах. Убирается настройкой конфигурации или переписыванием кода.

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

Какое окно вам мешает?

Окно сообщений в Конфигураторе и отладочные настройки

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

  • Ctrl+Alt+O — показать или скрыть окно;
  • крестик в заголовке окна;
  • Очистить в контекстном меню — убрать старые строки, чтобы не путать их с новыми.

Окно можно открепить и перетащить в сторону, если оно занимает половину экрана. Положение запоминается для пользователя Конфигуратора.

Отдельный случай — отладка. Если в меню Отладка → Остановка по ошибке включена остановка, отладчик будет вставать на каждом исключении, даже перехваченном в Попытка…Исключение. Это выглядит как «окно, которое всё время выскакивает». Снимите галочку или задайте фильтр по тексту ошибки, чтобы останавливаться только на нужной.

Вторая настройка, которая плодит сообщения в режиме 1С:Предприятие, лежит в свойствах корня конфигурации:

СвойствоЗначениеЧто видит пользователь
Режим использования модальностиИспользоватьМодальные окна работают, сообщений нет
Режим использования модальностиИспользовать с предупреждениямиМодальное окно открывается, но в сообщения пишется предупреждение
Режим использования модальностиНе использоватьВызов модального метода приводит к ошибке
Режим использования синхронных вызовов расширений платформы и внешних компонентте же три значенияАналогично для синхронной работы с файлами и компонентами

Значение «Использовать с предупреждениями» удобно на этапе перевода кода на асинхронные вызовы: предупреждения показывают, где осталась модальность. В рабочей базе оно раздражает пользователей. Правильный путь — переписать вызовы, временный — вернуть «Использовать».

В типовой конфигурации на поддержке эти свойства лучше не трогать: при обновлении они вернутся к значению поставщика. Вопрос решается в своих доработках, а не в настройках типовой.

Ключи запуска, которые убирают стартовые окна

Часть окон появляется до того, как пользователь что-то нажал: сообщение о несоответствии конфигурации базы данных, выбор базы, вопросы при пакетном запуске. Для них у платформы есть параметры командной строки.

КлючЧто делает
/DisableStartupMessagesПодавляет стартовые сообщения, например о том, что конфигурация базы данных не соответствует сохранённой
/DisableStartupDialogsНе показывает стартовые диалоги; если параметров для входа не хватает, запуск завершается ошибкой без окна
/DisableSplashНе показывает заставку при запуске
/Out <файл>В пакетном режиме Конфигуратора пишет служебные сообщения в файл, а не на экран
/C <строка>Передаёт строку в глобальную переменную ПараметрЗапуска — её читает код конфигурации

Пример ярлыка для ночного пакетного обновления конфигурации базы данных, где никто не нажмёт «ОК»:

"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "D:\Bases\Buh" /N "Робот" /P "пароль" ^
 /DisableStartupMessages /DisableStartupDialogs ^
 /UpdateDBCfg /Out "D:\Logs\update.log" /DumpResult "D:\Logs\result.txt"

Если что-то пошло не так, причина будет в update.log, а код завершения — в result.txt (0 — успех).

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

/DisableStartupMessages прячет только стартовые сообщения. Тексты, которые выводит код конфигурации через Сообщить(), этим ключом не отключаются.

Тихий режим через ПараметрЗапуска и параметры сеанса

Когда базу запускает робот или тестовый сценарий, удобно, чтобы своя доработка не выводила сообщения вовсе. Платформа не знает, какие сообщения «лишние», поэтому флаг придётся завести самому.

Схема из трёх частей:

  1. В конфигурации (или в расширении) создайте параметр сеанса ТихийРежим с типом Булево.
  2. В модуле сеанса, в УстановкаПараметровСеанса, задайте ему значение Ложь по умолчанию.
  3. На клиенте при старте прочитайте ПараметрЗапуска и, если в нём есть нужное слово, включите флаг через серверный вызов.
// Модуль управляемого приложения (или обработчик расширения)
Процедура ПриНачалеРаботыСистемы()
	Если СтрНайти(ВРег(ПараметрЗапуска), "ТИХИЙРЕЖИМ") > 0 Тогда
		ТихийРежимВызовСервера.Включить();
	КонецЕсли;
КонецПроцедуры
// Общий модуль ТихийРежимВызовСервера (Сервер, Вызов сервера)
Процедура Включить() Экспорт
	УстановитьПривилегированныйРежим(Истина);
	ПараметрыСеанса.ТихийРежим = Истина;
КонецПроцедуры

Запуск с флагом: 1cv8.exe ENTERPRISE /F "D:\Bases\Test" /C "ТихийРежим".

ПараметрЗапуска доступен только на клиенте, а УстановкаПараметровСеанса выполняется на сервере. Поэтому значение передаётся отдельным вызовом, а не читается в модуле сеанса.

В типовых конфигурациях модуль приложения занят библиотекой стандартных подсистем. Свой обработчик добавляйте в расширение, а не правьте типовой модуль: так флаг переживёт обновление.

Чем заменить Сообщить() в своём коде

Сообщить() — самый простой и самый навязчивый способ вывода. В доработках его стоит заменить тем, что подходит конкретной ситуации.

ЗадачаЧто использоватьКак выглядит для пользователя
Ошибка в конкретном полеСообщениеПользователю с заполненными Поле и ПутьКДаннымСообщение подсвечивает поле, щелчок ведёт к нему
Короткое «Готово»ПоказатьОповещениеПользователя()Всплывающая подсказка в углу, исчезает сама
Ход длинной операцииСостояние()Текст и прогресс без окна сообщений
Технические деталиЗаписьЖурналаРегистрации()Пользователь не видит, администратор читает в журнале
Важное уведомлениеПоказатьПредупреждение()Немодальное окно с кнопкой «ОК»

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

// Общий модуль СообщенияСервер (Сервер)
Процедура Сообщить(Текст, Поле = "", ПутьКДанным = "") Экспорт
	УстановитьПривилегированныйРежим(Истина);
	Тихо = ПараметрыСеанса.ТихийРежим;
	УстановитьПривилегированныйРежим(Ложь);

	Если Тихо Тогда
		ЗаписьЖурналаРегистрации("Сообщения.Подавлено",
			УровеньЖурналаРегистрации.Информация, , , Текст);
		Возврат;
	КонецЕсли;

	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = Текст;
	Сообщение.Поле = Поле;
	Сообщение.ПутьКДанным = ПутьКДанным;
	Сообщение.Сообщить();
КонецПроцедуры

Дальше поиском по модулям (Ctrl+Shift+F в Конфигураторе) найдите вызовы Сообщить( в своих объектах и замените их на СообщенияСервер.Сообщить(. Типовые модули не трогайте.

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

Сообщения в фоновых и регламентных заданиях

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

Забрать их можно с клиента или сервера, зная идентификатор задания:

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если Задание <> Неопределено Тогда
	Для Каждого Сообщение Из Задание.ПолучитьСообщенияПользователю(Истина) Цикл
		Сообщение.Сообщить();
	КонецЦикла;
КонецЕсли;

Отсюда два практических вывода:

  • 🔁 Если пользователь видит пачку сообщений после окончания длительной операции, их выводит именно такой цикл. Убрать их — значит не передавать их на клиент или фильтровать по тексту.
  • 🕒 Регламентное задание запускается без пользователя, и его сообщения никто не заберёт. Для журнала работы используйте ЗаписьЖурналаРегистрации(), а не Сообщить().

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

Перехват исключений вместо окна с ошибкой

Окно ошибки с кнопкой «Подробно» появляется, когда исключение дошло до платформы необработанным. При массовой операции оно прерывает весь цикл на первом же документе.

Вместо этого перехватите исключение, запишите детали в журнал и покажите пользователю одну сводку в конце:

КоличествоОшибок = 0;
Для Каждого Ссылка Из СписокДокументов Цикл
	ДокументОбъект = Ссылка.ПолучитьОбъект();
	Попытка
		ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
	Исключение
		Инфо = ИнформацияОбОшибке();
		ЗаписьЖурналаРегистрации("Перепроведение.Ошибка",
			УровеньЖурналаРегистрации.Ошибка, Ссылка.Метаданные(), Ссылка,
			ПодробноеПредставлениеОшибки(Инфо));
		КоличествоОшибок = КоличествоОшибок + 1;
	КонецПопытки;
КонецЦикла;

Если КоличествоОшибок > 0 Тогда
	ТекстСводки = СтрШаблон("Не проведено документов: %1. Подробности в журнале регистрации.",
		Формат(КоличествоОшибок, "ЧН=0; ЧГ=0"));
	СообщенияСервер.Сообщить(ТекстСводки);
КонецЕсли;

Здесь вместо сотни окон пользователь получает одну строку, а администратор — полный текст каждой ошибки с привязкой к документу. Число оформлено через Формат() без разделителя групп разрядов, а ЧН=0 выведет ноль, а не пустую строку.

Правила, которые стоит соблюдать:

  • ❌ Не оставляйте пустой блок Исключение. Ошибка исчезнет бесследно, а данные останутся непроведёнными.
  • 🔄 Если ошибку нельзя обработать на этом уровне, после записи в журнал вызовите ВызватьИсключение; без параметров — исключение уйдёт выше с исходным текстом.
  • 🧾 Внутри транзакции после исключения транзакцию нужно отменить: ОтменитьТранзакцию() в блоке Исключение, иначе следующая запись упадёт с ошибкой «В данной транзакции уже происходили ошибки».

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

Массовое перепроведение меняет движения в учёте. Запускайте его на копии базы или после резервной копии и согласования с бухгалтерией.

Частые вопросы

Можно ли отключить окно сообщений для всех пользователей одной настройкой?
Нет. Панель сообщений — часть платформы, она открывается при любом выводе. Убирать нужно сами сообщения: заполнять поля, править код, переносить технический вывод в журнал регистрации.
Почему после закрытия окно появляется снова?
Его открывает новое сообщение. Посмотрите текст: если он один и тот же, его выводит конкретная форма или обработка, и править нужно её.
Где посмотреть сообщения, которые я случайно очистил?
Выведенные через Сообщить() тексты нигде не хранятся. Если доработка дублирует их в журнал регистрации, ищите там по имени события. Ошибки записи и проведения платформа пишет в журнал сама.
Влияет ли ключ /DisableStartupMessages на работу базы?
Нет, он только не показывает стартовые сообщения. Сама ситуация, о которой сообщение предупреждало, например расхождение конфигураций, остаётся и требует решения.
Как найти, какой код выводит сообщение?
Скопируйте фрагмент текста и выполните глобальный поиск по модулям в Конфигураторе через Ctrl+Shift+F. Если текст собирается из частей, ищите по постоянному куску, а затем поставьте точку останова на найденную строку.