Интерактивное взаимодействие и оповещения
Вывод информации пользователю
Предупреждение("Текст", Таймаут_число, "Заголовок окна сообщения"); //окно сообщения
Сообщить("1!", СтатусСообщения.Важное); //в блоке сообщений
Получение информации от пользователя во всплывающем окне
ВвестиЧисло();
ВвестиЗначение();
ВвестиСтроку();
ВвестиДату();
Вариации модальных окон (предыдущие примеры) использовать нежелательно, скорее всего от данной технологии будут отказываться. Лучше использование асинхронного взаимодействия. В частности, можно использовать процедуру “ПоказатьВопрос()” в сочетании с механизмом описания оповещения.
&НаКлиенте
Процедура СоздатьДоговоры(Команда)
Если ЭтотОбъект.Модифицированность Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьДоговорыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Документ должен быть записан. Записать и продолжить?", РежимДиалогаВопрос.ДаНет);
Иначе
//Если спрашивать не требуется вызываем процедуры завершения
СоздатьДоговорыЗавершение(КодВозвратаДиалога.Нет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДоговорыЗавершение(Результат, Параметры = Неопределено) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
//Действия выполняемые при положительном ответе пользователя
КонецЕсли;
//Действия выполняемые независимо от ответа пользователя
КонецПроцедуры
Обновление данных на форме
Оповещения
Статья про оповещения пользователю
Под термином "Оповещение" в одном контексте оповещения пользователю (ссылка выше), в другом - способ взаимодействия между формами в пределах одной сессии (это важно!). Для второго варианта в форме пишется обработчик оповещений, при генерации в форме-источнике запускается обработчик и в обработчике можно фильтровать события по источнику и названию. Типа шина межоконного клиентского взаимодействия в пределах одной сессии.
//В первой форме оповещаются все открытые формы
Оповестить("ИмяСобытия", Данные, "Форма1");
//В другой форме следует назначить обработчик события оповещения.
Процедура ОбработкаОповещения(Событие, Данные, Источник)
Если Событие = "ИмяСобытия" И Источник = "Форма1" Тогда
КонецЕсли;
КонецПроцедуры
И - нихера не заработало! А все потому, что процедуру ОбработкаОповещения нужно создавать не лапками, а через ПКМ на форме - События - ОбработкаОповещения либо указав созданную лапками процедуру в событии ОбработкаОповещения. И реально работает только если форма открыта.
Динамические списки: Элементы.ИмяДинамическогоСписка.Обновить()
Реквизиты формы: Методы ЭтаФорма.Прочитать() и ЭтаФорма.ОбновитьОтображениеДанных(). Метод Прочитать обновляет объект управляемой формы. Метод ОбновитьОтображениеДанных принудительно обновляет содержание элементов управления, особенно полезно, когда изменения значений реквизитов формы происходят вне самой формы. Это гарантирует, что каждый элемент в форме будет соответствовать последним изменениям данных в системе.
Динамическое обновление открытой формы. Методы в предыдущем разделе должны быть чем-то вызваны. Периодические задания исполняются только на сервере, для клиента не подходят. Шикарная статья про обработчики Понять и простить. С ностальгией вспомни школьные годы, метод обновления периодическими опросами сервера и вперед! Базовый код:
&НаКлиенте
Процедура ОболочкаОбработчика()
Элементы.СписокГородов.Обновить();
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьОжидание(Команда)
ПодключитьОбработчикОжидания("ОболочкаОбработчика", 10, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьОжидание(Команда)
ОтключитьОбработчикОжидания("ОболочкаОбработчика");
КонецПроцедуры
Это работает и в web клиенте. Не нашел способа получить список подключенных обработчиков, поэтому необходимы единые глазками-контролируемые правила создания и отключения обработчиков.
Важно: Если действие на сервере затратило меньше времени, чем таймаут, то обработчик строго по таймауту вызовет нужное, будто серверной приостановки и не было; а если больше, то "собьётся" и вызовется сразу по возвращении с сервера. При высокой нагрузке на базу стоит поизвращаться см. Динамические списки раздел Обновление данных.
Предположительный алгоритм обновления с динамическим изменением периода опроса (надо проверить).
Проблема: в случае большого количества клиентов со включенными обработчиками возможна нагрузка на сервер. Необходим ал
Вопросы к постановке задачи и алгоритму:
- Как определить, что количество клиентов стало "большим"