08.04.2025 Степан Радченко 5377
Управляемые формы 1С 8: не отображаются сообщ...

Содержание:


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


1.    Причины проблемы закрытия формы 1С

 

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

1. Асинхронная природа закрытия формы 1С. Закрытие формы 1С может выполняться асинхронно, из-за чего пользовательский интерфейс уже завершает обработку, когда вызывается метод отображения сообщений.

2. Контекст выполнения 1С. При закрытии форма 1С может находиться в контексте завершения пользовательской сессии или переходить в состояние недоступности для отображения изменений.

3. Приоритет завершения формы. Закрытие формы и завершение сеанса имеют более высокий приоритет, чем обработка визуальных элементов интерфейса 1С, включая сообщения.  


2.    Как работают сообщения в процедуре закрытия управляемой формы 1С 8 и решение проблемы

 

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

Пример проблемы:

Процедура ПриЗакрытии(Отказ)

    Сообщить("Форма закрывается.");

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

В данном случае сообщение не будет видно, так как управляемая форма 1С 8 начинает завершение своей работы до того, как сообщение отображается.


Решения проблемы:

Чтобы сообщения из процедур закрытия корректно отображались, можно использовать несколько подходов.

1. Отложенное закрытие формы через таймер

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

Процедура ПриЗакрытии(Отказ)

    Сообщить("Форма закрывается.");

    УстановитьТаймаут(1, ЭтотОбъект, "ЗакрытьФорму");

    Отказ = Истина;

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

 

Процедура ЗакрытьФорму()

    Закрыть();

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


2. Использование модальных сообщений

Модальные сообщения (СообщениеПользователю) отображаются до завершения любых действий формы:

Процедура ПриЗакрытии(Отказ)

    СообщениеПользователю("Форма закрывается.");

    Отказ = Ложь;

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

Однако важно учитывать, что чрезмерное использование модальных окон может ухудшить пользовательский опыт.


3. Перенос сообщений в процедуру завершения действий

Вместо использования ПриЗакрытии можно показать сообщения до фактического закрытия формы 1С:

Процедура ЗакрытьФормуССообщением()

    Сообщить("Форма закрывается.");

    Закрыть();

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

Теперь форму можно закрывать, вызывая метод ЗакрытьФормуССообщением.


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

Если требуется логировать информацию, но её отображение пользователю не обязательно, используйте метод ЗаписатьЖурналРегистрации:

Процедура ПриЗакрытии(Отказ)

    ЗаписатьЖурналРегистрации("Форма закрыта пользователем.", УровеньЖурналаРегистрации.Информация);

    Отказ = Ложь;

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

Сообщения в журнале регистрации остаются доступными для анализа разработчика.


5. Асинхронная обработка в режиме ожидания

Для корректного отображения сообщений можно использовать метод ожидания перед завершением формы:

Процедура ПриЗакрытии(Отказ)

    Сообщить("Форма закрывается.");

    ВызватьОжидание(1); // Задержка в секундах

    Отказ = Ложь;

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

Метод ВызватьОжидание позволяет дождаться завершения операций интерфейса.


Когда лучше избегать сообщений

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

  • Не злоупотребляйте сообщениями. Если форма закрывается штатно, дополнительные сообщения могут раздражать пользователя.
  • Сосредоточьтесь на логировании. Вместо сообщений в журнале сообщений лучше использовать логи для разработчика.

Заключение:

Проблема с неотображающимися сообщениями при закрытии формы возникает из-за приоритетов выполнения интерфейсных операций в программе 1С: Предприятие 8. Используйте предложенные методы для корректной обработки сообщений: отложенное закрытие, модальные окна или логирование. Это позволит улучшить пользовательский опыт и избежать путаницы при разработке.

 

Специалист компании ООО "Кодерлайн"

Степан Радченко

Наши проекты

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО «Союз Три» (Кондитерский дом Renardi)
ООО «Союз Три»

Отрасль:
Производство

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Бухгалтерский учет
- Банк и касса
- Расчеты с контрагентами
Налоговый ...

ООО "СЖД"
ООО "СЖД"

Отрасль:
Торговля, склад, логистика, транспорт

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Расчет зарплаты
Подбор кадров
Кадровый учет
Анализ кадрового состава...

Внедрение «1С:Зарплата и управление персоналом 8 КОРП» в компании «ПБК»
ООО «Партнер Бухгалтер Консультант»

Отрасль:
Бухгалтерские услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Интеграция продукта с базой данных оперативного учета Axapta;
- Доработка фу...

Внедрение 1С:Управление торговлей
ООО «Амперсенд»

Отрасль:
Оптовая торговля

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам;
- Управление отношениями с поставщиками;...

ООО "НЦКТ"
ООО "НЦКТ"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Управление нашей фирмой 8 ПРОФ

Взаиморасчеты с покупателями
Автоматизация бизнес-процессов...

Внедрение «1С:Бухгалтерия 8 ПРОФ» в компании «Мостехника»
ООО «Мостехника»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

Документооборот (ECM):
- Учет рабочего времени;
Управление персоналом и ка...

ЗАО «Инвестгеосервис»
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Объемно-календарное планирование производства Автоматизация бизнес-проце...

Внедрение ПП "1С:Управление небольшой фирмой 8 ПРОФ" в ООО «Шокостайл»
ООО «Шокостайл»

Отрасль:
Производство

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

Управление продажами, логистикой и транспортом (SFM, WMS, TMS):
- Планирование п...

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

Кадровый учет;
Расчет зарплаты;...

Московский филиал ООО «Авиакомпания «Икар»
Московский филиал ООО «Авиакомпания «Икар»

Отрасль:
Авиаперевозки

Внедренное типовое решение:
1С:Бухгалтерия КОРП

Бухгалтерский учет Производственные операции Регламентированная отчетнос...

ЗАО «Ламбумиз»
ЗАО «Ламбумиз»

Отрасль:
Производство картонной упаковки

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

- Маркетинг;
- Продажи;
- Планирование закупок;
- Закупки;
- Регламенти...

ООО "АСТАРМЕДИКА КЛИНИКА МИКРОХИРУРГИИ ГЛАЗА"
ООО "АСТАРМЕДИКА КЛИНИКА МИКРОХИРУРГИИ ГЛАЗА"

Отрасль:
Деятельность больничных организаций

Внедренное типовое решение:
БИТ:Управление медицинским центром 8

- Управление отношениями с клиентами (CRM)
- Делопроизводство
- Ведение но...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение