Как убрать системное окно с кнопкой «Подробно» при отмене записи в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в среде «1С:Предприятие 8.3» программисты часто сталкиваются со следующей ситуацией: в коде (например, в подписке на событие ПередЗаписью или ПриЗаписи) устанавливается флаг Отказ = Истина и выводится понятное пользователю сообщение. Однако вслед за ним платформа выводит собственное системное окно с текстом «Не удалось записать объект...» и кнопкой «Подробно». Это окно часто путает конечных пользователей и выглядит избыточным.

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

Выясним причину появления кнопки «Подробно»

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

Рассмотрим основные факторы, которые влияют на это поведение:

  1. Режим отладки в конфигураторе. Если вы запускаете клиентское приложение через F5, кнопка будет присутствовать всегда.
  2. Параметры запуска сервера. Если сервер 1С запущен с ключом -debug, платформа может транслировать подробности об ошибках транзакции даже тем клиентам, которые запущены без отладки.
  3. Настройки пользователя в режиме «Предприятие». Существует специфическая настройка в интерфейсе, которая принудительно включает отображение технических деталей.
  4. Неправильная привязка сообщения. Если сообщение не привязано к объекту или полю, платформа считает его «критическим сбоем транзакции» и выводит системный диалог.

Решение 1: Проверка параметров запуска и режима отладки

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

Во-первых, попробуйте запустить информационную базу в режиме «Без отладки» (сочетание клавиш Ctrl + F5 в конфигураторе) или просто через 1С:Стартер. Если в этом случае кнопка «Подробно» исчезла, значит, поведение системы абсолютно штатное.

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

Решение 2: Использование объекта СообщениеПользователю

Часто системное окно появляется из-за того, что платформа «теряет» контекст ошибки. Чтобы сообщение выглядело органично (например, в виде всплывающего уведомления или сообщения у конкретного поля), необходимо правильно инициализировать объект СообщениеПользователю.

Проанализируем пример правильного кода в подписке на событие или в модуле объекта:


Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "К сожалению, запись невозможна, так как не заполнены важные данные.";
Сообщение.Поле = "Наименование"; // Привязка к конкретному реквизиту
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();

Отказ = Истина;

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

Решение 3: Программное подавление ошибок при вызове записи

Если вы вызываете запись объекта программно (например, из формы или обработки), вы можете управлять выводом системных предупреждений. У метода Записать() в управляемых формах есть расширение, которое принимает структуру параметров.

Разберем, как реализовать запись без вывода системного окна:


ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ПоказыватьОшибки", Ложь);

Если Не Записать(ПараметрыЗаписи) Тогда
    // Здесь мы можем программно обработать отказ, 
    // не показывая системное окно пользователю.
    // Сообщения, сформированные через СообщениеПользователю, все равно отобразятся.
КонецЕсли;

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

Решение 4: Обработка транзакции через Попытка...Исключение

Когда в подписке на событие устанавливается Отказ = Истина, это инициирует отмену транзакции. Если запись была инициирована из кода, который не обернут в блок обработки исключений, платформа перехватывает «неудачу» транзакции и выводит тот самый диалог.

Рассмотрим, как правильно организовать вызов записи:


Попытка
    Объект.Записать();
Исключение
    // Системное окно с кнопкой "Подробно" подавляется блоком Исключение.
    // Пользователь увидит только те сообщения, которые были вызваны 
    // методом Сообщить() или СообщениеПользователю.
    Инфо = ИнформацияОбОшибке();
    // Мы можем проанализировать текст ошибки, если это необходимо
КонецПопытки;

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

Решение 5: Избегайте ВызватьИсключение в подписках

Проанализируем еще одну типичную ошибку. Иногда разработчики вместо установки Отказ = Истина используют оператор ВызватьИсключение. Это гарантированно приводит к появлению окна с кнопкой «Подробно», так как исключение воспринимается платформой как критическая ошибка исполнения кода, а не как штатный отказ от записи по логике бизнес-процесса.

Если ваша задача — просто остановить запись и уведомить об этом человека, всегда используйте связку:

  1. Объект СообщениеПользователю для вывода текста.
  2. Параметр Отказ = Истина для отмены действия.

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

← На главную