1с попытка информация об ошибке

Попытка
  //Некоторые действия
Исключение
  //Действия при ошибке
КонецПопытки;

Показ сообщения об ошибке

Для вывода сообщения об ошибке нужно использовать функцию ОписаниеОшибки();

Пример:

Попытка
    НаборЗаписей.Записать(Истина);
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Для выдачи структуированной информации об ошибке в версии 8.2 служит функция ИнформацияОбОшибке().

    Инфо = ИнформацияОбОшибке();
    Сообщить("Описание='" + Инфо.Описание + "'");
    Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'");
    Сообщить("НомерСтроки=" + Инфо.НомерСтроки);
    Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");

Вызов исключения

В 1С:Предприятие 7.7 оператор ВызватьИсключение; служит для повторного вызова исключения из блока Исключение-КонецПопытки. Для вызова из других частей программы можно использовать внешнюю компоненту или деление на 0, например а=1/0.

В 1С:Предприятие версии 8 есть оператор ВызватьИсключение:

ВызватьИсключение "Текст сообщения об ошибке";

Содержание:

1.      Обработка исключительной ситуации

2.      Совершаем ошибку в 1С 8.3

3.      А что еще можно делать с результатом попытки?

4.      А ваши транзакции то здесь при чём?  

1.      Обработка исключительной ситуации

—        Приветствую, Амиго! Ты, как я понял, пришёл на мою лекцию по физическим основам изготовления термитных пирамидок для заряда аппаратов гиперболоидной конструкции? Нет? А зачем тогда?

—        Здравствуйте, профессор. Сегодня мы собирались разобрать конструкцию «Попытка-Исключение».

—        А… Это… Ну, тогда вот:

—        Кажется, понятно. А можно примеров добавить?

—        Ох уж эти юные роботы, всегда хотят практики. С примерами это будет выглядеть вот так:

Ох, извини, это для старых баз. На новых космолётах с прошивкой выше 8.1 есть более удобный способ узнать код ошибки.  

2.      Совершаем ошибку в 1С 8.3

Ты и сам можешь попробовать. Главное – придумать ошибку в 1С 8.3. Самая простая ошибка – это разделить что-нибудь на нуль или на, как это говорят на современном сленге, ноль.

В ответ получим:

Нажимаем на кнопку «Подробно…» и видим: Деление на 0 {NudlsProff_Расширение.NudlsProff_ФормаОшибок.Форма(96)}: Результат = 1/0

Добавляем нашей красоты:

Теперь пользователю ВИДНО, что случилось. И ПОНЯТНО, что с этим делать.

Описание=’Деление на 0′

ИмяМодуля=’NudlsProff_Расширение.NudlsProff_ФормаОшибок.Форма’

НомерСтроки=99

ИсходнаяСтрока=’        Результат = 1 / 0;’

Позвоните Профессору Нудлсупо тел+7 (495) 125-23-77

и ознакомьтесь с теорией деления на ноль

https://elementy.ru/email/1530320/Pochemu_nelzya_delit_na_nol     

3.      А что еще можно делать с результатом попытки?

—        А что ещё мы можем делать в результате с попыткой?

—        Мы можем обработать попытку в попытке.

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

—        Профессор, Вы опять забыли про примеры.

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

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

4.      А ваши транзакции то здесь при чем?

—        То есть если в программе что-то может пойти не так, например, при записи файла на диск, обработке web-hook, работе с API, синхронизации с другими базами, записи изменений в справочник или документ, для безопасности я должен обернуть потенциально опасный кусочек кода в Попытку-Исключение, и тем самым пользователь сможет продолжить работу, а мы всегда будем знать, где именно и почему возникает ошибка?

—        Да, Амиго, все верно! Кстати, поскольку уж речь зашла о записи объектов баз данных, очень важно не забывать правильно закрывать ваши транзакции:

 

Специалист компании «Кодерлайн» 

Алексей Зятнин

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

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

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

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

Попытка

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

Исключение

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

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

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

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

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

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
КонецПопытки;

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

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

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

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

А = -100;
Попытка
	КореньЧислаяА = Sqrt(А);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

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

Использование метода ОписаниеОшибки

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

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

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
   ВызватьИсключение;
КонецПопытки;

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

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

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

&НаКлиенте
Процедура Команда1(Команда)
	ВызватьИсключение "Мы вызвали какое-то исключение";
КонецПроцедуры

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

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

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

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

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

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

Реквизиты управляемой формы 1С

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

Попытка
	Попытка 
		КореньЧислаА = Sqrt(А);
		Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаА,5));
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;	
	КореньЧислаяБ = Sqrt(Б);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяБ,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

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

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

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

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

Программировать в 1С за 11 шагов

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

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

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

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

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

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


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


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

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

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

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Если при исполнении программы происходит ошибка, то 1С сообщает о ней пользователю.

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

Конструкция 1С Попытка-Исключение служит для обработки возможных ошибочных ситуаций.

Хорошим тоном считается обрабатывать ошибки с помощью конструкции 1С Попытка-Исключение, то есть предусматривать места, где они могут произойти и ставить обработчик, который запишет ошибку «в сообщения администратору», а пользователю или сообщит корректно или найдет способ отработать по-другому.
Переменная1 = "22";
Попытка
     //код, который может вызвать ошибку
     ЧислоСтрокой = Число(Переменная1);
Исключение
     ТекстОшибки = ОписаниеОшибки();
КонецПопытки

Код, в котором может произойти ошибка, обрамляется оператором 1С Попытка-Исключение.

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

Чтобы получить расшифровку ошибки, необходимо получить текст ошибки с помощью функции ОписаниеОшибки() сразу после слова Исключение.

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

Структура, возвращаемая функцией ИнформацияОбОшибке():

Проголосовать за этот пост:

Загрузка…

Posted in Язык 1С

  • Главная
  • О сайте
  • Главная
  • Содержание

Рукопашный бой Карташ

Категории

—>

рубрики: Язык программирования 1С | Дата: 2 марта, 2017

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




Попытка

	//Выполняемый код

Исключение

	//Обработка исключительной ситуации:
	//- Сообщение пользователю;
	//- Запись лога в файл;
	//- Отправка сообщения по электронной почте;
	//- Фиксация ошибки путем присвоения переменной соответствующего значения

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

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




&НаКлиенте
Процедура ВыполнитьДеление(Команда)

	Частное = 1 / 0;

КонецПроцедуры

При выполнении этого кода выводится вот такое системное сообщение об ошибке:

А теперь доработаем нашу процедуру с использованием Попытки




&НаКлиенте
Процедура ВыполнитьДеление(Команда)

	Попытка

		Частное = 1 / 0;

	Исключение

		Сообщить("Произошла ошибка при попытке деления");

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

КонецПроцедуры

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




Сообщить("Произошла ошибка при попытке деления" + ОписаниеОшибки());

В этом случае в момент выполнения деления в окне сообщений появится следующий текст



Произошла ошибка при попытке деления{ВнешняяОбработка.ПопыткаИсключение.Форма.Форма.Форма(34)}: Деление на 0

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




Попытка

	//Код

	Попытка
		//Код
	Исключение
		//Обработка исключения
	КонецПопытки;

	Попытка
		//Код
	Исключение
		//Обработка исключения
	КонецПопытки;

Исключение
	//Обработка исключения
КонецПопытки;

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

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

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

  • 1с получить текст ошибки при исключении
  • 1с получить ошибку проведения
  • 1с получить ошибку исключения
  • 1с получение лицензии ошибка 500
  • 1с полное описание ошибки