Очистка окна сообщений в 1С: от кнопки до ОчиститьСообщения()
Содержание
Сообщения в 1С копятся, пока вы не закроете панель или не вызовете очистку явно. Пользователь убирает их крестиком в самой панели, в Конфигураторе есть команда в контекстном меню окна, а разработчик сбрасывает список методом ОчиститьСообщения(). Какой путь ваш — зависит от того, где вы видите лишние строки.
Дальше по порядку: что именно лежит в этом окне, как почистить его руками, как сделать это из кода и что делать, если сообщения не уходят или возвращаются.
Откуда берутся сообщения и что в них хранится
Окно сообщений показывает короткие оповещения, которые программа выводит по ходу работы. Проведение документа с ошибкой, заполнение по шаблону, выполнение обработки: всё, что вызвало Сообщить(...) или объект СообщениеПользователю, оказывается в этом списке.
В управляемом интерфейсе («Такси») сообщения выводятся отдельной панелью у нижнего края окна программы. Если у сообщения есть привязка к объекту, по нему можно щёлкнуть и перейти к документу или полю формы, из-за которого оно появилось.
Это не журнал. Окно сообщений живёт только в рамках сеанса и ничего не пишет на диск. Закрыли программу — списка нет. Журнал регистрации устроен иначе: он хранит события в базе, и «очистить окно» его не затрагивает (об этом ниже).
Из этого следуют две практические вещи:
- 🧹 очистка окна не удаляет ни документы, ни проводки, ни записи в базе;
- 🔁 если после очистки сообщение появилось снова, значит, вы повторили действие, которое его вызывает. Причину надо искать в самом действии.
Как убрать сообщения вручную в обычной работе
Самый частый случай: пользователь провёл несколько документов, получил десяток предупреждений и теперь не видит новых за старыми.
- Найдите панель сообщений в нижней части окна программы.
- Закройте её кнопкой закрытия в углу панели. Накопленные строки уйдут вместе с ней.
- При следующем сообщении панель откроется снова, но уже пустой.
Если вы хотите не просто спрятать панель, а убедиться, что в списке не осталось старого, лучше закрыть её перед новым действием. Тогда всё, что появится после, относится именно к нему.
Перед повторным проведением документа закройте панель. Новые сообщения не смешаются со вчерашними, и сразу видно, какие ошибки остались.
Сообщения не пропадут сами, пока вы работаете в одном сеансе. Закрытие и повторный запуск программы тоже очищают всё, но это тяжёлый способ: теряются открытые окна и несохранённые данные.
Окно сообщений в Конфигураторе
В режиме Конфигуратора окно сообщений используется иначе. В нём появляются результаты проверки конфигурации, ошибки синтаксиса, предупреждения при сохранении и сборе данных. Строки там с ссылками на модули и номера строк.
Чтобы очистить его:
- Щёлкните правой кнопкой мыши внутри окна сообщений.
- Выберите в контекстном меню команду очистки.
Если окна не видно на экране, откройте его через меню Сервис или Окна (расположение зависит от настроек вашего рабочего стола Конфигуратора). После очередной проверки конфигурации сообщения добавляются в тот же список, поэтому перед проверкой имеет смысл его очистить: старые ошибки не будут путать со свежими.
⚠️ В Конфигураторе строки сообщений часто содержат переход к месту в коде. Если вы собираетесь исправлять ошибки по списку, не очищайте окно, пока не отработали все пункты. Скопируйте нужное в текстовый файл, чтобы не потерять.
Очистка из кода: метод ОчиститьСообщения()
Для разработчика есть встроенный метод глобального контекста. Он без параметров и убирает все сообщения, выведенные пользователю.
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
ОчиститьСообщения();
// дальше ваш код, который выводит свежие сообщения
Сообщить("Начало обработки");
КонецПроцедуры
Типичный приём: очищать список в начале длинной операции. Тогда пользователь видит только результат этого запуска. Особенно полезно в обработках, где Сообщить() вызывается в цикле по десяткам строк.
Привязка сообщения к полю
Если вы выводите сообщение через объект СообщениеПользователю, оно может быть связано с полем формы. Тогда очистка нужна ещё и для того, чтобы подсветка на поле исчезла, когда ошибка исправлена.
&НаКлиенте
Процедура ПроверитьЗаполнение()
ОчиститьСообщения();
Если ПустаяСтрока(Объект.Наименование) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнено наименование";
Сообщение.Поле = "Объект.Наименование";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
Каждую проверку удобно начинать с ОчиститьСообщения(): иначе при повторном нажатии кнопки старые тексты добавятся к новым и ошибок будет вдвое больше, чем на самом деле.
Клиент и сервер
Сообщения, выведенные на сервере, попадают к пользователю после возврата управления на клиент. Поэтому очистку надёжнее вызывать на клиенте, до обращения к серверной процедуре:
&НаКлиенте
Процедура Выполнить(Команда)
ОчиститьСообщения();
ВыполнитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьНаСервере()
// здесь Сообщить(...) формирует новые строки
КонецПроцедуры
Если вы поставите очистку внутри серверной процедуры после Сообщить(), рискуете стереть то, что только что вывели. Порядок такой: сначала очистка, потом вывод.
Внешние обработки и консоль кода
Если вы пользуетесь внешней консолью кода или своей обработкой для отладки, добавьте ОчиститьСообщения(); первой строкой исполняемого блока. Каждый запуск будет показывать только свои сообщения.
Очистка между шагами длинной обработки
Бывает, что обработка идёт по этапам, и каждый этап выводит свой отчёт. Если не чистить список, к концу в нём будет сотня строк, и пользователь пролистает ошибку, не заметив. Решение: выводить итог этапа и очищать список перед следующим только тогда, когда предыдущий результат уже не нужен.
&НаКлиенте
Процедура ЗагрузитьФайлы(Команда)
ОчиститьСообщения();
Ошибок = 0;
Для Каждого Строка Из Список Цикл
Если Не ЗагрузитьОдинФайл(Строка.Значение) Тогда
Ошибок = Ошибок + 1;
КонецЕсли;
КонецЦикла;
Сообщить("Обработано файлов: " + Формат(Список.Количество(), "ЧГ=0")
+ ", с ошибками: " + Формат(Ошибок, "ЧГ=0"));
КонецПроцедуры
Здесь очистка стоит один раз, в начале, а итог собирается в одну строку. Пользователь видит короткий результат вместо ленты из сообщений по каждому файлу.
Чем сообщение отличается от оповещения
Пользователи часто путают два механизма, и тогда очистка «не работает ».
| Механизм | Как выглядит | Исчезает | Очищается ОчиститьСообщения() |
|---|---|---|---|
Сообщить() и СообщениеПользователю | Строки в панели сообщений | Сам не исчезает, пока не закрыть панель или не очистить | Да |
ПоказатьОповещениеПользователя | Всплывающая подсказка в углу окна | Через несколько секунд | Нет, это отдельный механизм |
| Предупреждение или вопрос | Модальное окно с кнопкой | После нажатия кнопки | Нет |
Если вам нужно, чтобы подсказка не накапливалась, ничего чистить не надо: она и так временная. Для результатов, которые пользователь должен прочитать и сверить, используйте панель сообщений.
Проверка в отладке
Когда вы пишете и отлаживаете форму, удобно запускать её с очисткой в самом начале обработчика. Тогда после каждого шага отладки в панели только свежие строки, и не нужно закрывать панель вручную. Перед передачей кода в рабочую базу проверьте, что очистка стоит там, где её действительно ждёт пользователь, а не «на всякий случай» в обработчике, который вызывается часто, например при каждом изменении поля. Такая очистка будет стирать ошибки, которые пользователь ещё не успел прочитать.
Что делать, чтобы не копилось лишнее
Сообщения в окне — признак того, что кто-то выводит больше, чем читает пользователь. Бороться стоит с причиной, а не с отображением.
Для разработчика:
- ✅ выводите итог одной строкой, а не по строке на каждый элемент;
- ✅ ошибки привязывайте к полю: пользователь сразу видит, где исправлять;
- ✅ технические подробности пишите в журнал регистрации, а в окно отправляйте то, что требует действия пользователя;
- ✅ очищайте список в начале операции, не в конце: так итоговые сообщения остаются на экране.
Для администратора, если сообщения генерирует типовой механизм (например, массовое проведение): проверьте, из-за чего они возникают. Часто это один и тот же документ с неверным видом операции или незаполненным реквизитом. Исправите одну запись, и десять сообщений исчезнут.
Памятка перед очисткой
Прежде чем стирать список, задайте себе три вопроса. Это занимает полминуты и спасает от повторной работы.
- Нужны ли мне эти строки как отчёт? Если да, скопируйте текст в файл или сделайте снимок экрана.
- Исправлены ли ошибки, на которые они указывают? Если нет, после очистки вы просто забудете, с чего начинать.
- Кто увидит результат? Если вы готовите обработку для других пользователей, очистка в начале операции нужна им, а не только вам.
Для администратора полезно ещё одно правило: при массовых операциях (пересчёт, групповое проведение, обмен данными) просите разработчика выводить итог одной строкой и подробности писать в журнал регистрации. Тогда пользователь не тонет в панели, а при разборе инцидента все детали остаются в базе.
Журнал регистрации: когда нужна именно его очистка
Люди нередко называют «окном сообщений» журнал регистрации, потому что в нём тоже видны ошибки. Это разные вещи.
| Что чистим | Где находится | Что происходит с данными |
|---|---|---|
| Панель сообщений пользователя | Внизу окна программы | Исчезает только на экране, в базе ничего нет |
| Окно сообщений Конфигуратора | Окно в самом Конфигураторе | Исчезают строки текущего сеанса |
| Журнал регистрации | Администрирование → журнал регистрации (в Конфигураторе или через пользовательский интерфейс) | Хранится в файлах рядом с базой, объём растёт |
⚠️ Журнал регистрации сокращают или переключают на новый файл осознанно: старые записи нужны для расследования инцидентов. Если база файловая, убедитесь, что к ней нет доступа у других пользователей, и сделайте копию каталога журнала перед тем, как что-либо удалять.
Размер журнала настраивается: можно выбрать, какие события писать и как часто начинать новый файл. Если журнал занимает слишком много места, правильнее сократить число регистрируемых событий, чем удалять файлы вручную.
ОчиститьСообщения(); в начало процедуры, которая запускает операцию, на клиенте.Если сообщения не пропадают или возвращаются
Чаще всего причина в одном из четырёх.
Сообщение появляется заново после очистки
Вы очистили панель, но ошибка осталась в данных. Нажатие «Провести» или «Записать» снова вызывает проверку и снова выводит то же самое. Исправьте причину: заполните реквизит, поправьте дату, закройте период.
ОчиститьСообщения() не убирает нужное
Типичные причины:
- 🔸 вызов стоит на сервере перед выводом сообщений, а не на клиенте до серверного вызова;
- 🔸 сообщение выводится позже, в асинхронной обработке или по таймеру, уже после очистки;
- 🔸 вы смотрите в другой список, например в журнал регистрации или в оповещения, которые выводятся через
ПоказатьОповещениеПользователя.
Оповещение пользователя (всплывающая подсказка в углу) и сообщение в панели — это разные механизмы. Подсказка исчезает сама через несколько секунд.
Панель закрывается, но потом открывается пустой
Это нормальное поведение. Панель появляется при первом новом сообщении. Если оно не появляется, значит, выводить уже нечего.
В Конфигураторе пропали сообщения, а нужно было их сохранить
Вернуть нельзя: список живёт только в сеансе. Запустите проверку или операцию повторно. На будущее копируйте результат проверки в файл до очистки.
Если нужно сохранить текст сообщений из своей обработки, не опирайтесь на окно: пишите его в журнал регистрации через ЗаписьЖурналаРегистрации или в текстовый документ. Окно для этого не предназначено.
Частые вопросы
Очищается ли окно сообщений при закрытии программы?
Удаляет ли очистка окна ошибки из базы?
Как очистить окно сообщений 1С из кода?
ОчиститьСообщения(); перед тем, как выводить новые сообщения.