При ошибке вывести сообщение 1с

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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

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


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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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

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


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

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

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

ОписаниеОшибки (ErrorDescription)

1C v 8.2

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


Описание:
Получает описание ошибки.

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


Пример:
Код 1C v 8.2 УП

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

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


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


Пример:
Код 1C v 8.х

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

Синтаксис:
ОписаниеОшибки()


Назначение:
Применять данную функцию имеет смысл только в конструкции <Попытка — Исключение — КонецПопытки>, так как в иных случаях она возвращает пустую строку.
См. также:Попытка Исключение; ВызватьИсключение.
Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений.


Параметры: нет

Разместил: E_Migachev Дата: 30.11.2009 Прочитано: 9657

В этой статье мы научимся работать с оператором Попытка Исключение в 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С будет ошибка времени выполнения, например деление на 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-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

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

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

Категории

—>

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

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




Попытка

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

Исключение

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

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

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




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

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

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

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

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




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

	Попытка

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

	Исключение

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

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

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

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




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

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



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

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




Попытка

	//Код

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

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

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

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

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

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

ОписаниеОповещения — объект встроенного языка 1С:Предприятия, указывающий на процедуру, в которой будет продолжено исполнение кода при наступлении определенного события.

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

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

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Содержание

  1. Как работает ОписаниеОповещения
  2. Синтаксис
  3. Вызываемая процедура и её параметры
  4. Выполнение обработки оповещения
  5. Работа на сервере
  6. Возможные ошибки
  7. Не найден экспортируемый метод
  8. Количество параметров 1. Ожидаемое количество – 2
  9. Примеры использования ОписаниеОповещения
  10. Оповещение о закрытии формы
  11. Ввод значений и предупреждения
  12. Проверка существования файла и передача описания оповещения через дополнительные параметры

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

Процедура ВыполнитьКоманду(Команда)
	
    Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

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

Диалог с ОписаниеОповещения

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

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

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
	
    ПоказатьВопрос(Оповещение, "Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    // Дальнейший алгоритм
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры	

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

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

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

Новый ОписаниеОповещения(<ИмяПроцедуры>, <Модуль>, <ДополнительныеПараметры>, <ИмяПроцедурыОбработкиОшибки>, <МодульОбработкиОшибки>)

ИмяПроцедуры — Имя экспортируемой процедуры, которая будет вызвана;

Модуль — Модуль в котором расположена вызываемая процедура. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса;

ДополнительныеПараметры — Произвольное значение, которое будет передано в вызываемую процедуру последним параметром;

ИмяПроцедурыОбработкиОшибки — Имя экспортируемой процедуры, которая будет вызвана в случае ошибки;

МодульОбработкиОшибки — Модуль в котором расположена вызываемая процедура в случае ошибки. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса.

Вызываемая процедура и её параметры

Вызываемая процедура должна быть экспортируемой, и в самом простом случае содержать два параметра Результат и ДополнительныеПараметры.

&НаКлиенте
Процедура ПроцедураОбработкиОповещения(Результат, ДополнительныеПараметры) Экспорт 
	
    Если Результат = Неопределено Тогда 
        Возврат;
    КонецЕсли;
	
    // Код для обработки результата
	
КонецПроцедуры

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

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

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

Выполнение обработки оповещения

В платформе реализован метод  ВыполнитьОбработкуОповещения(), для возможности непосредственного выполнения обработки оповещения.

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

&НаКлиенте
Процедура ВыполнениеОписанияОповещения(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
    ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.Да); 
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

Работа на сервере

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

&НаКлиенте
Процедура ОбрабокаЗакрытияФормы(Команда)
		
    Оповещение = Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , ЭтаФорма, , , , Оповещение);

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

&НаСервере
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
		
    Если Не РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;	
	
// Обработка результата выбора
	
КонецПроцедуры

Возможные ошибки

Не найден экспортируемый метод

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

Не найден экспортируемый метод

Количество параметров 1. Ожидаемое количество – 2

Если вызываемая процедура будет объявлена с одним параметром, то при исполнении будет вызвано исключение. Решается добавлением второго параметра в вызываемую процедуру.

Количество параметров 1. Ожидаемое количество – 2

Примеры использования ОписаниеОповещения

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

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

&НаКлиенте
Процедура Подбор(Команда)
	
    // Параметры для работы подбора
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("Параметр1", Истина);
    ПараметрыПодбора.Вставить("Параметр2", Ложь);
	
    // Опишем процедуру, которая будет вызвана после подбора
    Оповещение	= Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
	
    // Заблокируем форму владельца
    РежимОткрытия	= РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
	
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", ПараметрыПодбора, ЭтаФорма, , , , Оповещение, РежимОткрытия);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
	
    Если РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;
	
    // Код для обработки результата подбора
	
КонецПроцедуры

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

