Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 апр 2024, 22:58

1с 8.2.Не срабатывает Отказ проведения.

Автор |R|U|D|E|N, 14 июл 2011, 10:23

0 Пользователей и 1 гость просматривают эту тему.

|R|U|D|E|N

Добрый день. У меня в обработке проведения есть два небольших блока кода с различными проверками

Первый:
//Проверка установленного флажка //----------------------------------------------------------------------
Если ЭтотОбъект.Отработан = Истина Тогда
Сообщить("Для проведения документа, снемите флажек - Отработан");
Сообщить("При установленном флажке Отработан, возможно только сохранение документа!");
Отказ = Истина;
КонецЕсли;


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

Второй блок:
//Выполняется контроль складов по ролям //----------------------------------------------------------------
Если РольДоступна("РядовойМенеджерГО") = Истина ИЛИ РольДоступна("СтаршийМенеджерГО") = Истина Тогда
Если ЭтотОбъект.ПеремещениеИЗ = Справочники.Склады.Сервис ИЛИ ЭтотОбъект.ПеремещениеИЗ.СкладИнжинер = Истина Тогда
Сообщить("Нет прав для перемещения с указанного склада - "+ЭтотОбъект.ПеремещениеИЗ+"!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;


Если выполняется это условие то сообщение из этого блока выдается(тойсть условие истино и Отказ = Истина) но код ниже этого блока все равно продолжает выполняться!!! Тойсть даже при том что указанно  Отказ = Истина выполнение не останавливается и документ проводится!!

Как это понимать? Подскажите пожалуйста?



kastrtroy2006

1. Чтобы процедура не продолжалась дальше, надо вставить оператор Возврат


//Выполняется контроль складов по ролям //----------------------------------------------------------------
Если РольДоступна("РядовойМенеджерГО") = Истина ИЛИ РольДоступна("СтаршийМенеджерГО") = Истина Тогда
    Если ЭтотОбъект.ПеремещениеИЗ = Справочники.Склады.Сервис ИЛИ ЭтотОбъект.ПеремещениеИЗ.СкладИнжинер = Истина Тогда
        Сообщить("Нет прав для перемещения с указанного склада - "+ЭтотОбъект.ПеремещениеИЗ+"!");
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;


2. Если значение Отказ = истина, то документ не проведется.
Выложите всю процедуру проведения.

|R|U|D|E|N

Код процедуры слишком большой....

Но за вторым блоком кода идут еще ряд проверок в которых Отказ получает Ложь и документ проводится.

У меня вопрос почему после первого блока где Отказ = Истина процедура дальше не выполняется. А вот после второго блока где тоже Отказ = Истина процедура продолжает выполняться.

Как мне сделать, что бы при первом попавшемся Отказ = Истина процедура намертво останавливалась не выполняя остальные проверки??

Lis3004

//Проверка установленного флажка //---------------------------------------------------------------------- Если ЭтотОбъект.Отработан = Истина ТогдаСообщить("Для проведения документа, снемите флажек - Отработан");
Сообщить("При установленном флажке Отработан, возможно только сохранение документа!");
Отказ = Истина;
Возврат;
КонецЕсли;

|R|U|D|E|N

Спасибо огромное за такую маленькую но невероятно ценную подсказку!!)

Все работат. Код дальше не выполняется!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск