01 мар. 2026 г.·7 мин чтения

Обработка ошибок в React-админке для понятных действий оператора

Обработка ошибок в React-админке должна показывать на экране валидацию, права доступа и конфликты, чтобы оператор сразу понимал, что исправить дальше.

Обработка ошибок в React-админке для понятных действий оператора

Почему спам всплывающих уведомлений не помогает оператору

Всплывающие уведомления хорошо подходят для мелкой обратной связи вроде «Сохранено» или «Скопировано». Админская работа устроена иначе. Оператор может одновременно обновлять данные клиента, исправлять отправку или подтверждать возврат, просматривая формы, таблицы и статусы. Если приложение на две секунды показывает красное уведомление и сразу прячет его, человек по-прежнему сталкивается с той же проблемой, но уже без контекста.

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

Одно уведомление также превращает очень разные проблемы в одно и то же расплывчатое предупреждение. «Сохранение не удалось» может означать пропущенное поле, отсутствие прав, устаревшие данные или конфликт правил с другой записью. Для этих случаев нужны разные исправления. Если приложение показывает одну и ту же красную плашку для всех, люди начинают хаотично менять данные и отправлять форму снова и снова, пока что-то не сработает.

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

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

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

Сначала назовите доменные ошибки

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

Доменная ошибка говорит оператору, какое правило остановило работу. «Почта не заполнена» — это не то же самое, что «Нельзя подтверждать возвраты свыше $500». В первом случае проблема в неверном вводе. Во втором — в блокировке по правам. Исправляют это по-разному, значит и в интерфейсе называть это нужно по-разному.

Сделайте список коротким и конкретным. Если оператор может исправить проблему прямо на экране, скажите, что именно поменять. Если он не может исправить ее сам, скажите это так же ясно.

В большинстве админ-экранов встречаются одни и те же категории. Неверный ввод означает, что данные нарушают правило, например не хватает ИНН или дата окончания раньше даты начала. Блокировка по правам означает, что у пользователя нет нужной роли или уровня согласования. Конфликт редактирования означает, что кто-то другой изменил запись после открытия экрана. Сбой системы означает, что не сработало приложение или сервис, и проблема не в действиях оператора.

Используйте простые названия, а не технические. «Отсутствует адрес доставки» звучит лучше, чем validation_error_104. «Требуется согласование» звучит лучше, чем forbidden. «Запись изменена другим пользователем» звучит лучше, чем 409 conflict.

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

Есть простой тест. Покажите название тому, кто пользуется экраном каждый день, и спросите: «Что бы вы сделали дальше?» Если он не может ответить сразу, название слишком размытое. Переформулируйте его, пока следующий шаг не станет очевидным.

Свяжите каждую ошибку с поведением экрана

Оператор не должен читать ошибку и потом искать проблему по всему экрану. Следующий шаг должен быть очевидным.

Если проблема находится в одном поле, оставьте сообщение рядом с этим полем. Если в заказе нужен email клиента или ИНН, отметьте это поле, объясните правило простыми словами и снимайте ошибку сразу, как только человек ее исправит. Всплывающее уведомление тут только мешает. Оно исчезает, а форма по-прежнему выглядит сломанной.

Если действие запрещено, заблокируйте именно его и объясните почему. Не давайте человеку нажать «Подтвердить выплату», а потом показывать расплывчатую ошибку вверху страницы. Поместите причину рядом с кнопкой или внутри диалога: «У вашей роли есть доступ на просмотр выплат, но нет права их подтверждать». Это экономит время и убирает повторные клики.

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

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

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

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

Постройте путь оператора шаг за шагом

Начните с одной реальной задачи, а не с полной карты приложения. «Подтвердить возврат» — хороший пример, потому что в нем есть деньги, правила и понятный финал. Один человек открывает заказ, проверяет причину, вводит сумму и подтверждает возврат.

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

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

Следующее действие должно быть описано простыми словами. «Возврат не прошел» — слабая формулировка. «Измените сумму до $48 или меньше» — лучше. «Попросите менеджера подтвердить этот возврат» — тоже лучше. Хорошая обработка ошибок сразу подсказывает оператору, что делать в ближайшие 10 секунд.

Проверьте поток на реальном обращении из очереди. Возьмите настоящий тикет на возврат, пройдите его и посмотрите, где люди останавливаются. Если они задумываются, открывают другую вкладку или спрашивают коллегу, что означает экран, значит в пути еще есть пробелы.

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

Показывайте валидацию там, где идет работа

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

Операторы работают быстро. Если форма не проходит проверку, а единственная обратная связь — красный баннер вверху, они начинают искать проблему вместо того, чтобы ее исправлять.

