#std400¶
Информирование пользователя¶
1.¶
Доводите информацию до пользователя в следующих случаях:
- нужно вывести протокол о невозможности выполнить действие;
- нужно вывести протокол о выполнении действия;
- возникла ошибка при выполнении действия;
- действие успешно выполнено в форме, но это неочевидно;
- действие успешно выполнено без открытой формы, и это неочевидно.
1.1.¶
Ошибки проверки заполнения выводите в панели сообщений формы. Платформа использует такой подход, например, для наименований справочников.
1.1.А.¶
Проверка заполнения реквизитов объекта.
Выполняйте такую проверку вне транзакции записи объекта.
Примеры
- При записи объекта нужно выдать несколько сообщений о некорректном заполнении.
- При выполнении команды
Пересчитать ценынужно выдать ошибки пересчета по товарам документа.
Средства реализации:
- свойство
Проверка заполнения; - #std463: обработчик события
ОбработкаПроверкиЗаполнения; - для сообщений об ошибках используйте объект
СообщениеПользователю.
1.1.Б.¶
Проверка целостности объекта и связанных данных.
Выполняйте такую проверку в транзакции записи объекта.
Пример
Проверка остатков товаров на складе с выводом нескольких сообщений о нехватке.
Средства реализации:
- обработчики
ПередЗаписьюиПриЗаписи; - для сообщений об ошибках используйте объект
СообщениеПользователю; - для отмены записи устанавливайте
Отказ = Истина.
При этом:
- если ошибка исключительная и делает бессмысленными остальные блокирующие проверки, используйте
ВызватьИсключение(см. 1.3, пример №2); - если пользователь может быстро исправить ошибку ввода, не вызывайте исключение: установите
Отказ = Истинаи выведите сообщение пользователю; - минимизируйте проверки во время записи: в транзакции оставляйте только то, что действительно требует транзакционного контроля.
Пример
Подразделение сотрудника можно изменить в любой момент, и система не проверяет уже введенные документы.
Значит, проверка соответствия сотрудника и подразделения не транзакционная.
Ее нужно выполнять в ОбработкаПроверкиЗаполнения, до начала записи.
1.2.¶
Протокол выполненных действий можно выводить в отдельном поле формы.
Пример
Команда формы Прокомментировать расчет выводит исходные данные и промежуточные результаты расчета.
Средства реализации:
- отдельный реквизит формы для сообщений и управление видимостью поля;
- отдельная форма со списком сообщений.
1.3.¶
Информацию об ошибке выводите в отдельном диалоге. Такой подход платформа использует для системных ошибок: неуникальный код, неуникальная запись регистра сведений, незаданная дата документа и т.д.
Пример
- Команда формы
Заполнить скидку: не выбран контрагент; - Команда формы
Рассчитать зарплату: не задан курс валюты на текущий месяц.
Способ реализации:
- проверяйте значения в коде формы;
- используйте
ПоказатьПредупреждение; - если у пользователя есть вариант решения, используйте
ПоказатьВопрос.
Пример
Пример
- расчет кросс-курса валюты: не задан курс валюты или управленческая валюта;
- запрет записи документа в закрытом периоде;
- запрет записи объекта при некорректных правилах регистрации на узлах плана обмена.
Способ реализации: вызывайте исключение.
Правильно
Правильно
1.4.¶
Сообщайте об успешном выполнении действия в форме, если результат неочевиден. На любую команду должна быть понятная реакция. Не "проглатывайте" нажатие кнопки.
Используйте:
- блокирующий диалог
ПоказатьПредупреждение; - неблокирующее уведомление
ПоказатьОповещениеПользователя.
ПоказатьПредупреждение применяйте, когда нужно остановить пользователя и явно показать результат команды.
Примеры
- Команда
Проверить заполнение: ошибок не найдено. - Команда
Ограничить остатками на складе: количество проверено и не изменено. - Команда
Принять изменения: обработаны все 5 выбранных документов.
Способ реализации: ПоказатьПредупреждение.
Не выводите сообщение об очевидно успешном действии.
Например, не сообщайте об успехе команды Заполнить, если пользователь и так видит обновленный список товаров.
1.5.¶
Если форма не открыта, тоже сообщайте об успешном завершении неочевидного действия.
1.5.1.¶
Используйте ПоказатьОповещениеПользователя для уведомления о завершении.
Пример
1.5.2.¶
Используйте Состояние, чтобы показывать прогресс клиентской операции и сообщение о завершении.
После такого сценария обычно не нужен вызов ПоказатьОповещениеПользователя.
Пример
Для серверных операций не используйте Состояние для прогресса.
Иначе понадобятся частые вызовы сервера.
См. #std642: Длительные операции на сервере.
См. также¶
- #std585: Сообщения пользователю
- #std499: Перехват исключений в коде
- #std686: Работа с параметром "Отказ" в обработчиках событий
Проверки¶
#v8cs:event-heandler-boolean-param