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




Назначение и краткая характеристика встроенного языка
Встроенный язык системы 1С:Предприятие предназначен для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи. Встроенный язык (далее по тексту — язык) представляет собой предметно-ориентированный язык программирования, специально разработанный с уче­том возможности его применения не только профессиональными программи­стами. В частности, все операторы языка имеют как русское, так и англоязыч­ное написание, которые можно использовать одновременно в одном исходном тексте. Основной язык, описываемый в данной книге — русский, однако для каждого оператора языка приводится его англоязычный синоним.При своей относительной простоте язык обладает некоторыми объектно-ориентированными возможностями, например, правила доступа к атрибутам и методам специализированных типов данных (документам, справочникам и т. п.) подобны свойствам и методам объектов, используемых в других объектно-ориентированных языках. Однако специализированные типы данных не могут определяться средствами самого языка, а задаются в визуальном режиме кон­фигуратора. Типизация переменных в языке не жесткая, т. е. тип переменной определя­ется ее значением. Переменные не обязательно объявлять в явном виде. Неяв­ным определением переменной является ее первое упоминание в левой части оператора присваивания. Возможно также явное объявление переменных при помощи соответствующего оператора. Допускается применение массивов.
Соглашения и обозначения, принятые в синтаксических диаграммах
В синтаксических диаграммах используются следующие символы:

Символ

Значение

[ ]

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

( )

Круглые скобки заключают в себе список параметров.

|

Вертикальной линией разделяются синтаксические эле­менты, среди которых нужно выбрать только один.
Что такое программный модуль?
Программные модули в конфигурации системы 1С:Предприятие не являют­ся самостоятельными программами в общепринятом понимании этого слова, поскольку они являются только частью всей конфигурации задачи. Программ­ный модуль — это своего рода «контейнер» для размещения текстов процедур и функций, вызываемых системой во время исполнения задачи в определенные моменты работы. Поэтому программный модуль не имеет формальных границ своего описания типа: «Начало модуля» — «Конец модуля». Место размещения конкретного программного модуля (тот самый «контей­нер») предоставляется конфигуратором в тех точках конфигурации задачи, ко­торые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые будут вызваны самой системой в заранее предусмотренных ситуациях (например, при нажатии кнопки в диалоговом окне). Каждый отдельный программный модуль воспринимается системой как единое целое, поэтому все процедуры и функции программного модуля вы­полняются в едином контексте.
Контекст выполнения программного модуля
Каждый программный модуль связан с остальной частью конфигурации за­дачи. Эта связь называется контекстом выполнения модуля. Следует различать два вида контекста:      глобальный контекст задачи;      локальный контекст выполнения конкретного модуля. Глобальный контекст образуется:          значениями системных атрибутов, системными процедурами и функ­циями;          значениями заданных в конфигураторе констант, перечислений, регист­ров, видов расчета, групп видов расчета;          переменными, процедурами и функциями глобального программного модуля, объявленными с ключевым словом Экспорт. Глобальный контекст виден всем программным модулям и определяет об­щую языковую среду конфигурации.

Локальный контекст модуля образуется тем конкретным местом конфигу­рации задачи, для которого использован программный модуль. Локальный кон­текст виден только конкретному программному модулю и определяет для мо­дуля набор непосредственно доступных модулю значений агрегатных типов данных, их атрибутов и методов (см. «Виды программных модулей»). Однако, контекст модуля можно передать как объект в виде параметра при вызове про­цедур и функций (см. «Передача локального контекста программного модуля в качестве параметра»). Кроме того, контекст модуля определяет тот набор мето­дов, которые доступны только в данном контексте (см. «Атрибуты и методы контекста Модуля формы», «Методы контекста Модуля формы элемента спра­вочника» и т. п.). Локальный контекст предназначен для того, чтобы дать воз­можность управлять частными аспектами поведения задачи, присущими дан­ному модулю.
Виды программных модулей У части метаданных (но не у всех) существуют: модули формы объекта метаданных, предназначенные для обработки данных, внесенных в экранную форму; модули объекта метаданных в виде документа; глобальный модуль, который находится в корневом каталоге конфигурации и запускается при старте всей прикладной задачи. Он определяет глобальный контекст всей задачи (связывает работу частей конфигурации в единое целое).
В системе 1С:Предприятие существуют следующие виды программных мо­дулей (места размещения программных модулей в конфигурации задачи), дос­тупных в конфигураторе:

Размещение

Момент запуска

^ Контекст выполнения
Глобальный модуль
Размещается в корне­вом разделе конфигу­рации: Метаданные.