&НаКлиенте
Процедура ВвестиЧетноеЧисло(Команда)

    Оповещение	= Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтаФорма);
    Подсказка	= "Введите четное число";
    ПоказатьВводЧисла(Оповещение, , Подсказка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаЧисла(ВведенноеЧисло, ДополнительныеПараметры) Экспорт 

    // Если пользователь откажется от ввода вернется Неопределено	
    Если ВведенноеЧисло = Неопределено Тогда	 
        Возврат;
    КонецЕсли;
	
    ЧислоЧетное = ВведенноеЧисло % 2 = 0;
	
    Если Не ЧислоЧетное Тогда
        // Первый параметр не обязателен. Если не надо обрабатывать
        // завершение предупреждения просто не заполняем 
	ПоказатьПредупреждение( , "Введено не четное число");
    КонецЕсли;	
	
КонецПроцедуры

Проверка существования файла и передача описания оповещения через дополнительные параметры

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

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

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
	
	ПутьКФайлу = ПутьКФайлуФлагу();
	
	// Оповещение для обработки ошибки
	ОповещениеОбОшибке = Новый ОписаниеОповещения("ОповеститьОбОшибке", ЭтаФорма);
	
	// Оповещение проверки существоания файла
	// с передачей оповещения об ошибке через дополнительные параметры
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ОповещениеОбОшибке", ОповещениеОбОшибке);
	
	ОповещениеПроверки = Новый ОписаниеОповещения("ПослеПроверкиСуществованияФайла", ЭтаФорма, ДополнительныеПараметры);
	
	// ПРоверка существования файла
	Файл = Новый Файл(ПутьКФайлу);
	Файл.НачатьПроверкуСуществования(ОповещениеПроверки);
		
КонецПроцедуры

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

&НаКлиенте
Процедура ПослеПроверкиСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт 
	
    Если Не Существует Тогда 
		
	Если ДополнительныеПараметры.Свойство("ОповещениеОбОшибке") Тогда 
			
		ТекстОшибки = "Файл не существует!";
		ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОбОшибке, ТекстОшибки);
			
	КонецЕсли;	
		
	Возврат;
		
    КонецЕсли;
	
    // Код для дальнейшей обработки файла
	
КонецПроцедуры

Процедура для централизованной обработки ошибок

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

    // Код для дальнейшей обработки ошибки
	
КонецПроцедуры

Если Ваша конфигурация применяет БСП, то рекомендуется использовать процедуры БСП для вывода сообщений пользователям.

Примеры вывода сообщений

Если обращение «с сервера», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

ОбщегоНазначения.СообщитьПользователю(«Текст сообщения»);

Если обращение «с клиента», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

ОбщегоНазначенияКлиент.СообщитьПользователю(«Текст сообщения»);

Устаревшая процедура, но которая еще используется в конфигурациях на предыдущих версиях БСП:

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(«Текст сообщения»);

Пример вывода сообщения об ошибке:

Попытка
    ФайлCSV.Прочитать(ПутьКФайлу);
Исключение
    ОбщегоНазначенияКлиент.СообщитьПользователю(«Не удалось загрузить файл: « + ПутьКФайлу + Символы.ПС + ОписаниеОшибки());
КонецПопытки;

Общий синтаксис процедуры:

// Формирует и выводит сообщение, которое
может быть связано с элементом управления формы.
//
// Параметры:
// 
ТекстСообщенияПользователю — Строка — текст сообщения.
// 
КлючДанных — ЛюбаяСсылка — объект или ключ записи информационной базы, к
которому это сообщение относится.
// 
Поле — Строка — наименование реквизита формы.
// 
ПутьКДанным — Строка — путь к данным (путь к реквизиту формы).
// 
Отказ — Булево — выходной параметр, всегда устанавливается в значение
Истина.

Процедура СообщитьПользователю(
    Знач ТекстСообщенияПользователю,
    Знач КлючДанных = Неопределено,
    Знач Поле = «»,
    Знач ПутьКДанным = «»,
    Отказ = Ложь) Экспорт

Примеры:

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

// Альтернативный вариант использования в
форме объекта:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), , «Объект.ПолеВРеквизитеФормыОбъект»);

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

// 3. Для вывода сообщения связанного с
объектом информационной базы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), ОбъектИнформационнойБазы, «Ответственный»,,Отказ);

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

Случаи некорректного использования:

1. Передача одновременно параметров КлючДанных и ПутьКДанным.

2. Передача в параметре КлючДанных значения типа отличного от допустимого.

3. Установка ссылки без установки поля (и/или пути к данным).

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

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

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

Категории

—>

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

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




Попытка

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

Исключение

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

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

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




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

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

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

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

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




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

	Попытка

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

	Исключение

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

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

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

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




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

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



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

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




Попытка

	//Код

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

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

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

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

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

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

В этой статье разберем, как работать с сообщениями в 1С. Узнаем такие методы, как Сообщить, Предупреждение и ПоказатьПредупреждение.

