Перейти к содержимому

Как задать вопрос пользователю в обработчике события формы

  • автор:

Обработка событий в модулях

В рамках модуля вы можете настроить обработку различных событий системы.

Обработчик события запускает определённое действие в системе после того, как событие произошло. Это удобно при разработке комплексных модулей. Например, обработчик может запускать бизнес-процесс, настроенный внутри модуля, при изменении элемента приложения.

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

Действие Передача сообщения в сервис доступно только в ELMA365 On-Premises.

Для того, чтобы создать обработчик событий:

  1. Перейдите в Администрирование > Модули .
  2. Наведите курсор на модуль и нажмите на появившийся значок шестерёнки.
  3. Перейдите на вкладку Обработка событий .
  4. Нажмите кнопку +Обработчик и задайте необходимые настройки в открывшемся окне.

events_processing-1

  • Название * — укажите название обработчика.
  • Домен события — выберите область, события в которой будет отслеживать обработчик. Вы можете выбрать следующие домены:
    • Все события ;
    • Элементы приложения — в появившемся поле Фильтр типа объекта выберите приложение, события которого будут обрабатываться. Если не выбирать приложение, модуль будет отслеживать события всех существующих в системе приложений. Обратите внимание, если приложение выбрано, невозможно экспортировать модуль. Это связано с ограничением на выгрузку модуля, связанного с приложением, которое не является частью модуля;
    • Задачи — обработчик будет фиксировать события, связанные с созданием, изменением, отменой или завершением активностей CRM. В появившемся поле Фильтр типа задачи укажите тип активности, изменения в которой будут отслеживаться модулем: Все задачи CRM , Звонок , Письмо , Вебинар , Встреча . Обратите внимание, домен доступен только при подключённом платном решении ELMA365 CRM;
    • Приложения ;
    • Файлы ;
    • Директории ;
    • Модули ;
    • Настройки ;
    • Пользователи .

    Домен события Файлы доступен только в ELMA365 On-Premises.

    • Событие — выберите событие, после которого будет запускаться обработчик. Список событий различается в зависимости от выбранного домена. Списки доступных событий для каждого домена приведены ниже.
    • Тип обработчика * — выберите действие, которое будет совершаться при выполнении события:
      • Запуск скрипта — выполняет заданный сценарий;
      • Запуск процесса — запускает бизнес-процесс, созданный в модуле на вкладке Процессы ;
      • Передача сообщения в сервис — отправляет сообщение во внешний микросервис. Действие доступно только в ELMA365 On-Premises.

      Вы можете привязать к обработчику событий только созданный внутри модуля процесс или скрипт.

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

      events_peocessing-2

      1. Опубликуйте обработчик.

      Таким образом в пользовательском модуле можно добавить несколько обработчиков событий. Например, при смене статуса элементов приложения будет запускаться бизнес-процесс обработки заказа. При этом с помощью сценария или шлюза можно настроить разные ветки хода процесса в зависимости от статуса элемента.

      Доступные события системы

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

      Для домена Все события доступна одна опция — Все события системы .

      Для домена Элементы приложений вы можете выбрать событие:

      • Добавление комментария к элементу приложения;
      • Изменение статуса элемента приложения;
      • Создание элемента приложения;
      • Удаление элемента приложения;
      • Обновление элемента приложения.

      Если для событий создания, обновления или удаления элемента в поле Фильтр типа объекта указано приложение, то в скрипт добавляется свойство EventContext . Оно содержит строго типизированные данные элемента приложения и соответствующего события.

      Для домена Задачи доступны события:

      • Отмена задачи;
      • Завершение задачи;
      • Создание задачи;
      • Обновление задачи.

      Для домена Приложения доступны следующие события:

      • Экспорт данных приложения;
      • Импорт данных приложения.

      Для домена Файлы доступны события:

      • Добавление комментария к файлу;
      • Создание файла;
      • Удаление файла;
      • Изменение прав доступа к файлу;
      • Изменение файла.

      Для домена Директории вы можете выбрать события:

      • Создание директории;
      • Удаление директории;
      • Изменение прав доступа к директории;
      • Изменение директории.

      Для домена Модули доступны следующие события:

      • Выключение модуля;
      • Включение модуля;
      • Установка модуля;
      • Обновление модуля.

      Для домена Настройки предусмотрено одно событие — Изменение дополнительных параметров .

      Для домена Пользователи можно указать событие:

      • Ошибка авторизации пользователя;
      • Успешная авторизация пользователя;
      • Создание пользователя;
      • Удаление пользователя;
      • Обновление пользователя;
      • Превышение количества попыток входа;
      • Ошибка аутентификации пользователя;
      • Успешная аутентификация пользователя;
      • Выход пользователя из системы;
      • Изменение статуса пользователя;
      • Запрет доступа к данным.

      Как отменить действие обработчика

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

      Кроме того, при необходимости вы можете удалить существующий обработчик событий. Для этого на вкладке Обработка событий отметьте один или несколько обработчиков в списке. Нажмите на кнопку Удалить , появившуюся в правом верхнем углу страницы.

      Как задать вопрос пользователю в обработчике события формы

      Т.е. нужно перед записью проверить соответствие реквизитов определенной схеме и задать вопрос. Если пользователь подтвердит, то записать, если не подтвердит — то прервать запись.

      Как это сделать в новой парадигме модальности? Блокировать интерфейс не получится, имхо.

      ПоказатьВопрос()
      (1) тут возникает косяк со стандартной кнопкой «записать и закрыть»

      (1) (2) Но как модально обработать? Т.е. я делаю возврат из ПередЗаписью и блокирую интерфейс.
      Потом, когда я словлю результат вопроса, куда мне передать управление?

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

      (4) а если пользователь нажмет не закрыть, а записать? есть же событие ПередЗаписью, на это заточенное как раз.

      или нужно в обработчике вызывать заново метод Записать, но уже не дергать свое событие, если ответ получен?

      (5) я привел в скобках «(как пример)». Используй обработчик тот, который больше подходит. В моем примере, как спросить что-то перед закрытием.

      (7) немного не понятно. Я хочу словить событие перед записью, т.е. оно может быть связано и с закрытием формы и с нажатием записать, точка входа в него одна — ПередЗаписью.

      Есть обработчик формы у клиента передзапись, там выдаешь вопрос модальный, если нет то отказ в истину и всё

      Технические вопросы

      Например в форме добавления пользователя на какое-нибудь поле прицепить собственный код на JavaScript (На любое удобное событие). Возможно ли такое и как это реализовать? Если кто делал свою форму добавления пользователя поделитесь пожалуйста опытом и исходниками.

      Сумма оценок: —
      В ответ на Gennady Ivanov

      Re: Как прицепить обработчик события на форме

      от Vadim Dvorovenko — суббота, 22 октября 2011, 00:52

      Все формы в moodle генерятся при помощи специального объекта-формы в него добавляются поля разных типов. Исходник библиотек формы в moodle/lib/form. Там же модули дополнительных элементов. Выбираете наиболее похожий на то, что Вам нужно, смотрите на остальные как на пример, дописываете модуль нужного элемента формы, добавляете его в свою форму.

      Сумма оценок: —
      Постоянная ссылка Показать сообщение-родителя Ответить
      В ответ на Vadim Dvorovenko

      Re: Как прицепить обработчик события на форме

      от Gennady Ivanov — вторник, 25 октября 2011, 16:27

      В общем смысл понятен, буду пробовать, спасибо.

      Сумма оценок: —
      Постоянная ссылка Показать сообщение-родителя Ответить

      • ◄ Отслеживание версий учебных материалов в Moodle 2
      • moodle за ISA 2006 — не работает текстовый редактор в IE ►

      Как задать вопрос пользователю в 1С и обработать ответ

      В этой небольшой статье мы рассмотрим три способа, как в 1С показать пользователю вопрос.

      В 1С Предприятие есть возможность средствами встроенного языка показать пользователю окно с вопросом и несколькими вариантами ответа, например “Вы уверены, что хотите уничтожить все документы с начала времен?” и ответы “Да, Нет, Я подумаю, Отмена”.

      Метод «Вопрос»

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

      &НаКлиенте Процедура КомандаВопрос(Команда) Ответ = Вопрос("Вы видите текст вопроса?", РежимДиалогаВопрос.ДаНет); Сообщить("Ваш ответ "+ Ответ); КонецПроцедуры 

      Но, как всегда, есть нюансы. У этого метода есть несколько необязательных параметров, такие как таймаут, кнопка по умолчанию, заголовок, и кнопка таймаута (на ней будут отображаться оставшиеся секунды до таймаута). Кроме того, помимо системных режимов диалога (“Да/Нет”, “Ок/Отмена” и других), разработчик может задать свой список значений с вариантами ответа на вопрос.

      &НаКлиенте Процедура ВопросИзСписка(Команда) СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить("Синий", "Синий"); СписокКнопок.Добавить("Зеленый", "Зеленый"); СписокКнопок.Добавить("Красный", "Красный"); Ответ = Вопрос("Какой провод перерезать?", СписокКнопок, 20,,,"Красный"); Сообщить("Вы перерезали "+ Ответ + " провод"); КонецПроцедуры 

      Ну и вишенка на торте. Мало кто знает, а еще меньше тех кто пользуется – вопрос можно задавать в виде форматированной строки. Попробуйте, вдруг вам понравится:)

      1С вопрос пользователю

      &НаКлиенте Процедура ВопросСРаскраской(Команда) СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить("Синий", "Синий"); СписокКнопок.Добавить("Зеленый", "Зеленый"); СписокКнопок.Добавить("Красный", "Красный"); ФорматированнаяСтрока = Новый ФорматированнаяСтрока("Какой провод перерезать? Варианты: ", Новый ФорматированнаяСтрока("Синий; ", , WebЦвета.Синий), Новый ФорматированнаяСтрока("Зеленый; ", , WebЦвета.Зеленый), Новый ФорматированнаяСтрока("Красный.", , WebЦвета.Красный)); Ответ = Вопрос(ФорматированнаяСтрока, СписокКнопок, 20,,,"Красный"); Сообщить("Вы перерезали "+ Ответ + " провод"); КонецПроцедуры 

      Метод ПоказатьВопрос

      Так как 1С планомерно отходит от модальности и синхронных методов, которые блокируют интерфейс и/или работу программы, рассмотрим асинхронный метод ПоказатьВопрос. Помимо всех параметров, рассмотренных выше, данный метод имеет еще один параметр: ОписаниеОповещенияОЗавершении. В этот параметр передается специальный объект с типом ОписаниеОповещения. Чтобы не мучиться и не писать в ручную, можно воспользоваться меню рефакторинга и преобразовать вызов.

      Кликаем правой кнопкой на методе Вопрос в коде, в контекстном меню выбираем Рефакторинг / Нерекомендуемые синхронные вызовы / Преобразовать вызов. И платформа сама разделит наш метод на ПоказатьВопрос и обработку оповещения.

      1С Вопрос - рефакторинг вызова

      &НаКлиенте Процедура КомандаВопрос(Команда) Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("КомандаВопросЗавершение", ЭтотОбъект), "Вы видите текст вопроса?", РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура КомандаВопросЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Ответ = РезультатВопроса; Сообщить("Ваш ответ "+ Ответ); КонецПроцедуры 

      Разумеется, получившийся код можно и нужно “причесать” – можно вынести описание оповещения в отдельную переменную, добавить дополнительные параметры, убрать ставший лишним код и т.д.

      Метод ВопросАсинх

      Начиная с версии 8.3.18 в платформе 1С появились новые асинхронные методы, работа с которыми во многом похожа на asinc / await в JavaScript. Мы объявляем метод с ключевым словом Асинх, и в этом методе становится возможным использовать асинхронные методы. Перед вызовом метода ВопросАсинх мы указываем еще одно ключевое слово “Ждать”. Сам по себе метод ВопросАсинх не останавливает выполнение кода, и если не указать “Ждать”, то весь код ниже будет выполнен, и результат может быть не тот, что ожидался. По большому счету, это синтаксический сахар, призванный упростить код и облегчить жизнь разработчику.
      Попробуйте убрать ключевое слово “Ждать” и сравните поведение программы ��

      &НаКлиенте Асинх Процедура КомандаВопросАсинх(Команда) Ответ = Ждать ВопросАсинх("Вы заметили, что это асинхронный вопрос?", РежимДиалогаВопрос.ДаНет,,,"А ведь это асинхронный вопрос!"); Сообщить("Ваш ответ "+ Ответ); КонецПроцедуры 

      В остальном, этот метод имеет все те же параметры, что и метод “Вопрос”, который мы рассмотрели в самом начале.

      Ответы

      В зависимости от того, как мы задали параметр “Кнопки”, ответы могут быть самые различные. Если использовать РежимДиалогаВопрос, то у ответа тип значения будет КодВозвратаДиалога. Если же указать кнопки в виде списка значений, то в поле Ответ будет содержаться значение, привязанное к соответствующей кнопке. Типы значений в списке кнопок можно задавать самые различные. А следовательно, и логику обработки ответа можно реализовать самую разную, в зависимости от полученного значения и его типа.

      &НаКлиенте Процедура ОтветыРазныхТипов(Команда) СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить(2, "2"); СписокКнопок.Добавить("Привет", "Привет"); //В конфигурации должен быть справочник Организации с предопределенным элементом ОсновнаяОрганизация СписокКнопок.Добавить(ПредопределенноеЗначение("Справочник.Организации.ОсновнаяОрганизация"), "Справочник"); СписокКнопок.Добавить(ТекущаяДата(), "Сегодня"); СписокКнопок.Добавить(КодВозвратаДиалога.Пропустить, "Пропустить"); Ответ = Вопрос("какой тип значения у выбранного ответа?", СписокКнопок); Если ТипЗнч(Ответ) = Тип("Число") Тогда Ответ = Ответ*2; ИначеЕсли ТипЗнч(Ответ) = Тип("Строка") Тогда Ответ = Ответ + " программист 1С!"; ИначеЕсли ТипЗнч(Ответ) = Тип("СправочникСсылка.Организации") Тогда ОткрытьЗначение(Ответ); ИначеЕсли ТипЗнч(Ответ) = Тип("Дата") Тогда Ответ = НачалоДня(Ответ); Иначе //Код ответа Пропустить, ничего не делаем КонецЕсли; Сообщить("Тип значения " + ТипЗнч(Ответ) + "; значение " + Ответ); КонецПроцедуры 

      Пользуйтесь асинхронными методами, задавайте пользователям коварные вопросы, и до новых встреч!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *