1с сообщить код ошибки

Работа с сообщениями пользователю

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

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

1с сообщить код ошибки

Рассмотрим подробно, что при этом происходит и как можно добиться такого же поведения в своем коде. В качестве примера возьмем ситуацию проведения документа.

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

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

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

Программное создание сообщений

Теперь посмотрим, как можно добиться такого поведения полностью программно.

В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени «Объект».

Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:

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

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

Источник

Перехват исключений в коде

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

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

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

3. Частные случаи некорректного использования и перехвата исключений.

Область применения (уточнение): управляемое приложение, обычное приложение.

3.1. Если имеется некоторая серверная бизнес-логика, которая вызывается с клиента при интерактивной работе пользователя:

&НаСервере
Процедура ВыполнитьОперацию()
// код, приводящий к вызову исключения
.
КонецПроцедуры

то неправильно маскировать от пользователя и администратора исходную проблему:

// на клиенте
Попытка
ВыполнитьОперацию();
Исключение
ПоказатьПредупреждение(,НСтр(«ru = ‘Операция не может быть выполнена.'»));
КонецПопытки;

Правильно записывать в журнал регистрации подробное представление исключения, а краткое представление добавлять в текст сообщения пользователю:

и тогда на клиенте:

Попытка
ВыполнитьОперацию();
Исключение
ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ПоказатьПредупреждение(,НСтр(«ru = ‘Операция не может быть выполнена по причине:'») + Символы.ПС + ТекстСообщения);
КонецПопытки;

3.2. Не следует анализировать текст исключений с целью интерпретации причины ошибки. Текст исключения может меняться в зависимости от локализации. В условиях отсутствия штатных средств (например, типизированных исключений), следует выдавать пользователю тексты исключений «как есть». Для понятности, его можно дополнить пояснением возможных причин.
Например:

Попытка
ЗагрузитьФайлИзИнтернета(. );
Исключение
ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ТекстСообщения = НСтр(«ru = ‘Не удалось загрузить файл:'») + Символы.ПС + ТекстСообщения + Символы.ПС + НСтр(«ru = ‘Возможные причины:
• Нет подключения к Интернету;
• На веб-узле возникли неполадки;
• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету;
• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'»);
ПоказатьПредупреждение(,ТекстСообщения);
КонецПопытки;

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

правильно применять строковые литералы (например, «Успешно», «НетМестаНаДиске», «Отменено» и т.п.):

Строковые литералы кодов ошибок не локализуются.

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

3.3. Если имеется некоторая клиентская бизнес-логика (код выполняется полностью на клиенте):

&НаКлиенте
Процедура СоздатьФайлНаДиске()
// код, приводящий к вызову исключения
.
КонецПроцедуры

то рекомендуется делать дополнительный серверный вызов для протоколирования неудачного результата операции в журнал регистрации:

Попытка
// клиентский код, приводящий к вызову исключения
СоздатьФайлНаДиске();
Исключение
ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ПоказатьПредупреждение(,НСтр(«ru = ‘Операция не может быть выполнена по причине:'») + Символы.ПС + ТекстСообщения);
ЗаписатьОшибкуРаботыСФайлами(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;

3.4. Недопустимо перехватывать любые исключения, бесследно для системного администратора:

Попытка
// код, приводящий к вызову исключения
.
Исключение // перехват любых исключений
КонецПопытки;

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

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

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

Подробнее см. пп. 1.1 и 1.3 стандарта Информирование пользователя.

3.6. Недопустимо делать проверки наличия у объекта реквизитов, методов, макетов и т.п., используя для этого исключения, т.к. это может привести к сложно диагностируемым ошибкам, а также затрудняет отладку в режиме «Останавливаться по ошибке».
Вместо перехвата исключений в этом случае рекомендуется:

Попытка
КонтекстЭДОСервер.ПолучитьМакет(«КомпонентаОбмена»);
ПутьВК = КонтекстЭДОСервер.ПутьКОбъекту + «.Макет.КомпонентаОбмена»;
Исключение
КонецПопытки;

МакетКомпонентыОбмена = КонтекстЭДОСервер.Метаданные().Макеты.Найти(«КомпонентаОбмена»);
Если МакетКомпонентыОбмена <> Неопределено Тогда
ПутьКМакету = КомпонентаОбмена.ПолноеИмя()
КонецЕсли;

3.7. Порядок обработки исключений при использовании транзакций описан в стандарте Транзакции: правила использования.

Попытка
КоличествоДнейРазрешения = Число(Значение);
Исключение
КоличествоДнейРазрешения = 0; // значение по умолчанию
КонецПопытки;

ОписаниеТипа = Новый ОписаниеТипов(«Число»);
КоличествоДнейРазрешения = ОписаниеТипа.ПривестиЗначение(Значение);

Источник

Обработка исключений

1С:Предприятие 8 имеет единую стратегию обработки исключительных ситуаций (исключений). Исключение может быть вызвано платформой или оператором ВызватьИсключение встроенного языка. Платформа может вызывать исключения по самым разным поводам. Это может быть ошибка доступа к файлу, если выполняется файловая операция, может быть ошибка выполнения встроенного языка, может быть ошибка блокировки данных при одновременной работе пользователей, может быть установка параметра Отказ в обработчике записи документа и т.д.

Все исключения делятся на восстановимые и невосстановимые. Восстановимые, это те исключения, после которых 1С:Предприятие может продолжать работу. После невосстановимых исключений работа системы не может быть продолжена. К восстановимым исключениям, относятся, например, ошибки блокировки данных, ошибки выполнения встроенного языка. Невосстановимыми являются, например, такие исключения, как ошибка компиляции модуля или внутренняя ошибка 1С:Предприятия. Есть и определенные ситуации, при которых исключение может стать невосстановимым. Например, если ошибка выполнения встроенного языка произошла в ходе инициализации модуля (а не при выполнении процедуры или функции), то после такой ошибки система не может продолжать работу, так как объект, которому принадлежит модуль, фактически, оказался неинициализированным.
Наличие невосстановимых исключений обусловлено тем, что система автоматизации экономической деятельность работает обычно с достаточно ответственными задачами. Если при работе произошел серьезный сбой, то продолжать работу с риском внести в информационную базу искаженные данные является нецелесообразным.

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

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

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

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

Источник

Отображение ошибок

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

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

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

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

    Сообщение об ошибке

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

    1с сообщить код ошибки

    Декларативная настройка текста сообщения об ошибке

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

    1с сообщить код ошибки

    1с сообщить код ошибки

    Отчет об ошибке

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

    1с сообщить код ошибки

    Сервис регистрации ошибок

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

    Источник

    Программирование в 1С для всех

    В этой статье мы научимся работать с оператором Попытка Исключение в 1С 8.3

    Оператор Попытка Исключение в 1С

    В чем суть этого оператора? В ходе выполнения программы часто могут возникать ошибки, такие как деление на ноль, корень из отрицательного числа и прочие. Эти ошибки приводят к «крушению» программы – это значит, что программа прекратит свою работу и ни какие операторы после ошибки выполняться не будут. Чтобы обойти исключительную ситуацию и продолжить выполнение программы, в языке программирования 1С существует оператор Попытка…Исключение.

    Рассмотрим его синтаксис.

    Попытка

    //операторы попытки

    Исключение

    //операторы исключения.

    КонецПопытки

    Разберем этот синтаксис.

    Ключевое слово Попытка открывает список операторов, выполнение которых может привести к исключительной ситуации, все операторы между ключевыми словами Попытка и Исключение это Операторы попытки.

    Ключевое слово Исключение открывает список операторов, которые будут выполняться в том случае, если вызвана исключительная ситуация операторами попытки. Т.е. если во время выполнения программы один из операторов попытки вызвал ошибку выполнения программы (исключительную ситуацию), то выполнение данного оператора прерывается и управление передается на первый Оператор исключения. Причем обращаю Ваше внимание, что управление будет передано и в том случае, если исключительную ситуацию вызвали функции и процедуры, разработанные программистом и применяемые в качестве операторов попытки. Естественно, что если ошибка произошла в процедуре или функции, то ее выполнение будет прервано.

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

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

    Описание ошибки в 1С

    В коде выше я использовал собственное выражение для описания ошибки, но можно использовать метод ОписаниеОшибки(), который возвращается описание ошибки с точки зрения разработчиков платформы 1С. Это функция, которая возвращает текст с описанием ошибки. Например, код выше можно переделать так:

    Тогда, при выполнении выйдет «стандартизированное» описание ошибки.

    1с сообщить код ошибки

    Оператор ВызватьИсключение в 1С

    Если мы всё сделаем правильно, то никакой ошибки не возникнет, просто выйдет сообщение о корне из отрицательного числа. А что если нам нужно, чтобы все-таки ошибка вышла? Для этого есть оператор ВызватьИсключение.

    Если сейчас мы попробуем посчитать корень из отрицательного числа, то выйдет следующее сообщение:

    1с сообщить код ошибки

    Оператор ВызватьИсключение можно использовать отдельно для «эмуляции» вызова исключение. Например, при выполнении этой команды формы:

    Будет вызвано исключение.

    1с сообщить код ошибки

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

    1с сообщить код ошибки

    Попытка внутри попытки в 1С

    В платформе 1С 8.3 можно один оператор попытки разместить в другом операторе. Например, на управляемой форме обработки разместим несколько реквизитов с типом Число.

    1с сообщить код ошибки

    И по команде с формы попытаемся вычислить корень из каждого реквизита, при этом сделаем это в двух вложенных операторах попытки.

    И результат работы этой обработки:

    1с сообщить код ошибки

    Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
    Книга «Программировать в 1С за 11 шагов»

    Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

    1с сообщить код ошибки

    Книга написана понятным и простым языком — для новичка.

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

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

    1с сообщить код ошибки

    Промо-код на скидку в 15% — 48PVXHeYu

    Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
    Только для читателей моего блога,
    промо-код на скидку в 300 рублей на весь комплект: blog


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

    можно оплатить вручную:

    Яндекс.Деньги — 410012882996301
    Web Money — R955262494655

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *