1с вызвать ошибку принудительно

Если (If)

Описание:
Оператор Если управляет выполнением программы, основываясь на результаты одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли – Тогда.
Синтаксис:
Если <Логическое выражение> Тогда
// Операторы
[ИначеЕсли <Логическое выражение> Тогда]
// Операторы
[Иначе]
// Операторы
КонецЕсли;
Англоязычный синтаксис:
If <Логическое выражение> Then
// Операторы
[ElsIf <Логическое выражение> Then]
// Операторы

[Else]
// Операторы
EndIf;
Параметры:

<Логическое выражение>  – Логическое выражение.

Тогда – Операторы, следующие за Тогда, выполняются, если результатом логического выражения является значение Истина.

// Операторы – Исполняемый оператор или последовательность таких операторов

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

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

КонецЕсли–  Ключевое слово, которое завершает структуру оператора условного выполнения.

Пример:

Если ДеньНедели(ТекущаяДата()) = 6 Тогда
Сообщить(“Сегодня суббота.”);
ИначеЕсли ДеньНедели(ТекущаяДата()) = 7 Тогда
Сообщить(“Сегодня воскресенье.”);
Иначе
Сообщить(“Сегодня рабочий день.”);
КонецЕсли;

Новый (New)

Описание:
Оператор позволяет создать значение указанного типа. Допустим только для тех типов, для которых разрешено создание новых значений. Для прикладных объектов необходимо использовать функциональную форму оператора Новый (вариант 2), так как при проверке модулей в конфигураторе  не определены типы для прикладных объектов.
При работе с функциональной формой оператора Новый следует помнить, что операция разыменования непосредственно к результату работы оператора не может быть применена. Вначале следует присвоить результат работы оператора Новый какой-либо переменной, а затем использовать уже эту переменную.
Синтаксис (вариант 1):
Новый <Имя типа>[(<Парам 1>, …, <Парам N>)]
Параметры:

Имя типа – Указывается имя типа, значение которого создается.

<Парам 1>, …, <Парам N> –  После имени типа в скобках могут указываться параметры, если они определены в конструкторах для данного типа. Допустимое количество параметров
и их назначение указываются в описании конструкторов объекта.

Пример:
// Пример создания массива из трех элементов.
Массив = Новый Массив(3);

Синтаксис (вариант 2):
Новый (<Тип>[, <Параметры конструктора>])
Параметры:

Тип – Имя типа или значение типа Тип.
<Параметры конструктора> Массив параметров конструктора.
Пример:

ТипЗначения = Тип(“КвалификаторыСтроки”);
Параметры = Новый Массив(2);
Параметры[0] = 20;
Параметры[1] = ДопустимаяДлина.Переменная;
КвалифСтр = Новый(ТипЗначения, Параметры);

Перейти (Goto)

Описание:
Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому.
Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.
Примечание 1. Метка в этом операторе не должна быть меткой перехода на оператор Процедура или Функция.
Примечание 2. Оператор безусловного перехода не может быть использован для передачи управления на операторы, находящиеся внутри конструкций:
Пока – КонецЦикла, Для – КонецЦикла, Для каждого – КонецЦикла, Если – КонецЕсли, Попытка – Исключение – КонецПопытки извне этих конструкций.
Синтаксис:
Перейти <Метка>;
Пример:

Перейти ~Метка1;

~ Метка1: Сообщить(“Осуществлен переход по метке.”);

Перем (Var)

Описание:
Позволяет в явном виде объявить переменную.
Синтаксис:
Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2>, …];
Англоязычный синтаксис:
Var <Имя переменной 1> [Export] [, <Имя переменной 2>, …];
Параметры:

<Имя переменной 1>[, <Имя переменной 2>, …] – Задается имя или имена объявляемых переменных
Экспорт – Необязательное ключевое слово. Указывает, что данная переменная доступна при обращении к контексту этого модуля из других модулей. Данное ключевое слово необходимо указывать для каждой объявляемой переменной отдельно. Не имеет смысла при объявлении переменных отдельных процедур или функций.
Пример:

// Пример объявления одной переменной
Перем А Экспорт;
Перем Б;
// Пример объявления нескольких переменных одним оператором
Перем А, Б Экспорт;
Неявное объявление переменных:
В языке необязательно объявлять переменные в явном виде. Неявным определением переменной является первое ее появление в левой части
оператора присваивания. Тип переменной определяется типом присвоенного ей значения. Не допускается использование в выражениях переменных, не
объявленных ранее в явном или неявном виде.
Область использования переменной:
Область использования переменных зависит от места их определения в конфигурации. Существует три области, в которых можно объявить
переменные:
● В разделе определения переменных программного модуля управляемого приложения. Это глобальные переменные.
● В разделе определения переменных модуля. Это переменные модуля.
● В процедуре или функции. Это локальные переменные.
Глобальные переменные, объявленные с ключевым словом Экспорт, доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции любого клиентского программного модуля конфигурации.
Переменные модуля доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции того программного модуля, в пределах которого они объявлены. Если они объявлены с ключевым словом Экспорт, то они доступны из других модулей через контекст модуля, в котором они объявлены.
Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены.
Если переменная определена как глобальная, то она видна из всех процедур и функций любого клиентского программного модуля конфигурации. Если же переменная определена внутри процедуры, то ее областью видимости является данная процедура или функция.

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

Пока (While)

Описание:
Оператор цикла Пока предназначен для циклического повторения операторов, находящихся внутри конструкции Цикл – КонецЦикла. Цикл выполняется,
пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.
Синтаксис:
Пока <Логическое выражение> Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
КонецЦикла
Англоязычный синтаксис:
While <Логическое выражение> Do
// Операторы
[Break;]
// Операторы
[Continue;]
// Операторы
EndDo;
Параметры:

огическое выражение> -Логическое выражение
Цикл– Операторы, следующие за ключевым словом Цикл, выполняются, пока результат логического выражения равен Истина.
// Операторы – Исполняемый оператор или последовательность таких операторов.
Прервать – Позволяет прервать выполнение цикла в любой точке. После выполнения этого оператора управление передается оператору, следующему за ключевым
словом КонецЦикла.
Продолжить –  Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле
цикла за ним, на данной итерации обхода не выполняются.
КонецЦикла –  Ключевое слово, которое завершает структуру оператора цикла.
Пример:

ВыборкаДок = Документы.РасходнаяНакладная.Выбрать();
// Цикл по всем документам
Пока ВыборкаДок.Следующий() Цикл
// Отобразим Документ в панели состояния
Состояние(“Обрабатывается документ №” + ВыборкаДок.Номер);
// Операторы выполнения действий над документом
КонецЦикла;

Попытка (Try)

Описание:
Оператор Попытка управляет выполнением программы, основываясь на возникающих при выполнении модуля ошибочных (исключительных) ситуациях,
и определяет обработку этих ситуаций.
В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля. Не предусмотрено определяемых пользователем исключений.
КонецПопытки оператор. Если же последовательность операторов попытки выполнилась без ошибок, то последовательность операторов исключения будет пропущена и управление также будет продолжено с оператора, следующего за ключевым словом КонецПопытки.
Конструкции Попытка – Исключение – КонецПопытки могут быть вложенными. При этом при возникновении исключительной ситуации управление передается на тот обработчик, в попытке которого произошла ошибка. Если же в последовательности операторов исключения этого обработчика выполняется оператор ВызватьИсключение, выполнение передается вышестоящему обработчику исключения и так далее. Если вышестоящего обработчика нет, исключительная ситуация обрабатывается системно с прекращением выполнения программного модуля.
В выдаче диагностики помощь могут оказать встроенные функции ОписаниеОшибки() и ИнформацияОбОшибке() (см. описание функций встроенного языка). Также следует учитывать, что попадание во вложенный обработчик исключения приводит к тому, что информация о «родительском» исключении теряется.
С помощью конструкции Попытка – Исключение – КонецПопытки не могут быть перехвачены следующие ошибки:
● Ошибки компиляции модулей встроенного языка во время исполнения.
● Ошибки времени исполнения, возникающие в обработчиках ПередЗакрытием() и ПриЗакрытии() управляемой формы.
Такие ошибки всегда будет отображаться системой «1С:Предприятие» и приводить к прекращению выполнения встроенного языка.
Синтаксис:
Попытка
// Операторы попытки
Исключение
// Операторы исключения
[ВызватьИсключение;]
// Операторы исключения
КонецПопытки;
Англоязычный синтаксис:
Try
// Операторы попытки
Except
// Операторы исключения
[Raise;]
// Операторы исключения
EndTry;
Параметры:

