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