Реферат: Назначение и краткая характеристика встроенного языка
Назначение и краткая характеристика встроенного языка
Встроенный язык системы 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];
^ Область использования переменной
Область использования переменных зависит от места их определения в конфигурации задачи. Существует три области, в которых можно объявить переменные:
В разделе определения переменных глобального программного модуля. Если переменные определены с ключевым словом Экспорт (см. оператор Перем), то это будут глобальные переменные. В разделе определения переменных модуля. Это переменные модуля. В процедуре или функции. Это локальные переменные.
Глобальные переменные доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции любого программного модуля конфигурации задачи.
Переменные модуля доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции того программного модуля, в пределах которого они объявлены.
Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены.
Если переменная определена как
еще рефераты
Еще работы по разное
Реферат по разное
Предисловие
17 Сентября 2013
Реферат по разное
Логический тип классификация: стандартный, простой, порядковый тип. Стандартное имя boolean
17 Сентября 2013
Реферат по разное
Положение о соотношении элементарных и высших психических функций в процессе развития ребенка
17 Сентября 2013
Реферат по разное
1. Основные стили и парадигмы программирования
17 Сентября 2013