Показывайте сообщение рядом с полем или блоком, которому нужно внимание. Это особенно важно для рискованных данных: дат, количеств, цен, ID и значений, которые должны быть уникальными. Если правило можно проверить до отправки, делайте это сразу после того, как человек ненадолго остановился, пока он вводит данные.

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

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

Простой язык всегда лучше системных кодов. «Номер заказа должен состоять из 6 цифр, например 104382» помогает. ERR_VALIDATION_17 — нет. Короткий пример часто исправляет проблему быстрее, чем длинное правило.

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

Это убирает догадки. Человек видит, что сломалось, где именно это сломалось и что менять дальше. Один понятный шаг на экране всегда лучше, чем три всплывающих уведомления и неудачное сохранение.

Четко обрабатывайте блокировки по правам и ролям

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

Скрывайте действия, которые этой роли никогда не будут доступны. Если сотрудник поддержки никогда не может подтверждать возврат, не показывайте кнопку «Подтвердить» вообще. Кнопка, которая всегда ломается, приучает людей сначала нажимать, а потом читать.

Иногда правило зависит не только от роли, но и от состояния записи. В таком случае оставьте действие видимым, но отключите его и объясните правило рядом с элементом управления. «Повторное открытие недоступно, потому что бухгалтерия уже закрыла этот счет» — это ясно. Уведомление «Доступ запрещен» — нет.

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

Небольшой пример хорошо показывает разницу. Складской сотрудник может отменить заказ, пока он в статусе «В ожидании». Когда заказ переходит в «Упакован», то же действие должно отключиться и объяснить почему. Если супервайзер все еще может отменить его, это тоже нужно показать на экране.

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

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

Разрешайте конфликты редактирования без потери работы

Два человека могут открыть одну и ту же запись, внести разные изменения и оба считать, что уже почти сохранили правильную версию. Если ваше приложение только говорит «Сохранение не удалось» или «Запись изменена», оператору приходится гадать, что произошло, и заново вводить то, что он даже не помнит дословно.

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

Покажите различия, а не только ошибку

Здесь важны детали. Если номер телефона клиента изменился на сервере, пока оператор редактировал заметку к доставке, экран должен показать именно это. Отметьте, какие поля изменились, кто сохранил новую версию и когда это произошло. «Обновлено Майей в 14:32» быстро дает контекст.

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

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

Прежде чем оператор перезапишет чужое обновление, попросите понятное подтверждение. Пишите простыми словами. «Это заменит изменения, сохраненные 2 минуты назад Алексом» звучит лучше, чем общее предупреждение в модальном окне.

Свободный текст требует отдельного внимания. Заметки, комментарии и длинные описания — это места, где люди чаще всего теряют работу. Сохраняйте набираемый текст локально, пока человек печатает, чтобы обновление страницы, тайм-аут или неудачное сохранение ничего не стерли. Если запись на сервере изменилась, верните этот черновик и дайте объединить его, а не начинать заново.

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

Пример с заказом

Проверьте одну загруженную страницу
Начните с возвратов, согласований или изменений аккаунта и сначала уберите самое сильное трение.

Сотрудник открывает заказ и исправляет адрес доставки после звонка клиента. Заказ уже уехал утром, но сотрудник об этом еще не знает. Он нажимает «Сохранить» и ожидает, что форма примет новую улицу и почтовый индекс.

Слабый экран показывает красное уведомление «Обновление не удалось», а потом оно исчезает. Сотрудник не понимает, в чем проблема: в адресе, в его правах или в статусе заказа.

Лучший сценарий оставляет сотрудника на том же экране и объясняет правило там, где идет работа. Форма адреса остается видимой, введенное значение остается в поле, а рядом с областью сохранения появляется простое сообщение: «После отправки нельзя менять адрес доставки. Этот заказ уже отправлен».

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

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

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

Если заказ откроет менеджер, на экране может появиться еще одно действие: подтвердить обход правила. Но и оно должно объяснять риск простыми словами — например, возможную ошибку доставки или расходы на возврат. Менеджерам нужен контекст до того, как они что-то подтверждают.

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

Типичные ошибки, которые путают людей

Операторам не нужно больше уведомлений. Им нужен один очевидный следующий шаг. Одна из самых частых ошибок — складывать все сбои в одно и то же красное уведомление. Неверный номер телефона, заблокированное действие и конфликт записи — это не одна и та же проблема. Если они выглядят одинаково, люди снова нажимают «Сохранить» и надеются на удачу.

Сырой текст из бэкенда создает еще одну проблему. Сообщения вроде SQL constraint failed или 403 policy check denied нужны в логах, а не на основном экране. Большинство операторов не может ничего сделать с такой формулировкой, и не должно уметь. Используйте простой текст, который говорит, что пошло не так, где это произошло и что можно изменить.

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