Запускается при стар­те всей прикладной задачи.

Глобальный модуль оп­ределяет глобальный контекст всей задачи.
Модуль Формы списка справочника
Размещается в разделе конфигурации: Мета­данные — Справочник — Форма списка.

Запускается при вызо­ве формы списка справочника.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы списка справочника, в котором непосредствен­но доступен выбранный в списке элемент спра­вочника и реквизиты формы списка справоч­ника.
Модуль Формы группы справочника
Размещается в разделе конфигурации: Мета­данные — Справочник — Форма группы.

Запускается при от­крытии формы группы справочника.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы группы справочника, в котором непосредствен­но доступны реквизиты текущей группы спра­вочника и реквизиты формы.
Модуль Формы элемента справочника
Размещается в разделе конфигурации: Мета­данные — Справочник — Форма элемента.

Запускается при от­крытии формы эле­мента справочника.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы элемента справочника, в котором непосредствен­но доступны реквизиты текущего элемента спра­вочника и реквизиты формы.
Модуль Формы документа
Размещается в разделе конфигурации: Мета­данные — Документ — Форма.

Запускается при от­крытии формы доку­мента.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы документа, в котором непосредственно дос­тупны реквизиты теку­щего документа и рек­визиты формы докумен­та.
Модуль документа
Размещается в разделе

конфигурации: Мета­данные — Документ — Модуль документа.

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

В модуле доступны: глобальный контекст, контекст ^ Модуля доку­мента, в котором непо­средственно доступны реквизиты текущего документа.
Модуль Формы журнала документов
Размещается в разделе конфигурации: Мета­данные — Журнал — Форма.

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

В модуле доступны: глобальный контекст, контекст ^ Модуля формы журнала документов, в котором непосредствен­но доступен выбранный в журнале документ и реквизиты формы жур­нала.
Модуль Формы журнала расчетов
Размещается в разделе конфигурации: Мета­данные — Журнал расчетов — Форма.

Запускается при вызо­ве формы журнала расчетов.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы журнала расчетов, в котором непосредствен­но доступны реквизиты журнала расчетов и рек­визиты формы.
Модуль Формы списка счетов
Размещается в разделе конфигурации: Мета­данные — План сче­тов.

Запускается при вызо­ве формы списка сче­тов.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы списка счетов, в котором непосредственно досту­пен выбранный в списке счет и реквизиты формы списка счетов.
Модуль Формы счета
Размещается в разделе конфигурации: Мета­данные — Справочник

— счет.

Запускается при от­крытии формы счета.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы счета, в котором непо­средственно доступны реквизиты текущего счета и реквизиты фор­мы.
Модуль Формы журнала операций
Размещается в разделе конфигурации: Мета­данные — Журнал операций — Форма.

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

В модуле доступны: глобальный контекст, контекст ^ Модуля формы журнала операций, в котором непосредствен­но доступны реквизиты журнала операций и реквизиты формы.
Модуль Формы операции
Размещается в разделе конфигурации: Мета­данные — Операция.

Запускается при от­крытии формы опера­ции.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы операции, в котором непосредственно дос­тупны реквизиты теку­щей операции и рекви­зиты формы операции.
Модуль Формы журнала проводок
Размещается в разделе конфигурации: Мета­данные — Журнал проводок — Форма.

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

В модуле доступны: глобальный контекст, контекст ^ Модуля формы журнала проводок, в котором непосредствен­но доступны реквизиты журнала проводок и реквизиты формы.
Модуль Формы отчета
Размещается в разделе конфигуратора: Мета­данные — Отчет — Форма.

Запускается при от­крытии диалоговой формы подготовки отчета.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы отчета, в котором непо­средственно доступны реквизиты формы.
Модуль Формы обработки
Размещается в разделе конфигуратора: Мета­данные — Обработка — Форма.

Запускается при от­крытии диалоговой формы обработки.

В модуле доступны: глобальный контекст, контекст ^ Модуля формы обработки, в котором непосредственно дос­тупны реквизиты фор­мы.
Модуль вида расчета
Размещается в разделе конфигуратора: Метаданные — Вид расчета — Модуль вида расчета.

Запускается при рас­чете соответствующих записей журнала рас­четов.

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















^ Формат программного модуля
Исходный текст программного модуля может состоять из операторов и комментариев.
Комментарии
Комментарий используется для размещения в исходном тексте программно­го модуля всякого рода пояснений к работе модуля. В тексте программного модуля комментарий начинается парой символов "//" и заканчивается концом строки. Это значит, что комментарий можно начинать с начала строки или записывать его после оператора на той же строке. После начала комментария писать оператор на той же строке нельзя, необходимо закончить комментарий концом строки.
^ Формат операторов
Операторы имеют вид стандартного обращения к процедуре, за исключени­ем оператора присваивания (А=В;) и управляющих конструкций (таких как Для, Пока, Если). Между собой операторы обязательно следует разделять сим­волом ";" ( точкой с запятой). Конец строки не является признаком конца опе­ратора, т. е. операторы могут свободно переходить через строки и продолжаться на другой строке. Можно располагать произвольное число операторов на од­ной строке, разделяя их символом ";".

Операторы языка в программном модуле можно подразделить на две кате­гории: операторы объявления переменных и исполняемые операторы. Операторы объявления переменных создают имена переменных, которыми манипулируют исполняемые операторы. Любой исполняемый оператор может иметь метку, используемую в качестве точки перехода в операторе Перейти.

В общем случае формат оператора языка следующий:

~метка:Оператор[(параметры)] [ДобКлючевоеСлово];

В качестве меток используются специальные идентификаторы, начинаю­щиеся с символа '~' (тильда) и состоящие из последовательности букв, цифр и символов '_'. Чтобы пометить оператор, надо поместить перед ним метку и сле­дующий за ней символ ":".

Пример:

~метка:А=В;
^ Имена переменных, процедур и функций
Именем переменной, объявленной процедуры или функции может быть лю­бая последовательность букв, цифр и знаков подчеркивания "_", начинающаяся с буквы или знака подчеркивания "_". Вновь создаваемые имена не должны совпадать с зарезервированными словами языка или именами существующих процедур и функций, доступных на момент выполнения. Распознавание имен переменных, процедур и функций ведется без учета регистра букв.
^ Зарезервированные слова
Приведенные далее ключевые слова являются зарезервированными и не могут использоваться в качестве создаваемых имен переменных и объявляе­мых процедур и функций. В данном варианте языка каждое из ключевых слов имеет два представления — русское и английское. Английское представление является традиционным для языков программирования. Ключевые слова в русском и английском представлении могут свободно смешиваться в одном исходном тексте. Регистр букв ключевых слов не имеет значения. Ниже приведен список ключевых слов в обоих вариантах представления.

Если

If

He

Not

Дата

Date

Тогда

Then

Знач

Val

Формат

Format

ИначеЕсли

Elsif

СтрДлина

StrLen

Разм

Dim

Иначе

Else

СокрЛ

TrimL

Вопрос

Do Query Box

КонецЕсли

Endlf

СокрП

TrimR

Контекст

Context

Цикл

Do

Лев

Left

Перем

Var

Для

For

Прав

Right

Перейти

Goto

По

To

Сред

Mid

Возврат

Return

Пока

While

Цел

Int

Продолжить

Continue

Функция

Function

Окр

Round

Прервать

Break

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

EndProcedure

Число

Number

И

And

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

EndFunction

Строка

String

Или

Or

Предупреждение

DoMessageBox

КонецЦикла

EndDo

Процедура

Procedure
^ Структура программного модуля
Структуру программного модуля можно подразделить на следующие разде­лы:

раздел определения переменных;

раздел процедур и функций;

раздел основной программы.

В конкретном программном модуле любой из разделов может отсутствовать.

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

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

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

Каждый из разделов не является обязательным, но если присутствует, то в таком порядке, как это перечислено

// Раздел переменных ГЛОБАЛЬНЫЙ МОДУЛЬ Перем совет; //*********************************************************************** //Раздел процедур и функций // Предопределенная процедура Процедура ПриЗавершенииРаботыСистемы() Если Вопрос ("Работа программы закончена?","Да+Нет") = "Нет" Тогда СтатусВозврата (0); КонецЕсли; КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Процедура СоветДня () Предупреждение (совет,10); КонецПроцедуры /////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// Процедура ЗапросКоличестваВПодборе(Выб,Конт) Экспорт //интерактивно выставляем количество Если Выб.ПометкаУдаления() = 1 тогда // товар помечен на удаление Предупреждение("Нельзя выбирать помеченные на удаления товары!"); Возврат; //прекращаем работу процедуры КонецЕсли; Кол=1; //Объявили переменную для ввода количества и присвоили ей значении= "1" Если ВвестиЧисло(Кол,"Введите количество",10,2) =1 Тогда Конт.НоваяСтрока(); // Добавляем строку в табличную часть Конт.Товары = Выб; //Товар из Выб в добавленную строку Конт.Количество=Кол; //Количество - туда же КонецЕсли; КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Процедура Выч_суммы_накл(Конт) Экспорт и Конт.Сумма=Конт.Цена*Конт.Количество; Конт.НДС=(Конт.Цена*Конт.Количество/(Конт.СтавкаНДС+100.00))*Конт.СтавкаНДС; КонецПроцедуры //*********************************************************************** // Раздел инициализации Совет = "Не забудьте правильно установить бухгалтерские итоги!" "Для журналов -- удобный интервал дат! "; //инициализация переменной СоветДня(); // вызов процедуры //*****************************************************************
^ Специальные символы, используемые в исходном тексте
//

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

