1с выйти из процедуры

Обновлено: 04.07.2024

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

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

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

Имя_проц Назначает имя процедуры.
Знач Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, то есть изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
Парам1 , . ПарамN Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст.
= ДефЗнач Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров.
Экспорт Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей.
// Объявления локальных переменных Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры.
// Операторы Исполняемые операторы процедуры.
Возврат Необязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно.
КонецПроцедуры Обязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре.

Функция

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

Функции отличаются от процедур только тем, что возвращают Возвращаемое значение . Конец программной секции функции определяется по оператору КонецФункции .

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

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

(8) согласен, с Перейти ж*па у 1С. :)
(6) громоздко получается. да и более одного раза выходить, получается:

(15) Сильно подозреваю, что человек перемудрил с условиями - вот и мучается с проблемой. А когда будет строить пример - сообразит, где у него собака порылась.

и ловить в эксепшенах.

(16) не знаю. я просто вообразил с какой ветряной мельницей борется автор.. Придумал такую:

очевидно, что такое можно решить так:

Это для тех, кому диета (зачеркнуто) рилигия запрещает ходить по меткам.
Клево. надо вспомнить, где это я так прокачал телепатический модуль
(28) на самом деле, нужно не войти с условием, а _выйти при условии_
(0) приведи пожалуйста пример когда надо выйти Если можешь
(31) Вот ничего не понятно. Рискну предположить, что если аккуратно расписать логику алгоритма - никаких выходов не понадобится. По крайней мере, в этом примере необходимости в них не видно.
ого. всё еще не вышел из "если". лабиринт с минотавром какой-то :)
Все предложенные способы не что иное, как эмуляция ГоуТу :(
(13) это тогда на крайняк :)
а то пустая функция ради выхода появится.
(25) а если ошибка внутри запроса будет, который внутри Попытки? а код отлично отработает, и никто не узнает, что результат - полная лажа :)
(26) это как в (23), углубленный ))
(27) под каждым ИначеЕсли тогда (ведь меняется только Условие 2 в этом примере - Условия 3 нет) надо повторять один и тот же код не на одну страницу прокрутки.
Но можно попробовать, может, что-то и получится.
(34) прочитал (27) :))
и потом, если он повторяется для каждого - вынеси его за КонецЕсли.
(49) в (48) я в ответе на (13) уже указал, что появится функция затолько ради выхода, а может и не одна ))
(51) ну как бы код-то под "Если.." должен исполняться при наличии основного условия, а вот выходить из "Если.." - при невыполнении и проблем внутри него.
(37) это как-то вольно с моим кодом обошлись ))
у меня ". " под "Если.." - это код, который должен выполняться при Флаг ))
Вывожу из Если по фотографии.
Отворот, приворот процедур и функций.
Снимаю порчу с циклов.
100% гарантия.
(43) нежелательность Попытка. Исключение я описал в (48)
(46) работал бы он только железно, а не как придется :(
(47) новая функция за ради выхода появится, это смущает.
(59)
Делаю потихоньку, фото Нуралиева не помогает, лучше несколько фото Франклина.
(72) автор просто с дискретной математикой видимо не знаком
(58) "Возврат" куда?
после "Если. " другой исполняемый код в этой функции, общий для "Если. " и "Если НЕ. "
(62) если "выход" - это выход из функции, то строчкой выше (ответ на (58) описал, что не получается.
(69) ну это вариант
"Если .
Если .
Если.
Конец
.
"
(73) с какой математикой не знаком? :)
Мне всего лишь понадобился выход из оператора "Если".
Если есть время, объясните связь математики и условия выше ))

(75) а то. такого ужаса я давно не видел, сэкономила на фотографе :)

2(74)
блин. вот ты тугой. Еще раз:

(0) неправильно построенное Если.
переделай.

(31) это только подтверждает.

(83) глупость - это когда пишут программы не сложнее калькулятора, зато сами. И то в виде виндовского "Режим обычный, функционала нет".
Множественное вложение "Если. Если. " ведет к полной переделке этой большой функции, а переделка чревата ошибками.
(80) это сродни (69):
Проверка валидности переменных до основного их использования.
Но тогда в вашем случае, нахождение и проверку валидности ВСЕХ внутренних ключевых переменных основной конструкции "Если Флаг. " нужно выносить за эту самую "Если Флаг. " и делать до. Т.е.:

При том, что ПеременнаяДва = 0 И ПеременнаяТри = 0 и остальные используются только для "Если ФЛАГ. ", и более нигде не нужны.
А т.к. это тоже код не одной строчкой, и даже не страничкой, зеленить комменты, что и откуда это взялось, и зачем тут нарисовалось.
Опять же, всю эту проверку в отдельную функцию - можно, но осторожно и неудобно из-за принципа объявления и передачи переменных: переменные из локальных для функции превращаются глобальными для модуля, либо гонять их десятком параметров туда-сюда, что опять же усложняет дальнейшее исправление (ну да, в УПП так и сделано, согласен. Но это не есть хорошо :) ).

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

Внимание! Материал данной статьи устарел. Рекомендуется использовать документацию к платформе "1С:Предприятие 8".

Встроенный язык 1С:Предприятия поддерживает два способа передачи параметров в процедуры и функции: передача параметров по ссылке и передача параметров по значению.

Передача параметров по ссылке

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

Передача параметров по значению

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

Особенности передачи переменных различных типов данных по значению

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

Рассмотрим в качестве примера ситуацию, когда параметром процедуры, передаваемым по значению, является таблица значений. Внутри вызываемой процедуры ОбработатьТаблицу() создается новый экземпляр таблицы значений, в который добавляется три строки. Это никак не влияет на состояние таблицы значений Тз , переданной в качестве фактического параметра при вызове процедуры ОбработатьТаблицу() :

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

Схематично изобразить происходящее при вызове процедуры СвернутьТаблицу(Тз) можно следующим образом:

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

(2) - из процедуры вызывается метод Свернуть таблицы значений;

(3) - формальный параметр ссылается на тот же самый экземпляр таблицы значений, что и фактический параметр (переменная Тз) - происходит свертка в экземпляре таблицы значений, на которую ссылается переменная Тз;

(4) - выходим из процедуры. Экземпляр таблицы значений, на которую ссылается переменная Тз, находится в свернутом состоянии.

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

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

Далее подробнее про функции 1С и процедуры 1С.

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

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

Функция Функция1(Параметр)
Возврат Параметр * 2;
КонецФункции

Переменная1 = Функция1(10);
//Переменная1 будет равна 20

При передаче параметра в процедуру/функцию, он передается «по ссылке». Это значит, что изменяя его внутри процедуры, Вы изменяете его значение, при доступе после окончания функции 1С. Таким образом, предыдущий пример можно написать так:

Процедура Процедура1(Параметр)
Параметр = Параметр * 2;
КонецПроцедуры

Переменная1 = 10;
Процедура1(Переменная1);
Сообщить(Переменная1);
//Результатом будет 20

Чтобы передать внутрь процедуры значение переменной, а не ее саму:

Процедура Процедура1(ЗНАЧ Параметр)
//действия..
КонецПроцедуры

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

Функция Функция1(Параметр1, Параметр2, Параметр3 = "Строковое значение")
//Чтото делаем
КонецФункции

//Вызов функции без некоторых параметров
//параметр2 будет равен Неопределено
//параметр3 будет равен "Строковое значение"
Функция1(10);

//Вызов функции без второго параметра
Функция1(10, , "Значение");

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

Читайте также: