Назначение и краткая характеристика встроенного языка

Вид материалаДокументы

Содержание


Специальные символы, используемые в исходном тексте
Процедуры и функции программного модуля
Функция Синтаксис
См. также
Предварительное описание процедур и функций
А ... КонецПроцедуры ПроцедураА(Парам1, Парам2) //Определение процедуры А
Передача локального контекста программного модуля в качестве параметра
Подобный материал:
1   2   3   4   5   6

Специальные символы, используемые в исходном тексте


//

Двумя знаками «косая черта» начинается комментарий. Коммен­тарием считается весь текст от знака "//" до конца текущей стро­ки.

|

Вертикальная черта в начале строки используется только в стро­ковых константах и означает, что данная строка является про­должением предыдущей (перенос строки), (см. «Строковые кон­станты»).

~

Знаком тильда начинается метка оператора.

:

Двоеточием заканчивается метка оператора.

;

Точка с запятой является символом разделения операторов.

( )

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

[ ]

В квадратные скобки заключается размерность массивов.

,

Запятая разделяет параметры в списке параметров методов, про­цедур и функций.

" "

В двойные кавычки заключаются строковые константы.

' '

В одинарные кавычки заключаются константы даты.

.

Десятичная точка в числовых константах. Разделитель, используемый в описаниях агрегатных типов данных.

+

Символ «плюс» обозначает операцию сложения.

-

Символ «минус» обозначает операцию вычитания.

*

Символ «звездочка» обозначает операцию умножения.

/

Символ «косая черта» обозначает операцию деления.

>

Правая угловая скобка обозначает логическую операцию «боль­ше».

>=

Логическая операция «больше или равно».

<

Левая угловая скобка обозначает логическую операцию «мень­ше».

<=

Логическая операция «меньше или равно».

=

Знак равенства обозначает присвоение или логическую операцию «равно».

<>

Две угловые скобки обозначают логическую операцию «не рав­но».

Процедуры и функции программного модуля

Процедура


Синтаксис:

Процедура <Имя_проц>([[Знач] <Парам1>[=<ДефЗнач>],... , [Знач] <ПapaмN>[=<ДeфЗнaч>]]) [Экспорт] //Объявления локальных переменных; //Операторы; ... [Возврат;] //Операторы; ... КонецПроцедуры

Параметры:

<Имя_проц>

Назначает имя процедуры.

Знач

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

<Парам1>, ..., <ПарамN>

Необязательный список формальных параметров, разделяемых запятыми. Значения формальных па­раметров должны соответствовать значениям пере­даваемых при вызове процедуры фактических па­раметров. В этом списке определяются имена каж­дого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст. См. также: «Передача парамет­ров».

=<ДефЗнач>

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

Экспорт

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

//Объявления локальных переменных

Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры (см. оператор Перем).

//Операторы

Исполняемые операторы процедуры.

Возврат

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

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

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

Описание:

Ключевое слово Процедура начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав Имя_процедуры со списком параметров (если параметры не передают­ся, то круглые скобки, тем не менее, обязательны). Если в глобальном про­граммном модуле в теле описания функции использовано ключевое слово Экспорт, то это означает, что данная процедура является доступной из всех других программных модулей конфигурации. Ключевое слово Экспорт имеет смысл использовать только в глобальном программном модуле. При выполнении оператора Возврат процедура заканчивается и возвраща­ет управление в точку вызова. Если в тексте процедуры не встретился оператор Возврат, то после выполнения последнего исполняемого оператора происхо­дит выполнение неявного оператора Возврат. Конец программной секции процедуры определяется по оператору КонецПроцедуры. Переменные, объявленные в теле процедуры в разделе Объявления_локальных_переменных, являются локальными переменными данной процедуры, поэтому доступны только в этой процедуре (за исключени­ем случая передачи их как параметров при вызове других процедур, функций или методов). Замечание: ключевые слова Процедура, КонецПроцедуры, являются не операторами, а операторными скобками, поэтому не должны заканчивать­ся точкой с запятой (это может приводить к ошибкам выполнения моду­ля).См. также: «Передача параметров»

Пример: Перем Глоб; // Описание процедуры Процедура МояПроцедура(Пар1, Пар2, ПарЗ) Экспорт Глоб = Глоб + Пар1 + Пар2 + ПарЗ; Возврат; КонецПроцедуры Глоб = 123;МояПроцедура(5, 6, 7); // Вызов процедуры

Функция Синтаксис:


Функция<Имя_функции>([[Знач]<Парам1>[=<ДефЗнач>], ...,[Знач]<ПарамN>[=<ДефЗнач>]])[Экспорт] //Объявлениялокальных переменных; //Операторы; ... Возврат<ВозвращаемоеЗначение>; //Операторы; ... КонецФункции

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

Описание:Ключевое слово Функция начинает секцию исходного текста функции, вы­полнение которой можно инициировать из любой точки программного модуля, просто указав Имя_функции со списком параметров (если параметры не пере­даются, то круглые скобки, тем не менее, обязательны). Если в глобально мпро­граммном модуле в теле описания функции использовано ключевое слово Экспорт,то это означает, что данная функция является доступной из всех дру­гих программных модулей конфигурации. Ключевое слово Экспорт имеет смысл использовать только в глобальном программном модуле.Выполнение функции заканчивается обязательным оператором Возврат.Функции отличаются от процедур только тем, что возвращают ВозвращаемоеЗначение. Конец программной секции функции определяется по оператору КонецФункции.

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