// Операторы попытки – Исполняемый оператор или последовательность таких операторов.

Исключение – Операторы, следующие за ключевым словом Исключение, выполняются, если при выполнении последовательности операторов произошла ошибка
времени выполнения.

// Операторы исключения – Исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию.

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

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

Процедура СформироватьВExcel()
Попытка
// Пытаемся обратиться к программе MS Excel
Табл = Новый ComObject(“Excel.Application”);
Исключение
Предупреждение(ОписаниеОшибки());
Возврат;
КонецПопытки;
// Операторы формирования отчета

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

Процедура (Procedure)

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

Синтаксис:
Процедура <ИмяПроцедуры>([[Знач] <Парам 1> [=<ДефЗнач>], … ,[Знач] <Парам N> [=<ДефЗнач>]])[Экспорт]
// Объявления локальных переменных;
// Операторы;

[Возврат;]
// Операторы;

КонецПроцедуры
Англоязычный синтаксис:
Procedure <ИмяПроцедуры>([[Val] <Парам 1> [=<ДефЗнач>], … ,[Val] <Парам N>[=<ДефЗнач>]])[Export]
// Объявления локальных переменных;
// Операторы;

[Return;]
// Операторы;

EndProcedure

Пример:

Перем Глоб;
// Описание процедуры
Процедура МояПроцедура(Пар1, Пар2, Пар3) Экспорт
Глоб = Глоб + Пар1 + Пар2 + Пар3;
Возврат;
КонецПроцедуры
Глоб = 123;
МояПроцедура(5, 6, 7); // Вызов процедуры

УдалитьОбработчик (RemoveHandler)

Описание:
Удаляет обработчик события.
При удалении обработчика события производится проверка соответствия числа параметров события числу параметров метода, назначенного в качестве
обработчика.
Синтаксис:
УдалитьОбработчик <Событие>, <ОбработчикСобытия>;
Англоязычный синтаксис:
RemoveHandler <Событие>, <ОбработчикСобытия>;
Параметры:

<Событие> – Событие, обработчик которого удаляется.
Событие задается в форме <Выражение>.<ИмяСобытия>, где:
● <Выражение> – произвольное выражение на встроенном языке. Его результатом должен быть объект, обработчик события которого удаляется.
● <ИмяСобытия> – идентификатор (имя) события.

<ОбработчикСобытия> – Процедура/функция-обработчик события.
Обработчиком события может являться метод объекта встроенного языка. Тогда <ОбработчикСобытия> задается как <Выражение>.<ИмяОбработчика>,
где:
● <Выражение> – произвольное выражение на встроенном языке. Его результатом должен быть объект, метод которого служит обработчиком события.
● <ИмяОбработчика> – имя метода обработчика события.
Также в качестве обработчика события может быть задана процедура/функция, находящаяся в области видимости. В этом случае обработчик события
задается как имя процедуры/функции.
Пример:

УдалитьОбработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента;

Функция (Function)

Описание:
Ключевое слово Функция начинает секцию исходного текста функции, выполнение которой можно инициировать из любой точки программного модуля,
просто указав ИмяФункции со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле приложения или общем программном модуле в теле описания функции использовано ключевое слово Экспорт, то это означает, что данная функция является доступной из всех других программных модулей конфигурации.
Выполнение функции заканчивается оператором Возврат. Функции отличаются от процедур только тем, что возвращают ВозвращаемоеЗначение. Конец
программной секции функции определяется по оператору КонецФункции.
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, т. е. в языке допускается не принимать от функции
возвращаемое значение.
Если ключевое слово Возврат в теле функции не указано или строка модуля, его содержащая, не выполнена, то функция возвращает значение типа Неопределено.
Переменные, объявленные в теле функции в разделе Объявления локальных переменных, являются локальными переменными данной функции, поэтому доступны только в этой функции (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).
ПРИМЕЧАНИЕ. Ключевые слова Функция, КонецФункции являются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля).
Синтаксис:

Функция <ИмяФункции>([[Знач] <Парам 1>[=<ДефЗнач>], … ,[Знач] <Парам N>[=<ДефЗнач>]])[Экспорт]
// Объявления локальных переменных;
// Операторы;

Возврат <Возвращаемое значение>;
// Операторы;

КонецФункции

Англоязычный синтаксис:
Function <ИмяФункции>([[Val] <Парам 1>[=<ДефЗнач>], … ,[Val] <Парам N>[=<ДефЗнач>]])[Export]
// Объявления локальных переменных;
// Операторы;

Return <Возвращаемое значение>;
// Операторы;

EndFunction

Пример:
Перем Глоб;
// Описание функции
Функция МояФункция(Пар1, Пар2, Пар3) Экспорт
Глоб = Глоб + Пар1 + Пар2 + Пар3;
Возврат Глоб;
КонецФункции
Глоб = 123;
Рез = МояФункция(5, 6, 7); // Вызов функции

Конструкция Попытка-Исключение-КонецПопытки

Если в модуле на встроенном языке 1С будет ошибка времени выполнения, например деление на 0, то выполнение модуля будет прервано и на экран будет выведено сообщение об ошибке:

&НаКлиенте Процедура Исключение(Команда) а = 5/0; КонецПроцедуры

Ошибки времени выполнения (run time) — это ошибки во время выполнения модуля. Еще есть ошибки времени компиляции (compile time) — это ошибки во время компиляции модуля.

Для обработки ошибок времени выполнения можно использовать исключения:

&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0; Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры

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

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

&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0;+ //здесь ошибка Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры

Вызовы процедур и функций внутри попытки тоже будут обработаны:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() а = 5/0; КонецПроцедуры

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

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

Попытки могут быть вложенными:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение Сообщить("Ошибка в процедуре"); КонецПопытки; КонецПроцедуры

Если выполнить данный код, то выйдет сообщение «Ошибка в процедуре», то есть код из первого исключения даже не будет выполнен. Чтобы выполнялся код из вышестоящего исключения нужно использовать оператор ВызватьИсключение:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение ВызватьИсключение; КонецПопытки; КонецПроцедуры

В этом случае исключение будет проброшено вверх по стеку и обработано первым блоком Попытка-Исключение.

Можно вызывать исключение из кода оператором ВызватьИсключение. Выполнение кода будет прервано, на экране будет сообщение с текстом исключения:

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

Информация об ошибке

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

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры

Пример с другим типом ошибки:

&НаКлиенте Процедура Исключение(Команда) Попытка а = ПредопределенноеЗначение("Справочник.Склады.ОсновнойСклад"); //при этом такого предопределенного элемента нет Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры

Но правильней использовать метод ИнформацияОбОшибке(), который вернет объект типа ИнформацияОбОшибке:

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод КраткоеПредставлениеОшибки() //для вывода сообщения на экран Сообщить(КраткоеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры

Метод КраткоеПредставлениеОшибки() выведет более понятное для обычного пользователя сообщение: «Деление на 0» вместо «{Обработка.Обработка1.Форма.Форма.Форма(5)}: Деление на 0».

Для более полного описания ошибки можно использовать метод ПодробноеПредставлениеОшибки():

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод ПодробноеПредставлениеОшибки() //для вывода подробного сообщения на экран Сообщить(ПодробноеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры

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

&НаКлиенте Процедура Исключение(Команда) //ЗаписьЖурналаРегистрации доступно только на сервере Команда1НаСервере(); КонецПроцедуры &НаСервере Процедура Команда1НаСервере() Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //сообщим пользователю Сообщить(КраткоеПредставлениеОшибки(Инф)); //и запишем в журнал регистрации ПодробнаяОшибка = ПодробноеПредставлениеОшибки(Инф); ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ПодробнаяОшибка); КонецПопытки; КонецПроцедуры

