Главная » Статьи » "1С" Програмирование

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

Через минуту Вы получите "Гостевой доступ"




Занимательная передача параметров (1С:Предприятие 7.7 (7.70.023))
Занимательная передача параметров (1С:Предприятие 7.7 (7.70.023))
 
Возможно, все об этом давно знают, возможно, это уже исправлено в более свежих релизах, возможно, об этом есть в Help'е - я не видел. Возможно, даже в этом есть какой-то эзотерический смысл – я не знаю.

"Казнить нельзя, помиловать.
Казнить, нельзя помиловать."

(c) Детская сказка

Платформа 1С:Предприятие 7.7 (7.70.023)

Предположим, я написал процедуру:
//---------------------------------------------------------------
Процедура ПередачаПараметров1(Пар1, Пар2=2, Пар3=3) Экспорт
 Сообщить("Пар1="+?(ПустоеЗначение(Пар1)=1,"""Пустой""",Пар1));
 Сообщить("Пар2="+?(ПустоеЗначение(Пар2)=1,"""Пустой""",Пар2));
 Сообщить("Пар3="+?(ПустоеЗначение(Пар3)=1,"""Пустой""",Пар3));
КонецПроцедуры
//---------------------------------------------------------------

И теперь, предположим, хочу ее вызвать, причем опустив первый параметр, т.е. примерно так:
//---------------------------------------------------------------
ПередачаПараметров1( , );
//---------------------------------------------------------------

По идее, я должен получить в строке состояния:
-----------------------------------------------------------------
Пар1="Пустой"
Пар2=2
Пар3=3
-----------------------------------------------------------------

Но, совершенно удивленно получаю следующий результат:
-----------------------------------------------------------------
Пар1="Пустой"
Пар2="Пустой"
Пар3=3
-----------------------------------------------------------------

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

Да, я понимаю, что можно вызвать следующим образом и получить нужный результат:
//---------------------------------------------------------------
ПередачаПараметров1(ПолучитьПустоеЗначение());
//---------------------------------------------------------------

Но, все-таки, давайте заглянем в Help, читаем, четко и ясно в Help'е сказано:
-----------------------------------------------------------------
«Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).»
-----------------------------------------------------------------

Ну, хорошо, есть там такие слова:
-----------------------------------------------------------------
«Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.»
-----------------------------------------------------------------

Ну, знаете, слово «можно» это еще не означает обязательно. Да и второй параметр в нашем случае не последний, есть еще третий.

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

http://venger.ya.ru/index_blog.xml

Категория: "1С" Програмирование | Добавил: c1 (2009 Февраль 21)
Просмотров: 1154 | Теги: Занимательная передача параметров ( | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar