Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Работает ли СтатусВозврата(0) в КОПе ? (число прочтений - 10026 )
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Работает ли СтатусВозврата(0) в КОПе ?
03. Апреля 2009 :: 09:22
Печать  
Есть Документ

Процедура ОбработкаПроведения()

   ....
   ВыполнитьПроведение();

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

Процедура ВыполнитьПроведение()

    МойКОП.Провести();
КонецПроцедуры


в МойКОП

Процедура Провести()
    ....
     Если Что-то Тогда
         СтатусВозврата(0);
         Возврат;
    КонецЕсли;
КонецПроцедуры

В любом случае в модуле документа СтатусВозврата()=1

Под отладчиком перед входом в МойКОП.Провести()
СтатусВозврата()=1
при входе в МойКОП СтатусВозврата()=1677...
щас не вспомню - какое-то длинное число
при входе внутрь очередной процедуры /функции
статусВозврата()=очередное большое число и т.д.
при выходе из КОП СтатусВозврата()=1

Это фича или я где-то недочитал доку?

1cpp v 3.0.1.21
  
Наверх
ICQ  
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #1 - 03. Апреля 2009 :: 11:41
Печать  
Насколько я понимаю, метод "СтатусВозврата" применим только в предопределенных процедурах, в которых можно отменить соответствующее "событие", а в данном случае это просто метод класса.

Наверное стоит сделать как то так:
Код
Выбрать все
Есть Документ

Процедура ОбработкаПроведения()

   ....
   СтатусВозврата(МойКОП.Провести());

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

в МойКОП

Функция Провести()
    ....
     Если Что-то Тогда
         Возврат 0;
    КонецЕсли;

    Возврат 1;
КонецФункции 

  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #2 - 03. Апреля 2009 :: 11:53
Печать  
Разве так?

в не в Коп"е такое прокатит -
статусВозврата устанавливается при вызове предопределенной
процедуры и если внутри кокай-нить вложенной процедуры
установить СтатусВозврата(0) - то исходная предопр. процедура
"увидит" его как 0
  
Наверх
ICQ  
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #3 - 03. Апреля 2009 :: 12:06
Печать  
ну может быть, но у меня так в перехватчике сделано и все работает Улыбка
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #4 - 03. Апреля 2009 :: 12:15
Печать  
CaBaT писал(а) 03. Апреля 2009 :: 11:41:
Код
Выбрать все
   ....
   СтатусВозврата(МойКОП.Провести());

 



так наверное не совсем точно
в общем случае надо
Код
Выбрать все
   ....

   Если МойКОП.Провести()=0 Тогда СтатусВозврата(0); КонецЕсли;

 

  
Наверх
ICQ  
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #5 - 03. Апреля 2009 :: 13:03
Печать  
не понял, а в чем принципиальная разница?
у меня именно так и все отлично работает Улыбка
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #6 - 03. Апреля 2009 :: 13:06
Печать  
вот что написано в хелпе:

СтатусВозврата(<?>)
Синтаксис:
СтатусВозврата(<Статус>)
Назначение:
Определение или установка статуса возврата предопределенной процедуры.
Возвращает:
1, если статус возврата - Выполнить Действие;
0, если статус возврата - Отменить Действие.
Параметры:
<Статус> - необязательный параметр:
если опущен, то установка статуса возврата предопределенной процедуры не меняется;
если задано 1, то устанавливается статус возврата - Выполнить Действие;
если задано 0, то устанавливается статус возврата - Отменить Действие.
Замечание:
Функция/процедура СтатусВозврата применяется в теле предопределенных процедур.
Начальное значение статуса возврата предопределенной процедуры равно 1 - Выполнить Действие, устанавливается системой при вызове предопределенной процедуры.
Подробнее см. в документации, глава 'Системные процедуры и функции'
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #7 - 03. Апреля 2009 :: 13:33
Печать  
Разница в том,
если где-то раньше устанавливается СтатусВозврата(0)

то при СтатусВозврата(МойКоп.Провести())

СтатусВозврата можно ошибочно привести обратно в 1
  
