Каталог решений - [1С:Предприятие 7.7] Занимательная передача параметров

[1С:Предприятие 7.7] Занимательная передача параметров

[1С:Предприятие 7.7] Занимательная передача параметров

В наличии

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

(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’е сказано:
——————————————————————
«Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).»
——————————————————————

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

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

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

has been added to your cart:
Оформление заказа