Исполняемые операторы выполняют непосредственную обработку данных. К ним относят системные процедуры и функции, заложенные разработчиками платформы, а также вспомогательные процедуры и функции, описанные разработчиком конфигурации (прикладной задачи).
Под описание системных процедур и функций отведен целый раздел. Здесь же мне хотелось бы рассказать о вспомогательных исполняемых операторах, которые может определять разработчик конфигурации. Основное назначение вспомогательных исполняемых операторов — повторное многократное использование кода и оптимизация модульной структуры конфигурации.
Во встроенном языке 1С:Предприятие 7.7 определены два варианта реализации вспомогательных вычислений:
- Реализация вычислений через процедуры, не возвращающие каких-либо значений;
- Реализация вычислений через функции, возвращающие результат вычислений в точку вызова;
По сути, процедуры и функции представляют собой блоки операторов, заключенные в специальные операторные скобки:
Оператор ИдентификаторОператора() //блок операторов КонецОператора
Для вызова оператора достаточно указать его символьный идентификатор:
ИдентификаторОператора();
Поскольку, встроенный язык 1С:Предприятие 7.7 является регистронезависимым, идентификатор оператора можно писать в любом регистре. Но лучше использовать оригинальные имена операторов — это повысит читаемость кода не только для Вас, но и для Ваших последователей.
Программист может располагать процедуры и функции в любом модуле на свое усмотрение. Но хорошим тоном считается расположение общеиспользуемых процедур и функций в глобальном модуле, чтобы в остальных модулях была доступна только одна версия этой процедуры или функции. Все остальные процедуры и функции принято располагать по месту их использования — в программных модулях форм или объектов конфигурации.
Параметры исполняемых операторов
Поскольку процедуры и функции, определяемые разработчиком, могут располагаться в произвольных модулях конфигурации, для передачи данных в исполняемые операторы используются параметры. Для этого в определении процедуры или функции задаются формальные параметры, которыми можно оперировать внутри процедуры или функции:
Оператор ИдентификаторОператора([Параметр1, … , ПараметрN]) ... КонецОператора
где Параметр1,..., ПараметрN
— перечисление формальных параметров, отделенных друг от друга разделителем , (запятая).
В точке вызова исполняемого оператора, формальные параметры заменяются фактическими параметрами — значениями, передаваемыми внутрь исполняемого оператора:
ИдентификаторОператора(Значение1, …, ЗначениеN);
В качестве параметров могут выступать литералы базовых типов, имена переменных, имена других исполняемых операторов или выражения с их участием.
По-умолчанию, все формальные параметры исполняемого оператора являются обязательными. Это значит, что в вызове процедуры или функции необходимо заменить каждый формальный параметр на фактический.
Если вы перечислите не все фактический параметры, синтаксический анализатор выдаст ошибку: «Недостаточно фактических параметров».
Необязательные (опциональные) параметры
Несмотря на то, что все формальные параметры являются обязательными, допускается не указывать их значения. В этом случае формальный параметр получит пустое значение (значение неопределенного типа).
Также имеется возможность задать для формального параметра значение по умолчанию одного из простых типов. Для этого в определении параметра, после знака присваивания, указывается литерал значения:
Оператор ИдентификаторОператора([Параметр1[ = ЗначениеПоУмолчанию], … , ПараметрN[ = ЗначениеПоУмолчанию]]) //блок операторов КонецОператора
Передача параметров по значению. Передача параметров по ссылке
По-умолчанию, значения всех фактических параметров передаются в процедуру или функцию по ссылке. Это приводит к тому, что изменение формального параметра в теле процедуры или функции, также изменяет значение фактического параметра. Чтобы избежать этого, используется передача параметров по значению. Таким образом, изменение формального параметра не повлечет за собой изменения фактического. Для этого к описанию параметра добавляется ключевое слово Знач
:
Оператор ИдентификаторОператора([[Знач] Параметр1, … , [Знач] ПараметрN]) //блок операторов КонецОператора
Предварительное объявление процедур и функций
Поскольку трансляция кода на встроенном языке выполняется за один проход, обязательным требованием является предварительное объявление процедур и функций перед их вызовом. Попытка вызова процедуры или функции без ее предварительного описания приведет к синтаксической ошибке: «Процедура не обнаружена (ИмяПроцедуры)». Для предварительного объявления процедур и функций используется ключевое слово Далее
:
Оператор ИдентификаторОператора([Параметр1, … , ПараметрN]) Далее
При этом следует учесть, что предварительное описание должно включать все параметры исходных процедур и функций, включая ключевые слова Знач
и Экспорт
Досрочное завершение исполняемого оператора
Для досрочного завершения выполнения операторов в теле процедуры или функции используется оператор Возврат
, который передает управление на первый оператор, следующий за процедурой или функцией.
«Также имеется возможность задать для формального параметра значение по умолчанию».
Правильно ли я понял?
Если будет передан параметр, имеющий значение (х=1), то внутри процедуры будет использоваться это значение, а если будет передан неинициализированный параметр (без значения), то внутри процедуры будет использоваться ЗначениеПоУмолчанию (например, х =0)?
Все верно!
Модуль.
х = 1;
Процедура ПоказатьЗначение(Пер = 0)
Сообщить(Пер);
КонецПроцедуры
ПоказатьЗначение(х);
Сообщить(х); // тут будет 1 или 0?
Ну, если рассматривать приведенный код как модуль, то он не скомпилируется, т.к. операторы основной программы на платформе 1С:Предприятие (в Вашем случае это
x = 1;
) могут располагаться только после определения процедур и функций. Хотя суть Вы уловили верно. Если брать определение приведенной Вами процедуры, то вызовПоказатьЗначение()
выведет 0, аПоказатьЗначение(1)
выведет 1.Напомню, что лучший способ изучения любого языка программирования — это практика)