Наверх
ICQ  
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #8 - 03. Апреля 2009 :: 13:34
Печать  
и все равно вопрос остается открытым - передается ли из КОП статусВозврата в вызывающую предопределенную процедуру
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #9 - 06. Апреля 2009 :: 09:36
Печать  
sashas09 писал(а) 03. Апреля 2009 :: 13:34:
и все равно вопрос остается открытым - передается ли из КОП статусВозврата в вызывающую предопределенную процедуру

Давай закроем - статус возврата из КОП в вызывающий модуль не передается!
Проблема в том, что
1. у 1С внутри для каждого программного модуля задается свой программный статус возврата, а КОП также является отдельным модулем
2. СтатусВозврата, используемый в 1С, это неявный возврат данных, что может приводить и приводит к неявному коду Печаль

В 1С++ принято решение не использовать подобную неявную схему возврата данных. Используйте код возврата, непосредственно возвращаемый функций - Возврат 1/0.

ЗЫ из-за специфических особенностей работы Перехватчика статус возврата автоматически преобразуется из функций/процедур обработчиков.
Для обычного КОП, как я уже написал, подобного преобразования нет и никогда не будет.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #10 - 06. Апреля 2009 :: 09:38
Печать  
CaBaT писал(а) 03. Апреля 2009 :: 11:41:
Код
Выбрать все
[highlight]СтатусВозврата(МойКОП.Провести()); 



sashas09 писал(а) 03. Апреля 2009 :: 12:15:
в общем случае надо
Код
Выбрать все
Если МойКОП.Провести()=0 Тогда СтатусВозврата(0); КонецЕсли; 



Подытожу - оба вариант применимы, но последний в общем случае более точен, конечно Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #11 - 06. Апреля 2009 :: 09:43
Печать  
artbear писал(а) 06. Апреля 2009 :: 09:36:
sashas09 писал(а) 03. Апреля 2009 :: 13:34:
и все равно вопрос остается открытым - передается ли из КОП статусВозврата в вызывающую предопределенную процедуру

Давай закроем - статус возврата из КОП в вызывающий модуль не передается!
Проблема в том, что
1. у 1С внутри для каждого программного модуля задается свой программный статус возврата, а КОП также является отдельным модулем
2. СтатусВозврата, используемый в 1С, это неявный возврат данных, что может приводить и приводит к неявному коду Печаль

В 1С++ принято решение не использовать подобную неявную схему возврата данных. Используйте код возврата, непосредственно возвращаемый функций - Возврат 1/0.

ЗЫ из-за специфических особенностей работы Перехватчика статус возврата автоматически преобразуется из функций/процедур обработчиков.
Для обычного КОП, как я уже написал, подобного преобразования нет и никогда не будет.


а как же глобальный модуль?
из него в модуль документа - передается Статус
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #12 - 06. Апреля 2009 :: 09:56
Печать  
Неа, не так все происходит Улыбка
При возврате из глобальника 1С устанавливает флаг возврата в глобальном модуле, а уж потом в модуле документа, после получения управления от глобальника, проверяет статус возврата глобальника и выполняет спец.действия в зависимости от этого кода.
Т.е. для КОП такой вариант не очень подойдет.

Но все равно основные причины смотрите выше, они важнее Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #13 - 06. Апреля 2009 :: 11:22
Печать  
sashas09 писал(а) 03. Апреля 2009 :: 12:15:
CaBaT писал(а) 03. Апреля 2009 :: 11:41:
Код
Выбрать все
   ....
   СтатусВозврата(МойКОП.Провести());

 



так наверное не совсем точно
в общем случае надо
Код
Выбрать все
   ....

   Если МойКОП.Провести()=0 Тогда СтатусВозврата(0); КонецЕсли;

 



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

Код
Выбрать все
Попытка
.... Действия по проведению ...
Исключение
    СтатусВозврата(0);
КонецПопытки
 


И в копах не париться с возвращаемыми значениями и статусом возврата.

Ошибка?
Кинь исключение.
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Работает ли СтатусВозврата(0) в КОПе ?
Ответ #14 - 06. Апреля 2009 :: 11:30
Печать  
orefkov писал(а) 06. Апреля 2009 :: 11:22:
Ошибка? Кинь исключение.


Блин, красивое неочевидно...

Буду ща пробовать
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать