358 документов
← К списку

Информирование пользователя

страница

#std400

Область применения: управляемое приложение.

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

  1. Множество сообщений (протокол) по поводу невозможности выполнения того или иного действия. 
  2. Множество сообщений (протокол) по поводу выполнения того или иного действия.
  3. Информация об ошибке выполнения действия. 
  4. Информация об успешном выполнении того или иного действия при работе в форме. 
  5. Информация об успешном выполнении того или иного действия в условиях отсутствия формы.

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

А) Проверку заполнения реквизитов объекта следует выполнять вне транзакции записи объекта.

Пример: 

  • При попытке записать объект необходимо выдать ряд сообщений о его неправильном заполнении; 
  • При выполнении команды "Пересчитать цены" необходимо выдать сообщения об ошибках пересчета цен товаров, выбранных в документе.

Средства для реализации: 

Б) Проверку целостности объекта и связанных с ним данных следует выполнять в транзакции записи объекта.

Пример:

  • Проверка складских остатков товаров и выдача нескольких сообщений о нехватке товаров

Средства для реализации: 

  • Обработчики ПередЗаписью и ПриЗаписи
  • Для формирования сообщений об ошибках следует применять объект СообщениеПользователю
  • Для отказа от записи объекта устанавливать параметр Отказ = Истина

При этом

  • если ошибочная ситуация носит исключительный характер и делает бессмысленными все остальные проверки, которые выводят другие блокирующие сообщения, то следует использовать ВызватьИсключение (см. ниже п.1.3, пример №2). Но если пользователь может оперативно устранить эту ошибочную ситуацию (то есть это ошибка ввода данных пользователем, а не ошибка настройки системы), то следует устанавливать параметр Отказ в значение Истина и выводить сообщения пользователю.
  • следует минимизировать число проверок, которые выполняются во время записи объекта. Во время записи должны выполняться только проверки, которые носят транзакционный характер. Например, если подразделение сотрудника можно сменить в любой момент времени и при этом не проверяется, существуют ли уже документы, в которых выбран данный сотрудник, то также не имеет смысла проверять при записи документа соответствие выбранного сотрудника и заданного подразделения. Такую проверку следует выполнять в процедуре ОбработкаПроверкиЗаполнения до начала транзакции записи.

1.2. Информация о протоколе выполненных действий может выводиться в отдельном поле в форме.
 
Пример:

  • При выполнении команды формы "Прокомментировать расчет" выдать информацию об использованных при расчете данных и промежуточных результатах расчета

Средства для реализации:

  • Формирование сообщений в отдельном реквизите формы и изменение видимости поля в форме;
  • Открытие отдельной формы со списком сообщений.

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

Пример №1: 

  • При выполнении локальной команды формы "Заполнить скидку" необходимо сообщить, что еще не выбран контрагент 
  • При выполнении локальной команды "Рассчитать зарплату" необходимо сообщить, что в системе еще не задан курс валюты на текущий месяц.

Способ реализации: 

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

Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, НСтр("ru='В этом месяце еще не задан курс валюты. Использовать курс за прошлый месяц?'"), ...))

Пример №2: 

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

Способ реализации: 

  • Вызвать исключение. Например:

Правильно:

ВызватьИсключение НСтр("ru='Не установлена управленческая валюта в настройках программы.'");

Правильно:

Если Не ЗарегистрироватьИзмененияНаУзлахПлановОбмена() Тогда 
  ВызватьИсключение НСтр("ru = 'Не удалось зарегистрировать изменения на узлах планов обмена из-за некорректных правил регистрации. Обратитесь к администратору.'"); 
КонецЕсли;

1.4. Информация об успешном выполнении действия в форме должна выводиться в случае, если факт выполнения команды не очевиден для пользователя. Система должна выдавать ту или иную реакцию на любую команду. Например, неправильно "проглатывать" молча нажатие на кнопку формы. 

Доводить информацию до пользователя рекомендуется как при помощи блокирующего диалога (например, процедуры ПоказатьПредупреждение), так и при помощи метода ПоказатьОповещениеПользователя. Применять процедуру ПоказатьПредупреждение следует в том случае, если требуется "приостановить" работу пользователя и обратить его внимание на результат выполнения команды.

Пример:

  • При выполнении команды формы "Проверить заполнение" необходимо сообщить, что проверка ошибок не обнаружила;
  • При выполнении команды формы "Ограничить остатками на складе" необходимо сообщить, что количество товаров проверено и не было уменьшено;
  • При выполнении команды формы "Принять изменения" необходимо сообщить, что обработаны все пять выбранных документов.

Способ реализации: 

  • Использовать процедуру ПоказатьПредупреждение

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

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

1.5.1. Использовать процедуру ПоказатьОповещениеПользователя для уведомления о завершении действия.
Например, при выполнении стартовой обработки информационной базы сообщить, что обработка выполнена успешно:

ПоказатьОповещениеПользователя(
  НСтр("ru = 'Обновление на версию 2.0 успешно выполнено.'"), ,
  НСтр("ru = 'Переход на новую версию'"),
  БиблиотекаКартинок.Информация32);

1.5.2. Использовать процедуру Состояние при изменении состояния выполняемого действия на клиенте и после завершения действия (без последующего вызова ПоказатьОповещениеПользователя).
Например, при обработке нескольких файлов на клиенте сообщать: «Обработан файл 1 из 5»… «Обработан файл 4 из 5»… «Обработка файлов завершена»:

Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку (
  НСтр("ru = 'Обработан файл %1 из %2.'"), СчетчикФайлов, КоличествоФайлов),
  СчетчикФайлов/КоличествоФайлов*100);
…
Состояние(НСтр("ru = 'Обработка файлов успешно завершена.'"));

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

См. также