Вызов окна ошибки в 1С для проверки и отладки: способы и настройка
Содержание
Чтобы вывести окно с ошибкой в 1С, нужно в коде вызвать исключение оператором ВызватьИсключение "Текст ошибки"; или спровоцировать реальный сбой (деление на ноль, обращение к несуществующему реквизиту). Окно появится в любом клиенте: тонком, толстом и веб. Различается только то, как выглядит сообщение и сколько технических подробностей в нём видно.
Нужно это разработчику, администратору и внедренцу: проверить обработку ошибок в своём коде, показать сотруднику, как выглядит сбой, снять скриншот для обращения в поддержку. Ниже: способы по режимам, настройка подробного вывода, разбор самого окна и что делать, когда окна нет.
Все эксперименты с искусственными ошибками делайте в копии базы или в тестовой базе. В рабочей базе сбой посреди записи документа может оставить данные в неполном состоянии.
Зачем вызывать ошибку специально
Обычно ошибки сами находят пользователя в самый неудобный момент. Но есть задачи, где окно нужно получить по своей воле:
- 🧪 Проверка своего кода. Вы написали обработку
Попытка … Исключениеи хотите убедиться, что она ловит именно то, что нужно. - 📸 Подготовка инструкции. Для регламента или обучения нужен скриншот реального окна ошибки.
- 🔍 Проверка настроек журнала. Хочется увидеть, попадёт ли сбой в журнал регистрации и в технологический журнал.
- 🧑💻 Воспроизведение чужой проблемы. Пользователь прислал текст, а вам нужно получить такое же сообщение на своей стороне.
- 🛡 Проверка прав. Узнать, что увидит пользователь с ограниченной ролью, если операция ему недоступна.
Способы вызвать окно с ошибкой в 1С
Способов несколько. От безопасного к более жёсткому:
| Способ | Когда подходит | Риск |
|---|---|---|
ВызватьИсключение в коде | Нужно своё сообщение и полный контроль | Минимальный |
| Ошибка в запросе или обращение к пустому значению | Нужна «настоящая» системная ошибка | Низкий, если нет записи в базу |
| Отказ в доступе (роль без прав) | Проверить, что видит пользователь | Низкий |
Принудительный сбой записи (контроль в ПередЗаписью) | Проверить откат транзакции | Средний |
| Закрытие соединения с сервером | Проверить реакцию клиента на обрыв | Высокий, только в тесте |
Способ 1. Исключение в коде
Самый чистый вариант. В конфигураторе откройте модуль нужной формы или внешней обработки и добавьте процедуру:
&НаКлиенте
Процедура ПоказатьОшибку(Команда)
ВызватьИсключение "Тестовая ошибка: проверка вывода окна";
КонецПроцедуры
Повесьте её на кнопку формы. При нажатии 1С остановит выполнение и покажет окно с этим текстом. Если вызов идёт из серверной процедуры, клиент всё равно получит окно: сообщение «поднимется» от сервера к клиенту.
Хотите увидеть, как выглядит системная ошибка с кодом, а не ваш текст? Тогда нужен способ 2.
Способ 2. Системная ошибка
Несколько простых провокаций, которые не пишут в базу:
// деление на ноль
Результат = 1 / 0;
// обращение к реквизиту у пустого значения
Значение = Неопределено;
Имя = Значение.Наименование;
// вызов несуществующей процедуры
НесуществующаяПроцедура();
Каждая из них даёт своё стандартное сообщение. Так вы получаете окно, максимально похожее на то, что видят пользователи при реальных сбоях.
Способ 3. Проверка прав
Создайте тестового пользователя с одной ролью, у которой нет доступа к нужному объекту, и войдите под ним. Попытка открыть справочник или провести документ даст окно об отказе в доступе. Это самый безобидный способ показать «боевую» ошибку без единой строки кода.
Способ 4. Откат записи
Если нужно проверить поведение транзакции, в обработчике ПередЗаписью объекта добавьте условие с ВызватьИсключение. Запись отменится целиком, а окно покажет вашу причину. Только не оставляйте этот код в рабочей конфигурации.
Какой способ выбрать
Если нужен только скриншот для инструкции, хватит способа 3: ни кода, ни риска для данных. Для проверки собственной обработки ошибок берите способ 1, он даёт точный текст и предсказуемое место срабатывания.
Когда важно увидеть именно системное сообщение платформы, а не своё, используйте способ 2. Он ближе всего к тому, что пользователь встретит в жизни.
Способ 4 нужен редко: например, чтобы убедиться, что при сбое в середине проведения ни одна запись не осталась в базе. Проверяйте результат после отката: откройте список документов и регистры, которые затрагивало проведение. Если часть движений сохранилась, значит, исключение возникло вне транзакции, и логику записи нужно пересмотреть.
Как ведёт себя окно в тонком, толстом и веб-клиенте
Сама логика одна, различается подача.
| Клиент | Что увидит пользователь | Особенности |
|---|---|---|
| Тонкий | Окно «Ошибка» с текстом и кнопкой для подробностей | Основной режим работы, в нём ошибки встречаются чаще всего |
| Толстый | Аналогичное окно, текст часто шире | Показывает больше серверных деталей, используется в основном для разработки |
| Веб-клиент | Окно внутри страницы браузера | Дополнительно смотрите консоль браузера (клавиша F12) |
В веб-клиенте часть сбоев происходит не в 1С, а в самом браузере или на веб-сервере: обрыв связи, истёкшая сессия, блокировка скриптов. Тогда окна 1С вы не получите, а увидите системную страницу браузера или сообщение публикации. Для таких случаев смотрят журнал веб-сервера и консоль разработчика браузера.
💡 Если нужно сравнить поведение клиентов, запустите одну и ту же базу из тонкого клиента и по ссылке в браузере и нажмите ту же кнопку с ошибкой. Разница видна сразу.
Как настроить подробный вывод ошибок
По умолчанию пользователь видит краткий текст. Подробности можно получить тремя путями.
Кнопка подробностей в окне
В окне ошибки есть кнопка, которая раскрывает техническую часть: цепочку вызовов, имена модулей, номера строк. Нажмите её перед тем, как делать скриншот. Без этого специалисту поддержки почти нечего анализировать.
Своя обработка исключения
Если вы пишете код, получите подробный текст сами и отдайте его туда, куда нужно:
Попытка
ВыполнитьДействие();
Исключение
Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Кратко = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации("МояОшибка", УровеньЖурналаРегистрации.Ошибка,,, Подробно);
ВызватьИсключение Кратко;
КонецПопытки;
Подробный текст идёт в журнал регистрации, а пользователю достаётся короткое, понятное сообщение. Это правильная схема для рабочей конфигурации.
Запуск из конфигуратора с отладкой
Запустите базу командой Отладка → Начать отладку (клавиша F5). Теперь при ошибке выполнение остановится в отладчике на проблемной строке, и вы увидите значения переменных. Чтобы отладчик останавливался на каждом исключении, включите Отладка → Остановка по ошибке и отметьте нужные варианты в открывшемся окне.
Для отладки на сервере или в веб-клиенте нужно подключаться к уже запущенному сеансу. Режим отладки при этом задаётся параметром запуска или настройкой публикации. Точные параметры зависят от версии платформы, проверяйте по документации к вашему релизу.
Типичные ошибки, которые можно воспроизвести для теста
Если вам нужно набор «образцов» для обучения или проверки, подойдут такие сценарии:
- 📛 Поле не найдено. Обращение к реквизиту, которого нет у объекта. Показывает, как выглядит ошибка после неудачного обновления.
- 🔢 Преобразование типа. Попытка превратить текст в число. Ошибка знакома всем, кто работал с загрузкой из Excel.
- 🔒 Недостаточно прав. Тестовый пользователь без нужной роли.
- 🗃 Объект заблокирован. Откройте один документ в двух сеансах и запишите в обоих.
- 🌐 Сервер недоступен. Только в тестовой среде: остановите службу сервера и нажмите любую кнопку в открытом клиенте.
Для каждого сценария заранее решите, что вы хотите проверить: текст, поведение формы или запись в журнал. Иначе эксперимент превращается в набор случайных окон.
Что делать, если окно с ошибкой не появляется
Бывает наоборот: действие не работает , а окна нет. Причин обычно три.
- Ошибка перехвачена. В коде стоит
Попытка … Исключениебез повторногоВызватьИсключениеи без записи в журнал. Сбой съеден. Откройте обработчик и добавьте вывод. - Ошибка в фоновом задании. Фоновое или регламентное задание выполняется без пользовательского окна. Результат ищите в журнале регистрации и в карточке задания.
- Сообщение показано, но не там. Короткие тексты через
Сообщитьпопадают в панель сообщений внизу окна. Если панель скрыта, их не видно. Включите её в настройках интерфейса клиента.
Если все три варианта исключены, проверьте журнал регистрации. Он фиксирует ошибку, даже если пользователь её не заметил.
Скрытая панель сообщений, на удивление, самая частая причина «ничего не происходит». Проверьте её первой.
Как читать окно ошибки
Когда окно получено, из него нужно вытащить максимум пользы.
Что смотреть в первую очередь
- 📝 Текст в первой строке. Это суть: «Деление на ноль», «Поле объекта не обнаружено», «Нет прав».
- 📍 Имя модуля и номер строки. Показывают, где именно сработало. Для типовой конфигурации модуль часто принадлежит БСП, а ваш код вызывает его косвенно, поэтому ищите свою строку в цепочке выше.
- 🔗 Цепочка вызовов. Читайте снизу вверх: нижняя строка — откуда всё началось, верхняя — где упало.
- 🖥 Где произошло. Клиент или сервер. От этого зависит, куда смотреть: в журнал клиента или в серверный журнал.
Что делать с полученными данными
- Скопируйте текст целиком, а не фото экрана. Текст ищется, скриншот нет.
- Запишите, что делали за минуту до ошибки.
- Найдите запись с тем же временем в журнале регистрации.
- Если ошибка повторяется, найдите минимальные шаги воспроизведения.
В обращении в поддержку этих четырёх пунктов достаточно, чтобы специалист не задавал уточняющих вопросов.
Безопасность: что нельзя показывать пользователям
Подробное окно ошибки полезно разработчику и вредно в руках постороннего. В нём бывают имена модулей, структура запросов, пути на сервере, иногда фрагменты данных.
Поэтому:
- 🔐 не оставляйте в рабочей конфигурации тестовые
ВызватьИсключение, они однажды сработают у реального пользователя; - 🧾 не вставляйте в текст ошибки пароли, логины и содержимое строк подключения;
- 📤 не публикуйте скриншоты с подробностями на открытых форумах без проверки, нет ли там имён серверов, пользователей и данных контрагентов;
- 👥 в рабочей базе показывайте пользователю краткое понятное сообщение, а подробности пишите в журнал;
- 🧪 отладку и остановку по ошибке включайте только на тестовых стендах.
Перед любым экспериментом в рабочей базе сделайте резервную копию и согласуйте работы по регламенту организации.
Частые вопросы
Можно ли вызвать окно ошибки без программирования?
Чем `ВызватьИсключение` отличается от `Сообщить`?
Сообщить просто добавляет строку в панель сообщений, а выполнение продолжается.