Блокировки доступа слишком часто описывают туманно. «Доступ запрещен» лучше, чем ничего, но ненамного. Если у человека нет нужной роли или права, скажите, какое именно требуется. Тогда оператор поймет, стоит ли просить менеджера, переключать аккаунт или просто перестать пытаться.

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

Небольшие различия в формулировках действительно важны. Люди сохраняют спокойствие, когда экран говорит: «Цена должна быть больше нуля» или «Для этого действия вам нужен permission invoice_approve». Они застревают, когда приложение пишет только «Ошибка». Если человек может восстановиться меньше чем за 30 секунд, экран справился.

Быстрая проверка перед релизом

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

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

Начните с экранов, которыми люди пользуются каждый день. Создайте один неверный ввод, одну блокировку по правам, один конфликт редактирования и один настоящий сбой сервера. Затем посмотрите, что делает экран, не объясняя тестировщику, что происходит.

Используйте такой список перед релизом:

  • Когда приложение блокирует действие, может ли человек исправить проблему на том же экране или приложение заставляет его идти в запутанный обход?
  • Называет ли сообщение заблокированное действие простыми словами, например «Вы не можете подтвердить этот счет», а не расплывчатым «Запрос не выполнен»?
  • Если два человека редактируют одну запись, сохраняет ли экран конфликта все, что ввел оператор, чтобы он мог сравнить и повторить попытку?
  • Когда доступ блокируется ролью, меняет ли интерфейс и само действие, и объяснение, чтобы отключенная кнопка совпадала с причиной рядом?
  • Если система ломается так, что страница не может это объяснить, появляется ли все равно глобальное предупреждение с достаточной детализацией для поддержки или разработки?

Есть одно простое правило: каждая ошибка должна подсказывать следующий шаг. Исправить поле, запросить доступ, загрузить свежие данные или попробовать позже. Если оператору приходится гадать, экран еще не готов.

Небольшие изменения в формулировках тоже важны. «Email обязателен» — понятно. «Ошибка валидации» — нет. «Другой пользователь изменил этот заказ» — полезно. «Обнаружен конфликт» — недостаточно.

Проведите эту проверку с тем, кто не делал функцию. Если человек замирает больше чем на несколько секунд, перепишите сообщение или измените поведение экрана до релиза.

Следующие шаги для вашей команды

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

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

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

Не ограничивайтесь только инженерами. Подключите поддержку, операционную команду и продукт на 30 минут и задайте один вопрос для каждого состояния: «Что оператор должен сделать дальше?» Если никто не может быстро ответить, экран все еще скрывает настоящую проблему.

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

Если вашей команде нужен второй взгляд, Oleg Sotnikov на oleg.is может разобрать админские сценарии, роли и состояния ошибок, особенно если продукту еще нужен практичный план по delivery с AI. Такой внешний разбор часто уже достаточен, чтобы уменьшить путаницу без полной переписки продукта с нуля.

Часто задаваемые вопросы

Почему для ошибок в админке недостаточно всплывающих уведомлений?

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

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

Что такое доменная ошибка?

Доменная ошибка называет бизнес-правило, из-за которого задача остановилась. Она подсказывает оператору, что именно пошло не так, например Отсутствует адрес доставки, Требуется согласование или Запись изменена другим пользователем.

Это важно, потому что для каждого случая нужен свой следующий шаг. Расплывчатое сообщение вроде Сохранение не удалось скрывает правило и только тратит время.

Где должны появляться ошибки валидации?

Показывайте ее прямо рядом с полем или блоком, которому нужна правка. Если сумма слишком большая или не хватает ИНН, отметьте именно это поле, сохраните введенное значение и объясните правило простыми словами.

Если ошибок несколько, переведите фокус на первое проблемное поле и прокрутите его в видимую область. Так человек остается в потоке, а не начинает искать проблему по всей странице.

Как обрабатывать ошибки прав доступа?

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

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

Что должно показывать хорошее окно конфликта при редактировании?

Сохраняйте обе версии на экране. Покажите, что изменил оператор, что сейчас хранится на сервере, кто сохранил новую версию и какие поля конфликтуют.

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

Что делать после неудачного сохранения?

Сохраняйте все значения, которые человек ввел. Не очищайте форму и не возвращайте ее в пустое состояние после отказа сервера.

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

Когда использовать глобальное уведомление вместо ошибки рядом с полем?

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

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

Как писать ошибки, которыми люди действительно могут пользоваться?

Пишите, что пошло не так, где это произошло и что человек может сделать сейчас. Измените сумму до $48 или меньше работает лучше, чем Сохранение не удалось, потому что сразу указывает на исправление.

Не показывайте на главном экране технический текст и коды. Оператору не нужно расшифровывать 403 или SQL constraint failed, чтобы закончить работу.

Как проверить обработку ошибок до релиза?

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

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

С чего лучше начать, если я хочу улучшить обработку ошибок?

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

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