Переменные, объявленные в теле функции в разделе Объявления_локальных_переменных, являются локальными переменными данной функции, поэтому доступны только в этой функции (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).

Замечание: ключевые слова Функция, КонецФункции являются не операто­рами, а операторными скобками, поэтому не должны заканчиваться точ­кой с запятой (это может приводить к ошибкам выполнения модуля).

См. также:«Передача параметров»

Пример:

ПеремГлоб; //Описание функции Функция МояФункция(Парам1, Парам2, ПарамЗ) Экспорт Лок= Глоб + Парам1 + Парам2 + ПарамЗ; Возврат Лок; КонецФункции Глоб= 123; Рез= МояФункция(5, 6, 7); // Вызовфункции

В данном примере параметры Парам1, Парам2, Парам3 – формальные параметры, значения в вызове функции «5», «6», «7» -- фактические.

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


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

ПроцедураА(Парам1, Парам2) Далее // Объявление(описание) процедуры А ПроцедураБ() Перем АА, ББ; ... А(АА, ББ); //Вызов процедуры А ... КонецПроцедуры

ПроцедураА(Парам1, Парам2) //Определение процедуры А ... КонецПроцедуры

В приведенном фрагменте видно, что обращение к процедуре А (из проце­дуры Б) предшествует по тексту ее фактическому определению, но перед про­цедурой Б имеется предварительное описание процедуры А. ПроцедураА(Парам1, Парам2) Далее На то, что это предварительное описание указывает наличие ключевого сло­ва Далее(англоязычный синоним —Forward), которое замещает в случае предварительного описания тело процедуры и ключевое слово КонецПроцедуры. Предварительное описание процедуры/функции может со­держаться в любом месте текста модуля, где допускается фактическое опреде­ление процедуры или функции, а сам заголовок процедуры/функции должен в точности соответствовать заголовку в фактическом определении, включая на­личие, если необходимо, ключевого слова Экспорт и имен формальных пара­метров.

Передача параметров. По умолчанию параметры методов, процедур и функций передаются по ссылке, то есть изменение внутри процедуры или функции значения формаль­ного параметра ведет к изменению значения соответствующего фактического параметра. При передаче параметра по значению изменение значения формаль­ного параметра никак не влияет на фактический параметр вызова процедуры. Для указания того, что тот или иной параметр следует передавать по значению, следует в исходном тексте процедуры или функции перед именем параметра записать ключевое слово Знач(англоязычный синоним —Val). Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром. Если параметру не задано значения по умолчанию, то при вызове процеду­ры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить. Если параметр при вызове процедуры опущен, то он принимает либо уста­новленное по умолчанию значение (если оно есть) либо принимает«пустое» значение (значение неопределенного типа). Если при вызове метода, процедуры или функции параметры не передаются (пустой список параметров), то, тем не менее, круглые скобки обязательно тре­буется ставить.


Пример:

ПеремГлоб; //Описание функции ФункцияМояФункция(Знач Пар1, Пар2, Пар3) Экспорт Лок = Глоб + Пар1 + Пар2 + Пар3; Пар1 = 40; Возврат Лок; КонецФункции Глоб= 123; //Инициализация переменной Глоб А =10; Рез= МояФункция(А, 6, 7); // Вызов функции

//Здесь Рез = 146, а переменная А = 10, несмотря на то, что в теле //функции значение параметра Пар1 изменено на 40

Передача локального контекста программного модуля в качестве параметра


В языке есть возможность передавать локальный контекст программного модуля (см. «Контекст выполнения программного модуля», «Виды программ­ных модулей») в качестве параметра процедуры или функции. Для этого в ка­честве фактического параметра при вызове процедуры или функции использу­ется ключевое слово Контекст(англоязычный синоним —Context). Данная возможность позволяет, например, написать в глобальном программном модуле процедуры и функции (общие для многих модулей), которые, при их вызове из других модулей, будут исполняться с использованием конкретного локального контекста вызвавшего модуля.

Пример: Допустим, у нас есть несколько различных документов, причем у всех есть реквизит"Склад". В каждом программном модуле формы редактирования документа нужна процедура выбора склада. В глобальном программном модуле напишем процедуру:

Процедура УстСклада(Конт) Экспорт // создаем объект типа "справочник" в оперативной памяти Скл =СоздатьОбъект("Справочник.Склады"); // вызываем диалог для выбора элемента Справочника Скл.Выбрать("Выберите Склад", ""); Если Скл.Выбран() = 1 Тогда // если в диалоге элемент Справочника был выбран, // то присваиваем его значение реквизиту Документа, // который доступен по локальному контексту Конт.Склад =Скл.ТекущийЭлемент(); КонецЕсли; КонецПроцедуры

Здесь переменная Конт является формальным параметром, которому при вызове процедуры будет присвоен локальный контекст. В данном примере обращение к реквизитам и методам локального контекста происходит «че­рез точку» после идентификатора Конт, например: Конт.Склад= Скл.ТекущийЭлемент();

Теперь в любом программном модуле конфигурации (в данном примере в любом Модуле формы документа) для выбора склада можно вызвать про­цедуру, передав ей свой локальный контекст в качестве параметра: УстСклад(Контекст);