Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_ПрикладноеПрограммирование8.doc
Скачиваний:
45
Добавлен:
22.09.2019
Размер:
51.67 Mб
Скачать

1.4.3.19.1.3 Предварительное описание процедур и функций

Иногда требуется поместить оператор вызова процедуры или функции выше ее описания по тексту модуля, например, если он используется при описании другой процедуры или функции, на этот случае язык 1С допускает в тексте программного модуля предварительное описание процедур и функций без их определения.

Пример фрагмента текста модуля, содержащего предварительное описание процедуры.

Процедура А(Парам1, Парам2) Далее

Процедура Б()

Перем АА, ББ;

...

А(АА, ББ);

...

КонецПроцедуры

Процедура А(Парам1, Парам2)

...

КонецПроцедуры

В приведенном фрагменте видно, что обращение к процедуре А (из процедуры Б) предшествует по тексту ее фактическому определению, но перед процедурой Б имеется предварительное описание процедуры А:

Процедура А(Парам1, Парам2) Далее

На то, что это предварительное описание указывает наличие ключевого слова «Далее», которое замещает в случае предварительного описания тело процедуры и ключевое слово «КонецПроцедуры». Предварительное описание процедуры/функции может содержаться в любом месте текста модуля, где допускается фактическое определение процедуры или функции, а сам заголовок процедуры/функции должен в точности соответствовать заголовку в фактическом определении, включая наличие, если необходимо, ключевого слова «Экспорт» и имен формальных параметров.

1.4.3.19.2 Вызов процедур и функций. Передача параметров

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

Синтаксис оператора вызова процедуры:

<имя_процедуры>(<список_фактич_параметров>);

Синтаксис вызова функции:

<имя_функции>(<список_фактич_параметров>);

При составлении списка фактических параметров, указываемых при вызове процедуры или функции, следует учитывать следующее:

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

  • по умолчанию параметры методов, процедур и функций передаются по ссылке, то есть изменение внутри процедуры или функции значения формального параметра ведет к изменению значения соответствующего фактического параметра. При передаче параметра по значению изменение значения формального параметра никак не влияет на фактический параметр вызова процедуры. Для указания того, что тот или иной параметр следует передавать по значению, следует в исходном тексте процедуры или функции перед именем параметра записать ключевое слово «Знач»;

  • если параметру задано значение по умолчанию, и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром;

  • если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую необходимо поставить;

  • если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть), либо принимает «пустое» значение (значение неопределенного типа);

  • если при вызове метода, процедуры или функции параметры не передаются (пустой список параметров), то, тем не менее, круглые скобки обязательно требуется ставить.

Пример:

Перем Глоб;

// Описание функции

Функция МояФункция(Знач Пар1, Пар2, Пар3) Экспорт

Лок = Глоб + Пар1 + Пар2 + Пар3;

Пар1 = 40;

Возврат Лок;

КонецФункции

Глоб = 123;

А = 10;

Рез = МояФункция(А, 6, 7); // Вызов функции

// Здесь Рез = 146, а переменная А = 10, несмотря на то, что в

// теле функции значение параметра Пар1 изменено на 40