Приведение к нужному типу

При загрузке числовых данных из файла (например из текстового документа) в 1С часто применяется такой прием для получения числа из строки:

&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; Попытка //пробуем перевести ее в число ЧислоЧислом = Число(ЧислоСтрокой); Исключение //если не получилось ЧислоЧислом = 0; КонецПопытки; //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры

С точки зрения производительности это не совсем корректно. Правильно использовать объект ОписаниеТипов:

&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; //создаем объект типа ОписаниеТипов с типом Число ОписаниеТипа = Новый ОписаниеТипов("Число"); //приводим строку к числу, если не получится вернет значение по умолчанию //для числа это 0 ЧислоЧислом = ОписаниеТипа.ПривестиЗначение(ЧислоСтрокой); //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

Синтаксис:
Код 1C v 8.2 УП

 Попытка
// Операторы попытки
Исключение
// Операторы исключения [ВызватьИсключение;]
Сообщить(ОписаниеОшибки());
КонецПопытки;

Англоязычный синтаксис:
Try
// Операторы попытки
Except
// Операторы исключения
[Raise;]
// Операторы исключения
EndTry;


Параметры:
// Операторы попытки
Исполняемый оператор или последовательность таких операторов.

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

// Операторы исключения
Исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию.

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

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

КонецПопытки
Ключевое слово, которое завершает структуру оператора обработки исключительных ситуаций.


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

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

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

Перейти к содержимому

Пример:

ОшибкаВКоде = Ложь;
...
Если ЧтотоНеТак Тогда
	ОшибкаВКоде = Истина;
КонецЕсли;
...
Если ОшибкаВКоде = Истина Тогда
	ВызватьИсключение("Ошибка!!!");
КонецЕсли;

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

Рубрики

  • Все
  • CRM
    • Битрикс24
  • Frameworks
    • Laravel
    • Bootstrap 4
    • React Native
  • CMS
    • OpenCart 3
    • WordPress
      • Функции
      • Авторские функции
    • 1С-Битрикс
    • MODX
  • АТС
    • Asterisk
  • OS
    • Linux
      • Fedora
      • Linux Mint
      • Manjaro
      • Rocky Linux
      • CentOS
      • Debian
      • Ubuntu
    • Windows
    • macOS
  • Контейнеризация
    • Docker
  • Программирование
    • 1C
    • Javascript
    • Node JS
    • PHP
    • Python
    • Android Studio
    • Web
      • Библиотеки
  • Базы данных
    • MySQL
  • Плагины DW
    • WordPress
  • Редакторы и IDE
    • PHPStorm
    • VS Code
    • Sublime Text 3
    • Notepad++
  • Софт
  • Blockchain

Свежие комментарии

  • LasSystems к записи Валидация Email в 1С Предприятие
  • avenue18 к записи Быстрая отправка E-mail без помещения в таблицу b_event на 1С-Битрикс
  • Denis к записи Перенести поле из Покупатель в Доставка — компонент sale.order.ajax
  • Иван к записи Перенести поле из Покупатель в Доставка — компонент sale.order.ajax
  • Normankig к записи Игры на HTML + CSS + JavaScript
Июнь 2023

Пн Вт Ср Чт Пт Сб Вс
  1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30  

Иногда в 1С 8 необходимо искусственно вызвать ошибку, для этого используется оператор ВызватьИсключение или ВызватьИсключение(<Строка ошибки>).

Пример:

Пусть у нас есть процедура с параметром Отказ.

Если Отказ Тогда
    ВызватьИсключение("Ошибка!!!");
КонецЕсли;

От конфигурации использование оператора не зависит.

Есть альтернативный вариант, основанный на знаниях простейших особенностях языка — использования деления на 0.

Пример1:

А = 1 / 0;

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


Содержание:

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с во время получения обновления программы доступа произошла ошибка код ошибки 5
  • 1с внутренняя ошибка подсистемы контроля несогласованных изменений 1с
  • 1с внутренняя ошибка выполняется ожидание возможности запуска