Уведомления и сообщения при старте 1С: устройство, код и отключение лишнего
Содержание
Оповещение и запуск в 1С — это два связанных механизма платформы 8.3: обработчики старта программы (ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы) и оповещения, которыми формы и код сообщают друг другу и пользователю о событиях (Оповестить, ПоказатьОповещениеПользователя). Почти все «назойливые» окна при входе в базу появляются именно из обработчиков старта, а всплывающие плашки в углу экрана — из оповещений.
Если при каждом входе выскакивает десяток окон, а запуск тянется минуту, причина почти всегда в коде этих обработчиков или в настройках подсистем, которые в них вызываются. Разобраться с ними можно без программиста: часть окон отключается настройками, часть — ответом на один вопрос. Для остального нужен конфигуратор и расширение.
Как устроены оповещения и запуск в 1С
Механизм состоит из трёх слоёв. Их полезно различать: от слоя зависит, где искать причину и как её убрать.
| Слой | Что делает | Где живёт код |
|---|---|---|
| Обработчики запуска | Выполняют код при входе в базу: проверки, стартовые окна, подключение фоновых опросов | Модуль управляемого приложения |
| Оповещения между формами | Передают событие всем открытым формам текущего сеанса | Вызов Оповестить, приём в ОбработкаОповещения формы |
| Оповещения пользователя | Показывают всплывающее сообщение в углу окна | ПоказатьОповещениеПользователя |
Что происходит при старте
Порядок событий в клиентском приложении такой:
- Платформа проверяет лицензию, аутентифицирует пользователя и загружает конфигурацию.
- Вызывается
ПередНачаломРаботыСистемы(Отказ). Если в нём установитьОтказ = Истина, программа закроется, не открыв рабочее окно. - Открывается главное окно, затем вызывается
ПриНачалеРаботыСистемы(). - Код из этих обработчиков подключает обработчики ожидания: они будут периодически опрашивать сервер — например, о новых напоминаниях или сообщениях.
Как ходят оповещения
Метод Оповестить(ИмяСобытия, Параметр, Источник) — клиентский. Он рассылает событие всем открытым формам только в текущем сеансе этого пользователя. Каждая форма получает его в обработчике ОбработкаОповещения и сама решает, реагировать ли.
Другие пользователи и другие сеансы событие от Оповестить не получат. Для оповещения коллег нужны другие инструменты: система взаимодействия («Обсуждения»), напоминания или опрос сервера по таймеру.
ОповеститьОбИзменении(Ссылка) — частный случай: он сообщает динамическим спискам, что объект изменился, и списки перечитывают данные.
Откуда берутся уведомления: типичные сценарии
Большую часть окон и плашек в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) выводит Библиотека стандартных подсистем (БСП). Платформа добавляет свои системные сообщения.
Что чаще всего видит пользователь при входе и во время работы:
- 🔄 Сообщение о рекомендуемой версии платформы. Конфигурация сверяет номер платформы с минимальным и рекомендуемым. Если номер ниже рекомендуемого — предупреждает, ниже минимального — не даёт работать.
- 📦 Обновление информационной базы. После обновления конфигурации первый вход запускает обработчики обновления, а затем может показать описание изменений.
- 🧭 Вопрос о перемещённой базе. Если базу восстановили из копии или перенесли на другой сервер, БСП спрашивает, копия это или основная база, и блокирует работу с внешними ресурсами до ответа.
- 🔐 Смена пароля. Если в настройках входа задан срок действия пароля, по его истечении пользователь получит требование сменить пароль .
- ⏰ Напоминания. Пользователь сам ставит напоминание к документу или задаче, и в срок появляется окно.
- 💬 «Обсуждения». Новые сообщения системы взаимодействия приходят оповещением и отображаются счётчиком.
- 📋 «Текущие дела». Панель с задачами: неотправленные отчёты, непроведённые документы, задачи по ЭДО.
- ✅ Плашки после записи. «Документ проведён», «Изменение» — это
ПоказатьОповещениеПользователяиз модуля формы.
Платформа сама выводит системные предупреждения. Пример — Конфигурация базы данных не соответствует сохраненной конфигурации. Продолжить? при входе в режим 1С:Предприятие из конфигуратора, когда изменения не применены к базе.
Права доступа и роли: кто что видит
Оповещения сами по себе не требуют отдельных прав. Но то, какие окна появятся у конкретного пользователя, определяют его роли.
| Что влияет | Как проявляется |
|---|---|
| Право «Администрирование» | Предупреждения об обновлении базы, о перемещённой копии, о версии платформы адресованы в первую очередь администратору |
| Роли на объекты | «Текущие дела» показывают задачи только по тем документам и отчётам, к которым есть доступ |
| Право «Сохранение данных пользователя» | Без него не запоминаются личные настройки: скрытые панели и отключённые окна возвращаются при следующем входе |
| Подключённые «Обсуждения» | Если информационная база не зарегистрирована в системе взаимодействия, оповещений о сообщениях не будет ни у кого |
Отсюда практичный вывод. Если у бухгалтера «вдруг» перестали сохраняться настройки рабочего стола и каждый вход открывается с теми же окнами, проверьте, не сняли ли с его профиля право на сохранение данных пользователя.
Не выдавайте право «Администрирование» рядовым пользователям ради того, чтобы «окно не мешало». Это права на всю базу, включая управление пользователями и выгрузку данных.
Как убрать лишнее без программиста
- Панель «Текущие дела» настраивается из самой панели: там можно отключить ненужные группы дел.
- Окно с описанием изменений после обновления обычно содержит флажок, отключающий показ.
- Напоминания удаляются из списка напоминаний пользователя.
- Вопрос о перемещённой базе исчезает после ответа: «это копия» или «это основная база». Ответ сохраняется.
- Лишние формы на начальной странице убираются через
Вид → Настройка начальной страницы(в интерфейсе «Такси» команда находится в главном меню, кнопка с тремя полосками в левом верхнем углу).
Программное управление оповещениями
Здесь собраны рабочие шаблоны для разработчика. Все примеры — для управляемого приложения 8.3.
Рассылка и приём события между формами
В форме, которая что-то изменила:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("ИзмененыНастройкиСклада", Объект.Ссылка, ЭтотОбъект);
КонецПроцедуры
В форме, которая должна обновиться:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыНастройкиСклада" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
Сравнивайте ИмяСобытия первым же условием. ОбработкаОповещения вызывается на каждое оповещение в сеансе. Тяжёлый код без проверки имени будет выполняться десятки раз в минуту.
Всплывающее сообщение пользователю
&НаКлиенте
Процедура ПоказатьИтог(КоличествоДокументов)
ПоказатьОповещениеПользователя(
"Обработка завершена",
,
СтрШаблон("Проведено документов: %1", Формат(КоличествоДокументов, "ЧГ=0")));
КонецПроцедуры
Первый параметр — заголовок, второй — навигационная ссылка (здесь пропущена), третий — пояснение. В новых версиях платформы у метода есть дополнительные параметры: картинка, статус важности и ключ уникальности. Ключ позволяет не плодить одинаковые плашки, а заменять старую новой.
Описание оповещения для асинхронных диалогов
ОписаниеОповещения — это не всплывающее сообщение, а «обратный вызов». Его передают в асинхронные методы (ПоказатьВопрос, ПоказатьВводЗначения, ОткрытьФорму), и платформа вызывает указанную процедуру, когда пользователь ответил.
&НаКлиенте
Процедура Удалить(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Удалить выбранные строки?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
УдалитьСтрокиНаСервере();
КонецЕсли;
КонецПроцедуры
Процедура-обработчик обязана быть экспортной. Без Экспорт платформа выдаст ошибку при попытке её вызвать.
Оповещение других пользователей
С сервера вызвать Оповестить нельзя: метод клиентский. Рабочие варианты:
- 💬 сообщение в «Обсуждения» через систему взаимодействия — пользователь увидит его, даже если открыт другой раздел;
- ⏰ напоминание БСП на нужную дату;
- 🔁 обработчик ожидания, который раз в N минут спрашивает сервер «есть ли новое» и показывает
ПоказатьОповещениеПользователя.
Третий вариант самый простой, но каждый опрос — вызов сервера. При 100 пользователях и интервале 60 секунд это 100 лишних вызовов в минуту. Ставьте интервал не меньше нескольких минут.
Диагностика: почему оповещение не приходит или окно не уходит
Сначала определите слой: обработчик старта, оповещение между формами или всплывающее сообщение. От этого зависит, где искать.
Журнал регистрации и отладчик
Для проблем при старте два главных инструмента:
- Журнал регистрации (
Администрирование → Обслуживание → Журнал регистрациив БП 3.0). Отберите события за время входа пользователя: ошибки обработчиков запуска записываются туда. - Отладка запуска. В конфигураторе запустите отладку и поставьте точку останова в
ПриНачалеРаботыСистемымодуля управляемого приложения. Так видно, какой вызов открывает окно.
В типовых конфигурациях на БСП сам модуль приложения короткий: он передаёт управление общим модулям подсистем. Ищите вызовы через глобальный поиск по имени нужного окна или текста сообщения.
Ускоряем запуск: что тормозит старт и как это лечить
Медленный вход почти всегда объясняется одним из четырёх факторов.
| Причина | Признак | Что делать |
|---|---|---|
| Много вызовов сервера в обработчиках старта | Задержка растёт с удалённостью от сервера | Собрать данные в один серверный вызов, вернуть структурой |
| Тяжёлые проверки при каждом входе | Долгое окно «Загрузка…» у всех | Перенести второстепенное в отложенный обработчик ожидания |
| Разросшийся кэш клиента | Тормозит у одного пользователя, у других нормально | Запуск с параметром /ClearCache |
| Тяжёлые формы начальной страницы | Задержка после появления главного окна | Убрать лишние формы с начальной страницы |
Отложенный запуск второстепенного
Всё, без чего пользователь может начать работу, выносите из ПриНачалеРаботыСистемы в однократный обработчик ожидания:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
ПодключитьОбработчикОжидания("ОтложенныеДействияПриЗапуске", 5, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтложенныеДействияПриЗапуске() Экспорт
ПроверитьНапоминанияНаСервере();
КонецПроцедуры
Третий параметр Истина делает обработчик однократным: он сработает через 5 секунд и больше не повторится. Процедура для обработчика ожидания не должна иметь параметров и должна быть доступна в том модуле, откуда её подключают.
Замер времени
В конфигураторе в режиме отладки включите Отладка → Замер производительности перед входом. Замер покажет строки кода, на которых тратится время, с долей в процентах. Это быстрее и точнее, чем гадать.
Параметры командной строки
Несколько параметров 1cv8 полезны при диагностике запуска:
/ClearCache— очистить клиентский кэш перед стартом;/DisableStartupMessages— подавить стартовые предупреждения платформы, например о несоответствии конфигурации базы данных;/C <строка>— передать строку параметра запуска, которую конфигурация читает черезПараметрЗапуска. В БСП так работают/C ЗавершитьРаботуПользователейи/C РазрешитьРаботуПользователей.
Пример ярлыка для администратора, который подключается к базе для обслуживания:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /ClearCache /DisableStartupMessages
/DisableStartupMessages убирает предупреждения платформы, но не устраняет их причину. Если база ругается на несоответствие конфигурации, изменения нужно применить в конфигураторе, иначе пользователи работают со старой структурой.
Доработка без снятия с поддержки
Окна при запуске в типовой конфигурации лучше менять через расширение. Основная конфигурация остаётся на поддержке, обновления ставятся без сравнения модулей.
Порядок действий:
- В конфигураторе создайте расширение (
Конфигурация → Расширения конфигурации). - Заимствуйте общий модуль подсистемы, которая показывает окно.
- Перехватите нужную процедуру аннотацией
&Вместоили&Послеи измените поведение. - Проверьте на копии базы, затем подключите расширение в рабочей.
Простое правило: отключать стоит только информационные окна. Проверки версии платформы, обновления базы и перемещённой копии защищают данные — их не трогайте.