|

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

~

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

:

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

;

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

( )

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

[ ]

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

,

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

" "

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

' '

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

.

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

+

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

-

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

*

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

/

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

>

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

>=

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

<

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

<=

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

=

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

<>

Две угловые скобки обозначают логическую операцию «не рав­но».
^ Процедуры и функции программного модуля Процедура
Синтаксис:

Процедура <Имя_проц>([[Знач] <Парам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 Тогда // если в диалоге элемент Справочника был выбран, // то присваиваем его значение реквизиту Документа, // который доступен по локальному контексту Конт.Склад =Скл.ТекущийЭлемент(); КонецЕсли; КонецПроцедуры

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

Теперь в любом программном модуле конфигурации (в данном примере в любом Модуле формы документа) для выбора склада можно вызвать про­цедуру, передав ей свой локальный контекст в качестве параметра: УстСклад(Контекст);
^ Пример исходного текста программного модуля
Перем ФлагПроводки; // Флаг проведения Документа Перем ФлагИзменения; // Флаг изменения Документа //———————————————————————————————————————————————— Функция КонтрольОстатка() // Функция возвращает текущее значение остатка товара на складе Ост = Регистр.ОстаткиТоваров.Остаток(Склад, Товар,"ОстатокТовара"); Возврат Ост; КонецФункции //———————————————————————————————————————————————— Процедура УстФлагИзм() ФлагИзменения = 1; КонецПроцедуры //———————————————————————————————————————————————— Процедура ВводНового() // предопределенная процедура, вызываемая при вводе нового документа // установим дату Документа ДатаДок = РабочаяДата(); // установим реквизиты Документа (по умолчанию) ТипНакладной =Перечисление.ТипыНакладных.Перемещение; Фирма = Константа.ДефФирма; Склад = Константа.ДефСклад; СкладПолучатель =Константа.ДефСклад; КонецПроцедуры //———————————————————————————————————————————————— ПроцедураВыходноеСообщение() // процедура, которую мы будем вызывать при нажатии кнопки "ОК" Если (ФлагПроводки = 1) И (ФлагИзменения = 1)Тогда Предупреждение("Проведенный Документ были изменен! При |сохранении обязательно проведите Документ снова!"); КонецЕсли; КонецПроцедуры //———————————————————————————————————————————————— //При входе в Форму запомним промежуточные переменные ФлагПроводки= Проведен(); ФлагИзменения= 0;

=======================================================================
^ Объявление переменных
В языке переменные не обязательно объявлять в явном виде. Неявным оп­ределением переменной является первое ее появление в левой части оператора присваивания. Возможно также явное объявление переменной при помощи оператора Перем. Тип переменной определяется типом присвоенного ей значе­ния. Не допускается использование в выражениях переменных с неопределен­ным значением (то есть переменных, которым никогда не присваивалось значе­ния).

Переменные могут объединяться в массивы. В данной реализации програм­мы предусмотрены только одномерные массивы.
^ Оператор объявления переменной
Синтаксис:

Перем <Имя_переменной> [[<Размерность>]] [Экспорт];

Параметры

<Имя_переменной>

Имя переменной.

[<Размерность>]

Необязательная числовая константа (записывает­ся в квадратных скобках), указывается только в том случае, если объявляется массив и должна представляться в виде положительного целого числа.

Экспорт

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

Пример:

Перем Очень_Нужная_Переменная;

Перем Массив_Для_Хранения[10];
^ Область использования переменной
Область использования переменных зависит от места их определения в конфигурации задачи. Существует три области, в которых можно объявить переменные:

         В разделе определения переменных глобального программного модуля. Если переменные определены с ключевым словом Экспорт (см. опера­тор Перем), то это будут глобальные переменные.          В разделе определения переменных модуля. Это переменные модуля.          В процедуре или функции. Это локальные переменные.

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

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

Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены.

Если переменная определена как
еще рефераты
Еще работы по разное