Помогите дилетанту разобраться с формулой
Автор KENT, 21 фев 2018, 20:17
0 Пользователей и 1 гость просматривают эту тему.
Помогите разобраться с формулой или подскажите как устанавливать %НДС при автоматическом создании номенклатуры из файла dbf
Пытаюсь вычислить по формуле, но выдает вот такую ошибку.
Строка 1 (Ставка НДС): Ошибка при вычислении выражения Если ТекстЯчейки = «18» Тогда
Результат = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
Иначе
Если ТекстЯчейки = «10» Тогда
Результат = Перечисления.СтавкиНДС.НДС10;
КонецЕсли;
Иначе
Если ТекстЯчейки = «0» Тогда
Результат = Перечисления.СтавкиНДС.НДС0;
КонецЕсли;
Иначе
Результат = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли: {ОбщийМодуль.ор_ЗагрузкаИзЭлектронныхДокументовСервер.Модуль(3254)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(4,2)}: Ожидается последовательность операторов
Уберите лишние КонецЕсли, код должен приобрести вид:
Если ТекстЯчейки = "18" Тогда
Результат = Перечисления.СтавкиНДС.НДС18;
Иначе Если ТекстЯчейки = "10" Тогда
Результат = Перечисления.СтавкиНДС.НДС10;
Иначе Если ТекстЯчейки = "0" Тогда
Результат = Перечисления.СтавкиНДС.НДС0;
Иначе
Результат = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
Цитата: pavl_vs от 21 фев 2018, 20:29
Уберите лишние КонецЕсли, код должен приобрести вид:
Если ТекстЯчейки = "18" Тогда
Результат = Перечисления.СтавкиНДС.НДС18;
Иначе Если ТекстЯчейки = "10" Тогда
Результат = Перечисления.СтавкиНДС.НДС10;
Иначе Если ТекстЯчейки = "0" Тогда
Результат = Перечисления.СтавкиНДС.НДС0;
Иначе
Результат = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
Убрал
Ошибка при вычислении выражения Если ТекстЯчейки = «18» Тогда
Результат = Перечисления.СтавкиНДС.НДС18;
Иначе Если ТекстЯчейки = «10» Тогда
Результат = Перечисления.СтавкиНДС.НДС10;
Иначе Если ТекстЯчейки = «0» Тогда
Результат = Перечисления.СтавкиНДС.НДС0;
Иначе
Результат = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;: {ОбщийМодуль.ор_ЗагрузкаИзЭлектронныхДокументовСервер.Модуль(3254)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(9,11)}: Ожидается ключевое слово ‘КонецЕсли’ (‘EndIf’)
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Помогите дилетанту разобраться с формулой
Похожие темы (5)
Поиск
-
-
March 27 2022, 20:40
- IT
- Cancel
Выполнить
Оператор Выполнить позволяет выполнить любой кусок кода, переданный ему как параметр:
Процедура Команда1(Команда) в = Неопределено; Код = "а = 1; б = 2; в = а + б"; Выполнить(Код); Сообщить(в); // 3 КонецПроцедуры
В данном примере переменная «в» будет равна 3.
Код, который передается параметром оператору Выполнить не может содержать объявление переменных и процедуры и функции. По сути весь код и так будет выполняться в процедуре.
Процедура Команда1(Команда) в = Неопределено; Код = "Перем а; а = 1; б = 2;"; Выполнить(Код); //ошибка Сообщить(в); КонецПроцедуры
В данном примере будет ошибка:
{(1,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции {Обработка.Обработка1.Форма.Форма.Форма(6)}: Выполнить(Код);
Процедура Команда1(Команда) в = Неопределено; Код = "а = 1; б = 2; Процедура Сумма(а, б) в = а + б; КонецПроцедуры"; Выполнить(Код); //ошибка Сообщить(в); КонецПроцедуры
Здесь тоже будет ошибка:
{(1,15)}: Ожидается последовательность операторов
{Обработка.Обработка1.Форма.Форма.Форма(6)}: Выполнить(Код);
Параметр оператору Выполнить можно передавать без скобок, можно напрямую, без промежуточной переменной «Код»:
Процедура Команда1(Команда) в = Неопределено; Выполнить "а = 1; б = 2; в = а + б;"; Сообщить(в); КонецПроцедуры
Вычислить
Функция Вычислить используется для вычисления арифметических, логических и операций конкатекации строк:
Процедура Команда1(Команда) а = 1; б = 2; Сумма = Вычислить("а+б"); Результат = Вычислить("а>б"); Строка = Вычислить("Строка(а) + Строка(б)"); Сообщить(Сумма); //3 Сообщить(Результат); //Ложь Сообщить(Строка); // "12", это строка, а не число КонецПроцедуры
Код в функции Вычислить не может содержать несколько операторов:
Процедура Команда1(Команда) а = 1; б = 2; Результат = Вычислить("а+б; а>б;"); //ошибка Сообщить(Результат); КонецПроцедуры
Отличие Выполнить от Вычислить
* Выполнить — это оператор встроенного языка, Вычислить — функция
* В Выполнить можно использовать несколько операторов, в Вычислить только одно выражение
* Выполнить работает как процедура. Вычислить возвращает результат выполнения, работает как функция.
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
|
|
|
|
Правила раздела:
- Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
- Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
- Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.
Высказать своё мнение о модераторах раздела можно здесь: evGenius
8.2. Можно ли в «Выполнить» запихнуть функцию или альтернативное решение?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
СтрокаТ = « |Функция ПолучитьОдин() | Возврат 1; |КонецФункции |Сообщить(«»Один=»»+ПолучитьОдин()); |»; Выполнить(СтрокаТ);
Даёт ошибку: Есть ли способ объявить произвольную функцию? Сообщение отредактировано: lastlogic — 16.07.12, 06:19 |
Rust |
|
|
Цитата lastlogic @ 16.07.12, 06:19 Есть ли способ объявить произвольную функцию?
Хм.. Интересный вариант. |
|
lastlogic |
|
|
Пока сделал как правой рукой левое ухо чесать: Перем ФункцииОбщегоМодуля; Функция ПолучитьЗначениеВстроеннойФункции(ИмяФункции, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено, Параметр4 = Неопределено) Перем Результат; Стр = ФункцииОбщегоМодуля.НайтиПоЗначению(ИмяФункции); Если Стр = Неопределено Тогда ВызватьИсключение(«Неопределена встроенная функция «»»+ИмяФункции+»»»»); Иначе Выполнить(Стр.Представление); КонецЕсли; Возврат Результат; КонецФункции ФункцииОбщегоМодуля = Новый СписокЗначений; ФункцииОбщегоМодуля.Добавить(«ПолучитьОдин», «Результат = 1»); Сообщить(«Проверить работу функции=»+ПолучитьЗначениеВстроеннойФункции(«ПолучитьОдин»)); |
|
Outlander |
|
|
По-моему в вычислить() можно было нечто подобное завести… Могу и ошибаться |
|
lastlogic |
|
|
Цитата Outlander @ 16.07.12, 10:33 По-моему в вычислить() можно было нечто подобное завести Вычислить изначально треба выражение, пробовал… ЗЫ: может и одинэсники замутили что-то подобное? |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- 1С: Проблемы и решения
- Следующая тема
[ Script execution time: 0,0218 ] [ 15 queries used ] [ Generated: 11.02.23, 19:15 GMT ]
Обработка в помощь программисту — тестировщику. Консоль позволяет выполнять код 1С на встроенном языка, по сути является универсальной внешней обработкой
Обновление, версия 0.7
-Когда добавляем в переменные параметры из запроса (кнопка «Найти параметры») в буфер обмена заполняется текст с установкой этих параметров. Достаточно потом в тексте сделать Ctrl+V
-Добавил конструктор форматной строки (в тексте правой кнопкой — «Форматная строка») если выделить форматную строку то откроется со значением, если не выделено то попытается выделить сам и вызвать конструктор
-«Обернуть» в форматную строку выделяем кусок текста (например «ЗначениеДата») и вызываем «Обернуть в формат строку» — получаем Формат(ЗначениеДата,»ДФ=’dd.MM.yyyy’»)
-Пофисил вызов конструктора запроса если в нем были строки с комментариями (Также как и в конфигураторе после изменения запроса комментарии пропадут)
-В редакторе (вторая вкладка) ссылок теперь можно редактировать Табличные Части (по строке с именем табличной части 2 клика — и откроется конструктор таблицы)
-Ну и по мелочи всякие штуки, в табличном документе запоминает ширину колонок (можно отключить галочкой «не запоминать ширину»), расширил список типов в переменных, при выводе ВТД если в 1 ячейку попадет таблица значений ее можно двойным кликом открыть, если в переменной ссылочный тип (даже пустая ссылка) можно через правую кнопку вызвать форму списка, и т.д. возможно что то забыл указать.
Обновление версия 0.6
-Пофиксил всплывающие баги
-Оптимизировал раскладку в дерево значений, теперь она идет поэтапно по нажатию на «+»
-Под переменными добавил поле для быстрого ввода пустой ссылки (если ввести «Док Спис с рас» — найдет по имени в метаданных или по синониму, при нажатии на Enter — добавить в переменные пустую ссылку)
-Добавил печать штрихкода
ш = ШК(Штрихкод,ТипКода = 1,Ширина = 800,Высота = 250,РазмерШрифта = 28,ОтображатьТекст = ИСТИНА,ПрозрачныйФон = ИСТИНА,УголПоворота = 0)
Возвращает картинку, ее можно вывести в ВТД(ш);
-Добавил вкладку с фоновыми заданиями (Типовая больно долго работает решил сделать для себя)
-Переменные можно выводить в табличный документ из контекстного меню
-Кнопка очистки проекта, в табличном документе в конетекстном меню тоже есть кнопка очистить
-Если нажать правой кнопкой по запросу и выбрать «найти параметры» — добавит в переменные найденные параметры
-Добавить «выполнить выделенное» в тексте выделяем нужный кусок кода — правая кнопка «Выполнить выделенное»
Обновление версия 0.5
1. Авто выделение текста запроса при вызове конструктора (как в конфигураторе) теперь не обязательно выделать текст запроса в ручную (пока багов не встречал в работе)
2. Добавлен констуктор таблицы значений (При выборе типа переменной выбрать тип «таблица значений»), в коде она определяеться как таблица значений, если выполняеться на клиенте то массив структур, при перетаскивании ее в текст кода генерируется запрос со всеми полями таблицы. Перетаскивание из «дерева» табличных частей объектов в «переменные».
3. Добавлена процедура ДП — добавить в переменные (из кода можно добавлять в список переменных)
4. Добавлены новые полезные функции в список функций
5. Перевел диалоги на асинхронные вызовы (для интерфейса Такси)
6. Вынес обработку вывода (функция ВТД()) выполняеться в конце, после выполнения всего кода, в процессе выполнения данные помещаються в буфер, потом выводяться, таким образом не время вывода не входит в показатели выполнения
Обновление версия 0.4
- Добавлена поддержка конструктора запросов для тонкого клиента для версии платформы 8.3.5 и выше (Для этого необходимо выделить текст запроса — правая кнопка мыши — конструктор запроса)
- Добавлен конструктор запроса с обработкой результата (только для создания)
- Заменил список выбора типа переменных на дерево (как в конфигураторе)
- Немного переработал интерфейс (всякие украшательства)
- Оптимизировал код / поправил выявленные ошибки
- Добавил дерево метаданных (Новая вкладка)
- Добавил поддержку типа «РезультатЗапроса» в функцию ВТД(Результат);
- Добавил возможность вывода Заголовка у таблицы Функция ВТД(ТЗ,Добавить = Ложь,Заголовок = Неопределено,СразуВРезультат = Истина)
Обновление версия 0.3
- Добавлен простой редактор реквизитов для спавочников и документов (можно передавать из Переменных, кнопка «В редактор»)
- Исправление мелких ошибок/недочетов
Обновление версия 0.2
- Добавлено функция добавления переменных из табличной части (Выделяем область в табличной части — правая кнопка мышки — добавить в переменные)
- Добавлен показатель времени выполнения (Спасибо за наводку gruk)
- Добавлены встроенные функции «НайтиСсылки(значение)» — находит ссылки на ссылочный объект и выводит данные в табличный документ
- Добавлены встроенные функции «МетаданныеВДерево(ОчищатьДерево = истина)» — в окно дерева выводит метаданные конфигурации
- Функци ВТД(ТЗ,Добавлять = Ложь) Теперь понимает Дерево значений, а также раскрашивает ссылочный тип
- Добавил подробное описание ошибки
- Немного причесал код
Еще объясню функционал: над деревом есть поле с «@@» так вот при перетаскивании из дерева в текст — выполняется подстановка в из шаблона
Где @@ — это полный путь от значения до корня дерева: Пример — «Док.ГрафикПлатежей» можно задать шаблон ВТД(@@.Выгрузить()); и получится строка ВТД(Док.ГрафикПлатежей.Выгрузить());
«Док.Контрагент.Код» — весть путь
Также есть ## — Корень («Док»)
и #@ — Весь путь без корня («Контрагент.Код«)
Например шаблон: ПолучитьЗначениеРеквизита(##,»#@»);
Можно использовать на клиенте при получении реквизита: Строка «Док.Контрагент.Код» будет как ПолучитьЗначениеРеквизита(Док,»Контрагент.Код»);
Вступление
Часто приходилось проверить либо эмулировать ситуацию которая выполнялось в коде и посмотреть как она себя ведет и по чему так а не иначе, решил написать обработку помощник, куда вставляем код задаем переменные и значения и выполняем.
Также поможет при написании процедур и функций, тестировать как они работают в разных ситуациях.
Либо написать код исправления справочника или регистра, сохранить в файл и отдать аналитику который запустит ее в нужной базе.
Возможности
- 1. Добавление в список переменных для использования их в коде
- 2. Раскладывать переменные в дерево значений
Переносим Drag&Drop из переменных в поле дерева и обратно
Также Drag&Drop в текст
- 3. Выводить данные в табличный документ (функция ВТД())
встроенная функция: ВТД(значение)
— ТаблицаЗначений, Массив,Массив Структур ,Структура,Соответствие
-
- 4. Выполнение кода на сервере или клиенте (галочка над текстом выполнения)
- 5. Сохранение наработок в файл
- 6. Часто используемый список функции, которые заложены в обработке и не только, так же Drag&Drop
Если (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); // Вызов функции
Код 1C v 8.2 УП
Попытка
// Операторы попытки
Исключение
// Операторы исключения [ВызватьИсключение;]
Сообщить(ОписаниеОшибки());
КонецПопытки;
Англоязычный синтаксис:
Try
// Операторы попытки
Except
// Операторы исключения
[Raise;]
// Операторы исключения
EndTry;
Параметры:
// Операторы попытки
Исполняемый оператор или последовательность таких операторов.
Исключение
Операторы, следующие за ключевым словом Исключение выполняются, если при выполнении последовательности операторов произошла ошибка времени выполнения.
// Операторы исключения
Исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию.
ВызватьИсключение
Оператор позволяет вызвать исключение в тех случаях, когда несмотря на отработку исключительной ситуации операторами исключения необходимо прервать выполнение модуля с ошибкой времени выполнения. Оператор допустим только внутри операторных скобок Исключение – КонецПопытки.
Выполнение данного оператора прекращает выполнение последовательности операторов исключения и производит поиск более «внешнего» обработчика исключения (при вложенных попытках). Если таковой есть, то управление передается на его первый оператор. Если нет, то исключительная ситуация обрабатывается системно, выдается сообщение о первоначально возникшей ошибке, а выполнение модуля прекращается.
КонецПопытки
Ключевое слово, которое завершает структуру оператора обработки исключительных ситуаций.
Описание:
Оператор Попытка управляет выполнением программы, основываясь на возникающих при выполнении модуля ошибочных (исключительных) ситуациях, и определяет обработку этих ситуаций. В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля. Не предусмотрено определяемых пользователем исключений.
Если при выполнении последовательности операторов попытки произошла ошибка времени выполнения, то выполнение оператора, вызвавшего ошибку, прерывается и управление передается на первый оператор последовательности операторов исключения. При этом управление будет передано даже в том случае, если ошибку вызвал оператор, находящийся в процедуре или функции, вызванной из операторов попытки. Если ошибка произошла в вызванной процедуре или функции, то ее выполнение будет прервано, а локальные переменные – уничтожены. Это справедливо для любой вложенности вызовов. После выполнения последовательности операторов исключения управление передается на следующий за ключевым словом КонецПопытки оператор. Если же последовательность операторов попытки выполнилась без ошибок, то последовательность операторов исключения будет пропущена и управление также
будет продолжено с оператора, следующего за ключевым словом КонецПопытки.
Конструкции Попытка – Исключение – КонецПопытки могут быть вложенными. При этом, при возникновении исключительной ситуации управление передается на тот обработчик, в попытке которого произошла ошибка. Если же в последовательности операторов исключения этого обработчика выполняется оператор ВызватьИсключение, выполнение передается вышестоящему обработчику исключения и так далее. Если вышестоящего обработчика нет, исключительная ситуация обрабатывается системно с прекращением выполнения программного модуля.







