Перейти к содержанию
#std400

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

1.

Доводите информацию до пользователя в следующих случаях:

  • нужно вывести протокол о невозможности выполнить действие;
  • нужно вывести протокол о выполнении действия;
  • возникла ошибка при выполнении действия;
  • действие успешно выполнено в форме, но это неочевидно;
  • действие успешно выполнено без открытой формы, и это неочевидно.
1.1.

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

1.1.А.

Проверка заполнения реквизитов объекта.

Выполняйте такую проверку вне транзакции записи объекта.

Примеры

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

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

1.1.Б.

Проверка целостности объекта и связанных данных.

Выполняйте такую проверку в транзакции записи объекта.

Пример

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

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

При этом:

  • если ошибка исключительная и делает бессмысленными остальные блокирующие проверки, используйте ВызватьИсключение (см. 1.3, пример №2);
  • если пользователь может быстро исправить ошибку ввода, не вызывайте исключение: установите Отказ = Истина и выведите сообщение пользователю;
  • минимизируйте проверки во время записи: в транзакции оставляйте только то, что действительно требует транзакционного контроля.

Пример

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

1.2.

Протокол выполненных действий можно выводить в отдельном поле формы.

Пример

Команда формы Прокомментировать расчет выводит исходные данные и промежуточные результаты расчета.

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

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

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

Пример

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

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

  • проверяйте значения в коде формы;
  • используйте ПоказатьПредупреждение;
  • если у пользователя есть вариант решения, используйте ПоказатьВопрос.

Пример

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

Пример

  • расчет кросс-курса валюты: не задан курс валюты или управленческая валюта;
  • запрет записи документа в закрытом периоде;
  • запрет записи объекта при некорректных правилах регистрации на узлах плана обмена.

Способ реализации: вызывайте исключение.

Правильно

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

Правильно

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

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

Используйте:

  • блокирующий диалог ПоказатьПредупреждение;
  • неблокирующее уведомление ПоказатьОповещениеПользователя.

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

Примеры

  • Команда Проверить заполнение: ошибок не найдено.
  • Команда Ограничить остатками на складе: количество проверено и не изменено.
  • Команда Принять изменения: обработаны все 5 выбранных документов.

Способ реализации: ПоказатьПредупреждение.

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

1.5.

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

1.5.1.

Используйте ПоказатьОповещениеПользователя для уведомления о завершении.

Пример

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

Используйте Состояние, чтобы показывать прогресс клиентской операции и сообщение о завершении. После такого сценария обычно не нужен вызов ПоказатьОповещениеПользователя.

Пример

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

Для серверных операций не используйте Состояние для прогресса. Иначе понадобятся частые вызовы сервера. См. #std642: Длительные операции на сервере.

См. также
Проверки

#v8cs:event-heandler-boolean-param

Источник

https://its.1c.ru/db/v8std#content:400