Платформа 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'е сказано:
-----------------------------------------------------------------
«Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).»
-----------------------------------------------------------------
Ну, хорошо, есть там такие слова:
-----------------------------------------------------------------
«Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.»
-----------------------------------------------------------------
Ну, знаете, слово «можно» это еще не означает обязательно. Да и второй параметр в нашем случае не последний, есть еще третий.
Т.е. получается, что при передаче фактических параметров при вызове процедуры, если после последней запятой, фактический параметр опущен, то соответствующему формальному параметру, в любом случае будет присвоено пустое значение, а не значение по умолчанию, которое ему задано.