Процедуры и функции программного модуля
Предварительное описание процедур и функций
В тексте программного модуля допускается предварительное описание процедур и функций без их определения.
Пример:
· фрагмента текста модуля, содержащий предварительное описание процедуры. Процедура А(Парам1, Парам2) Далее Процедура Б() Перем АА, ББ; ... А(АА, ББ); ... КонецПроцедуры Процедура А(Парам1, Парам2) ... КонецПроцедуры
В приведенном фрагменте видно, что обращение к процедуре А (из процедуры Б) предшествует по тексту ее фактическому определению, но перед процедурой Б имеется предварительное описание процедуры А.
Процедура А(Парам1, Парам2) Далее
На то, что это предварительное описание указывает наличие ключевого слова Далее (англоязычный синоним – Forward), которое замещает в случае предварительного описания тело процедуры и ключевое слово КонецПроцедуры. Предварительное описание процедуры/функции может содержаться в любом месте текста модуля, где допускается фактическое определение процедуры или функции, а сам заголовок процедуры/функции должен в точности соответствовать заголовку в фактическом определении, включая наличие, если необходимо, ключевого слова Экспорт и имен формальных параметров.
Передача параметров
По умолчанию параметры методов, процедур и функций передаются по ссылке, то есть изменение внутри процедуры или функции значения формального параметра ведет к изменению значения соответствующего фактического параметра. При передаче параметра по значению изменение значения формального параметра никак не влияет на фактический параметр вызова процедуры. Для указания того, что тот или иной параметр следует передавать по значению, следует в исходном тексте процедуры или функции перед именем параметра записать ключевое слово Знач (англоязычный синоним – Val).
Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.
Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает "пустое" значение (значение неопределенного типа).
Если при вызове метода, процедуры или функции параметры не передаются (пустой список параметров), то, тем не менее, круглые скобки обязательно требуется ставить.
Пример:
Перем Глоб; // Описание функции Функция МояФункция(Знач Пар1, Пар2, Пар3) Экспорт Лок = Глоб + Пар1 + Пар2 + Пар3; Пар1 = 40; Возврат Лок; КонецФункции Глоб = 123; А = 10; Рез = МояФункция(А, 6, 7); // Вызов функции // Здесь Рез = 146, а переменная А = 10, несмотря на то, что в теле // функции значение параметра Пар1 изменено на 40