Метод Сообщить в 1С

Самый простой способ вывести сообщение пользователю 1С — это метод Сообщить. Замечу, что данный метод работает практически на всех видах клиентов. Синтаксис у него достаточно простой: Сообщить(<Текстовое сообщение>). Вы просто в скобках пишите или текстовое сообщение в кавычках, или указываете в качестве параметра переменную с типом строка.

В коде ниже, при открытии управляемой формы обработки выводится сообщение.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Сообщить("Привет с сервера!!!");
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СтрокаПривет = "Привет с клиента!!!"
	Сообщить(СтрокаПривет);
КонецПроцедуры

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

Сообщить 1С

Метод Предупреждение в 1С

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

Этот метод имеет следующий синтаксис:

Предупреждение(<Текст предупреждения>,<Таймаут>,<Заголовок окна>)

Где:

Текст предупреждения – или непосредственно текст предупреждения, или переменная с типом строка;

Таймаут  — число, которое указывает, сколько секунд будет отображаться окно с предупреждением, необязательное поле, по умолчанию 0;

Заголовок окна – текст или переменная с типом строка, это значение будет в заголовке окна с предупреждением.

В качестве примера, на форме обработки я создал команду, в которой вывожу предупреждение:

&НаКлиенте
Процедура ВывестиПредупреждение(Команда)
	перемНазваниеОкна = "Это наше окно";
	Предупреждение("Вывели текст предупреждения",,перемНазваниеОкна);
КонецПроцедуры

И результат работы:

Предупреждение в  1С

А если установить таймаут (второй параметр), то через указанное количество секунд окно закроется.

перемНазваниеОкна = "Это наше окно";
Предупреждение("Вывели текст предупреждения",10,перемНазваниеОкна);

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

Палитра свойств  конфигурации в  1С

Если у свойства «Режим использования модальности» установлено значение «Использовать» или «Использовать с предупреждениями», то методом Предупреждение можно  пользоваться, иначе, если установлено значении «Не использовать», возникнет ошибка «Использование модальных окон в данном режим запрещено!».

Использование модальных окон в данном режим запрещено

В конфигурациях с таким режимом использования модальности следует применять метод ПоказатьПредупреждение.

Метод ПоказатьПредупреждение в  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

Развитие Механизма отображения ошибок

Новости > Инсайд новости платформы 1С8

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

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

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

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

Для всех

Фирма 1С разделила ошибки по категориям:

  1. НарушениеПравДоступа
  2. ОшибкаДоступаКЛокальномуФайлу
  3. ОшибкаСети
  4. ОшибкаРаботыСПринтером
  5. ОшибкаКомпиляцииВстроенногоЯзыка
  6. ОшибкаВоВремяВыполненияВстроенногоЯзыка
  7. ОшибкаИспользованияВстроенногоЯзыка
  8. ИсключениеВызванноеИзВстроенногоЯзыка
  9. ОшибкаСистемыВзаимодействия
  10. ОшибкаНастроекКомпоновкиДанных
  11. ОшибкаСеанса
  12. ОшибкаХранимыхДанных
  13. ПрочаяОшибка

Как категоризация ошибок будет полезна различным целевым группам – смотрите ниже.

Для конечных пользователей

Изменен внешний вид формы сообщения об ошибке; в частности, в зависимости от категории ошибки показывается соответствующая иконка и текст:

Для прикладных разработчиков

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

У объекта ИнформацияОбОшибке есть метод ЯвляетсяОшибкойКатегории(). Одна ошибка может одновременно принадлежать к нескольким категориям.

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

У глобального контекста добавлено свойство ОбработкаОшибок нового типа МенеджерОбработкиОшибок. МенеджерОбработкиОшибок предоставляет доступ к функциям для обработки ошибок. В частности, у него есть методы:

1. ПредставлениеОшибкиДляПользователя(<ИнформацияОбОшибке>) — возвращает текст ошибки, понятный пользователю (в виде форматированной строки).

2. СообщениеОбОшибкеДляПользователя(<ИнформацияОбОшибке>) — возвращает текст сообщения, которое рекомендуется показать пользователю (в виде форматированной строки). Текст содержит информацию о произошедшей ошибке и инструкцию по ее возможному исправлению.

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

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

Для администраторов

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

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

Форма «Управление настройками ошибок»:

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

Также есть возможность отправлять отчеты об аварийном завершении работы приложения в сервис регистрации ошибок платформы фирмы 1С.

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

Copyright©, «Программист 1С в г.Минске», 10.01.2020

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Понравилась статья? Поделить с друзьями:
  • При подключении принтера произошла ошибка
  • При подключении принтера пишет ошибка драйвера
  • При подключении принтера ошибка 740
  • При подключении принтера ошибка 0x0000002
  • При подключении принтера выдает ошибку 0x0000011b