программный модуль может использовать в качестве параметров
Программный модуль может использовать в качестве параметров
Предмет: Технология разработки программных продуктов.
Тема :Модульное программирование.
Развивать умение слушать других, делать выводы и обобщать полученные знания
Воспитывать чувство значимости предмета в профессиональной деятельности, аккуратности в работе
— Основы алгоритмизации и программирования
Оборудование: доска, мел, письменные принадлежности, проектор, ПК
Тип урока: комбинированный
Метод обучения: Объяснительно иллюстративный
— Проверка готовности кабинета
2. Постановка цели урока
3.Повторение пройденного материала
Классификация структур данных
Простые структуры данных
Статические структуры данных
Динамические структуры данных
Полустатические структуры данных
4.Сообщение новых знаний
Основные характеристики программного модуля
Модульная структура программных продуктов
5. Восприятие и осознание учащимися нового материала
6. Осмысление обобщение и систематизация знаний
7. Подведение итогов урока и постановка домашнего задания
Выучить содержимое темы
Гагарина Л.Г. стр. С.94-101
Ответить на вопросы:
3.4. Модульное программирование
Для обеспечения технологичности разрабатываемого программного обеспечения применяется модульное программирование [37].
3,4.1. Понятие модуля
Приступая к разработке программы, следует иметь в виду, что она, как правило, является большой системой, поэтому необходимо принять меры для ее упрощения. Для этого программу разрабатывают по частям, которые называются программными модулями. Такой метод создания программ называют модульным программированием.
Модульное программирование основано на понятии модуля — программы или функционально завершенного фрагмента программы.
• один вход и один выход. На входе программный модуль получает определенный набор исходных данных, выполняет их обработку и возвращает один набор выходных данных;
• функциональная завершенность. Модуль выполняет набор определенных операций для реализации каждой отдельной функции, достаточных для завершения начатой обработки данных;
• логическая независимость. Результат работы данного фрагмента программы не зависит от работы других модулей;
• слабые информационные связи с другими программными модулями. Обмен информацией между отдельными модулями должен быть минимален;
• размер и сложность программного элемента в разумных рамках.
Таким образом, модули содержат описание исходных данных, операции обработки данных и структуры взаимосвязи с другими модулями.
Программный модуль является самостоятельным программным продуктом. Это означает, что каждый программный модуль разрабатывается, компилируется и отлаживается отдельно от других модулей программы. Более того, каждый разработанный программный модуль может включаться в состав разных программных систем при условии выполнения требований, предъявляемых к его использованию в документации к этому модулю. Таким образом, программный модуль может
рассматриваться и как средство упрощения сложных программ, и как средство накопления и многократного использования программистских знаний.
3.4.2. Основные характеристики программного модуля
Как разработать хороший модуль, который действительно будет способствовать упрощению программы?
В литературе приводятся различные критерии оценки приемлемости модуля. Были предложены следующие критерии:
• хороший модуль снаружи проще, чем внутри;
• хороший модуль проще использовать, чем построить.
Предлагается использовать следующие характеристики программного модуля для оценки его приемлемости: размер модуля, прочность модуля, сцепление с другими модулями и рутинность
Размер модуля измеряется числом содержащихся в нем операторов. Модуль не должен быть слишком маленьким или слишком большим. Большие модули, как правило, сложны для
понимания и неудобны для внесения изменений, они могут существенно увеличить суммарное время повторных трансляций программы при отладке. Маленькие модули усложняют общую
структурную схему программы и могут не окупать накладных расходов, связанных с их оформлением. Обычно рекомендуются программные модули размером от нескольких десятков до
нескольких сотен операторов.
Прочность модуля — это мера его внутренних связей. Чем выше прочность модуля, тем больше связей скрыто от внешней по отношению к нему части программы и, следовательно, тем
проще сама программа. Самой слабой степенью прочности обладает модуль, прочный по совпадению. В данном случае в программный модуль оформляется повторяющаяся в нескольких местах программы последовательность операторов. Если вдруг возникнет необходимость изменения этой последовательности в одном из контекстов, придется изменять сам модуль, что может сделать
его использование в других контекстах ошибочным. Такой класс программных модулей не рекомендуется для использования.
Функционально прочный модуль — это модуль, реализующий одну какую-либо определенную функцию. При этом он может использовать и другие модули. Такой вид прочности модулей
рекомендуется для использования.
Высшей степенью прочности обладает информационно прочный модуль — это модуль, выполняющий несколько операций над одной и той же структурой данных, которая неизвестна вне
этого модуля. Для каждой из этих операций в таком модуле имеется свой вход со своей формой обращения к нему.
Информационно прочный модуль может реализовывать, например, абстрактный тип данных.
Сцепление модуля — это мера его зависимости по способу передачи данных от других модулей. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других
модулей. Для оценки степени сцепления существует шесть видов сцепления модулей по:
• общей области данных;
Худшим видом сцепления модулей является сцепление по содержимому. Таким является сцепление двух модулей, когда один из них имеет прямые ссылки на содержимое другого модуля
(например, на константу, содержащуюся в другом модуле). Такое сцепление модулей недопустимо.
Не рекомендуется использовать также сцепление по общей области — это такое сцепление модулей, когда несколько модулей используют одну и ту же область памяти.
Сцепление по образцу предполагает, что модули обмениваются данными, объединенными в структуры. Этот тип обеспечивает неплохие характеристики по сравнению с предыдущими.
Недостаток заключается в том, что конкретные передаваемые данные «спрятаны» в структуры, и потому уменьшается «прозрачность» связи между модулями. Кроме того, при изменении структуры
передаваемых данных необходимо модифицировать все использующие ее модули.
При сцеплении по управлению один модуль посылает другому некоторый информационный объект (флаг), предназначенный для управления внутренней логикой модуля. Таким способом
часто выполняют настройку режимов работы программного обеспечения. Подобные настройки также снижают наглядность взаимодействия модулей и потому обеспечивают не лучшие
характеристики технологичности разрабатываемого программного обеспечения.
Сцепление по внешним ссылкам предполагает, что модули ссылаются на один и тот же глобальный элемент данных [1].
Единственным видом сцепления модулей, который рекомендуется для использования современной технологией программирования, является сцепление по данным (параметрическое сцепление) — это случай, когда данные передаются модулю либо при обращении к нему как значения его параметров, либо как результат его обращения к другому модулю для вычисления некоторой функции. Такой вид сцепления модулей реализуется на языках программирования при использовании обращений к процедурам (функциям).
Рутинность модуля — это его независимость от предыстории
обращений к нему. Модуль будем называть рутинным, если результат обращения к нему зависит только от значений его параметров и не зависит от результатов предыдущих обращений к нему. Модуль будем называть зависящим от предыстории, если результат обращения к нему зависит от внутреннего состояния этого модуля, хранящего следы предыдущих обращений к нему.
В книге Майерса [45] не рекомендуется использовать зависящие от предыстории модули, так как они провоцируют появление в программах неуловимых ошибок. Однако во многих случаях
именно зависящий от предыстории модуль является наиболее информационно прочным. Поэтому более приемлема следующая рекомендация:
• всегда следует использовать рутинный модуль, если это не приводит к плохим сцеплениям модулей;
• зависящие от предыстории модули следует использовать только в случае, когда это необходимо для обеспечения параметрического сцепления;
• в спецификации зависящего от предыстории модуля должна быть четко сформулирована эта зависимость таким образом, чтобы было возможно прогнозировать поведение данного модуля при разных последующих обращениях к нему.
Связность модулей — мера прочности соединения функциональных и информационных объектов внутри одного модуля.
Размещение сильно связанных элементов в одном модуле уменьшает межмодульные связи, в то время как помещение сильно связанных элементов в разные модули не только усиливает
межмодульные связи, но и усложняет понимание их взаимодействия. Объединение слабо связанных элементов также уменьшает технологичность модулей, делая их сложнее для понимания.
Различают следующие виды связности (в порядке убывания уровня) [1]:
При функциональной связности модуль предназначен для выполнения одной функции. Его исходные данные и операции предназначены для решения одной конкретной задачи. Такой
модуль имеет максимальную связность и, как следствие, хорошую технологичность (простота компиляции, тестирования, сопровождения).
При последовательной связности модуля результат обработки данных одной функцией служит исходными данными для другой функции. Такой модуль реализует одну подпрограмму,
выполняющую две функции. Модуль с последовательной связностью функций можно разбить на два модуля или более, как с последовательной, так и с функциональной связностью. При этом
данные, используемые последовательными функциями, также связаны последовательно. Такой модуль выполняет несколько функций, и, следовательно, его технологичность хуже с точки
зрения понимания и тестирования.
Информационно связанными считают функции, обрабатывающие одни и те же данные. Информационно связанный модуль имеет неплохие показатели технологичности, так как все
функции, работающие с одними и теми же данными, собраны в один модуль, что позволяет при изменении формата данных корректировать только его. Данные, которые обрабатываются одной
функцией, также считают информационно связанными.
Процедурно связаны функции или данные, которые являются частями одного процесса. При процедурной связности отдельные элементы модуля связаны крайне слабо, так как
реализуемые ими операции связаны лишь общим процессом, следовательно, технологичность такого модуля хуже, чем у предыдущих.
Временная связность функций подразумевает, что эти функции выполняются параллельно или в течение некоторого периода времени. Временная связность данных означает, что они используются в некотором временном интервале. Отличительной особенностью временной связности является то, что действия, реализуемые такими функциями, обычно могут выполняться в любом порядке. Например, временную связность имеют функции, выполняемые при инициализации некоторого процесса.
Большая вероятность модификации функции еще больше уменьшает показатели технологичности модулей данного вида по сравнению с предыдущими, кроме того, содержание модуля с
временной связностью функций может изменяться: в него могут включаться новые действия и/или исключаться старые.
Логическая связь строится на основе объединения данных или функций в одну логическую группу, например, логически связаны компоненты модуля, содержащего функции обработки текстовой информации или данные одного и того же типа. При выполнении модуля с логически связанными компонентами всегда будет вызываться одна какая-либо его часть, при этом вызывающий и вызываемый модули будут связаны по управлению.
Показатели технологичности таких модулей ниже предыдущих, так как сложно понять логику их работы.
Модуль, элементы которого имеют случайную связность, имеет самые низкие показатели технологичности, так как его элементы вообще не связаны.
В табл. 3.1 представлены характеристики различных видов связности по экспертным оценкам [1, 62, 63].
Анализ табл. 3.1 показывает, что при проектировании программных модулей лучше всего использовать функциональную, последовательную и информационную связности.
3.4.3. Модульная структура программных продуктов
Модульная структура программы представляет собой древовидную структуру, в узлах которой размещаются программные модули, а направленные дуги показывают статическую подчиненность модулей. Если в тексте модуля имеется ссылка на другой модуль, то их на структурной схеме соединяет дуга, которая исходит из первого и входит во второй модуль. Другими словами, каждый модуль может обращаться к подчиненным ему модулям. При этом модульная структура программной системы, кроме структурной схемы, должна включать в себя еще и
совокупность спецификаций модулей, образующих эту систему [37].
Функция верхнего уровня обеспечивается главным модулем;
он управляет выполнением нижестоящих функций, которым соответствуют подчиненные модули.
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее:
1) модуль вызывается на выполнение вышестоящим по иерархии модулем и, закончив работу, возвращает ему управление;
2) принятие основных решений в алгоритме выносится на максимально высокий по иерархии уровень;
3) если в разных местах алгоритма используется одна и та же функция, то она оформляется в отдельный модуль, который будет вызываться по мере необходимости.
Состав, назначение и характер использования программных модулей в значительной степени определяются инструментальными средствами.
Например, при разработке СУБД используются следующие программные модули:
1) экранные формы ввода и/или редактирования информации базы данных;
4) стандартные средства для обработки информации;
Глава 1
Формат исходных текстов программных модулей
Что такое программный модуль?
Программные модули в конфигурации системы 1С:Предприятие не являются самостоятельными программами в общепринятом понимании этого слова, поскольку они являются только частью всей конфигурации задачи. Программный модуль — это своего рода «контейнер» для размещения текстов процедур и функций, вызываемых системой во время исполнения задачи в определенные моменты работы. Поэтому программный модуль не имеет формальных границ своего описания типа: «Начало модуля» — «Конец модуля».
Место размещения конкретного программного модуля (тот самый «контейнер») предоставляется конфигуратором в тех точках конфигурации задачи, которые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые будут вызваны самой системой в заранее предусмотренных ситуациях (например, при нажатии кнопки в диалоговом окне).
Каждый отдельный программный модуль воспринимается системой как единое целое, поэтому все процедуры и функции программного модуля выполняются в едином контексте.
Контекст выполнения программного модуля
Каждый программный модуль связан с остальной частью конфигурации задачи. Эта связь называется контекстом выполнения модуля. Следует различать два вида контекста:
· глобальный контекст задачи;
· локальный контекст выполнения конкретного модуля.
Глобальный контекст образуется:
· значениями системных атрибутов, системными процедурами и функциями;
· значениями заданных в конфигураторе констант, перечислений, регистров, видов расчета, групп видов расчета;
Глобальный контекст виден всем программным модулям и определяет общую языковую среду конфигурации.
Локальный контекст модуля образуется тем конкретным местом конфигурации задачи, для которого использован программный модуль. Локальный контекст виден только конкретному программному модулю и определяет для модуля набор непосредственно доступных модулю значений агрегатных типов данных, их атрибутов и методов (см. «Виды программных модулей»). Однако, контекст модуля можно передать как объект в виде параметра при вызове процедур и функций (см. «Передача локального контекста программного модуля в качестве параметра»). Кроме того, контекст модуля определяет тот набор методов, которые доступны только в данном контексте (см. «Атрибуты и методы контекста Модуля формы», «Методы контекста Модуля формы элемента справочника» и т. п.). Локальный контекст предназначен для того, чтобы дать возможность управлять частными аспектами поведения задачи, присущими данному модулю.
Виды программных модулей
В системе 1С:Предприятие существуют следующие виды программных модулей (места размещения программных модулей в конфигурации задачи), доступных в конфигураторе:
Глобальный модуль
Размещается в корневом разделе конфигурации: Метаданные.
Запускается при старте всей прикладной задачи.
Глобальный модуль определяет глобальный контекст всей задачи.
Модуль Формы списка справочника
Размещается в разделе конфигурации: Метаданные — Справочник — Форма списка.
Запускается при вызове формы списка справочника.
В модуле доступны: глобальный контекст, контекст Модуля формы списка справочника, в котором непосредственно доступен выбранный в списке элемент справочника и реквизиты формы списка справочника.
Модуль Формы группы справочника
Размещается в разделе конфигурации: Метаданные — Справочник — Форма группы.
Запускается при открытии формы группы справочника.
В модуле доступны: глобальный контекст, контекст Модуля формы группы справочника, в котором непосредственно доступны реквизиты текущей группы справочника и реквизиты формы.
Модуль Формы элемента справочника
Размещается в разделе конфигурации: Метаданные — Справочник — Форма элемента.
Запускается при открытии формы элемента справочника.
В модуле доступны: глобальный контекст, контекст Модуля формы элемента справочника, в котором непосредственно доступны реквизиты текущего элемента справочника и реквизиты формы.
Модуль Формы документа
Размещается в разделе конфигурации: Метаданные — Документ — Форма.
Запускается при открытии формы документа.
В модуле доступны: глобальный контекст, контекст Модуля формы документа, в котором непосредственно доступны реквизиты текущего документа и реквизиты формы документа.
Модуль документа
Размещается в разделе
конфигурации: Метаданные — Документ — Модуль документа.
Запускается при проведении документа, при удалении проведенного документа, при снятии проведения, при выполнении архивации записей журнала расчетов, порожденных документом.
В модуле доступны: глобальный контекст, контекст Модуля документа, в котором непосредственно доступны реквизиты текущего документа.
Модуль Формы журнала документов
Размещается в разделе конфигурации: Метаданные — Журнал — Форма.
Запускается при вызове формы журнала документов.
В модуле доступны: глобальный контекст, контекст Модуля формы журнала документов, в котором непосредственно доступен выбранный в журнале документ и реквизиты формы журнала.
Модуль Формы журнала расчетов
Размещается в разделе конфигурации: Метаданные — Журнал расчетов — Форма.
Запускается при вызове формы журнала расчетов.
В модуле доступны: глобальный контекст, контекст Модуля формы журнала расчетов, в котором непосредственно доступны реквизиты журнала расчетов и реквизиты формы.
Модуль Формы списка счетов
Размещается в разделе конфигурации: Метаданные — План счетов.
Запускается при вызове формы списка счетов.
В модуле доступны: глобальный контекст, контекст Модуля формы списка счетов, в котором непосредственно доступен выбранный в списке счет и реквизиты формы списка счетов.
Модуль Формы счета
Размещается в разделе конфигурации: Метаданные — Справочник
Запускается при открытии формы счета.
В модуле доступны: глобальный контекст, контекст Модуля формы счета, в котором непосредственно доступны реквизиты текущего счета и реквизиты формы.
Модуль Формы журнала операций
Размещается в разделе конфигурации: Метаданные — Журнал операций — Форма.
Запускается при вызове формы журнала операций.
В модуле доступны: глобальный контекст, контекст Модуля формы журнала операций, в котором непосредственно доступны реквизиты журнала операций и реквизиты формы.
Модуль Формы операции
Размещается в разделе конфигурации: Метаданные — Операция.
Запускается при открытии формы операции.
В модуле доступны: глобальный контекст, контекст Модуля формы операции, в котором непосредственно доступны реквизиты текущей операции и реквизиты формы операции.
Модуль Формы журнала проводок
Размещается в разделе конфигурации: Метаданные — Журнал проводок — Форма.
Запускается при вызове формы журнала проводок.
В модуле доступны: глобальный контекст, контекст Модуля формы журнала проводок, в котором непосредственно доступны реквизиты журнала проводок и реквизиты формы.
Модуль Формы отчета
Размещается в разделе конфигуратора: Метаданные — Отчет — Форма.
Запускается при открытии диалоговой формы подготовки отчета.
В модуле доступны: глобальный контекст, контекст Модуля формы отчета, в котором непосредственно доступны реквизиты формы.
Модуль Формы обработки
Размещается в разделе конфигуратора: Метаданные — Обработка — Форма.
Запускается при открытии диалоговой формы обработки.
В модуле доступны: глобальный контекст, контекст Модуля формы обработки, в котором непосредственно доступны реквизиты формы.
Модуль вида расчета
Размещается в разделе конфигуратора: Метаданные — Вид расчета — Модуль вида расчета.
Запускается при расчете соответствующих записей журнала расчетов.
В модуле доступны: глобальный контекст, контекст Модуля вида расчета, в котором доступны реквизиты журнала расчетов.
Формат программного модуля
Исходный текст программного модуля может состоять из операторов и комментариев.
Комментарии
Комментарий используется для размещения в исходном тексте программного модуля всякого рода пояснений к работе модуля. Хорошим тоном программирования считается, когда исходный текст содержит исчерпывающий комментарий с описанием алгоритма. В режиме исполнения программы комментарии пропускаются. В тексте программного модуля комментарий начинается парой символов » // » и заканчивается концом строки. Это значит, что комментарий можно начинать с начала строки или записывать его после оператора на той же строке. После начала комментария писать оператор на той же строке нельзя, необходимо закончить комментарий концом строки.
А=В; // Это – комментарий
// Это тоже комментарий
Формат операторов
Операторы имеют вид стандартного обращения к процедуре, за исключением оператора присваивания (А=В;) и управляющих конструкций (таких как Для, Пока, Если ). Между собой операторы обязательно следует разделять символом «;» ( точкой с запятой). Конец строки не является признаком конца оператора, т. е. операторы могут свободно переходить через строки и продолжаться на другой строке. Можно располагать произвольное число операторов на одной строке, разделяя их символом «;».
Операторы языка в программном модуле можно подразделить на две категории: операторы объявления переменных и исполняемые операторы.
Операторы объявления переменных создают имена переменных, которыми манипулируют исполняемые операторы.
Любой исполняемый оператор может иметь метку, используемую в качестве точки перехода в операторе Перейти.
В общем случае формат оператора языка следующий:
В качестве меток используются специальные идентификаторы, начинающиеся с символа ‘
‘ (тильда) и состоящие из последовательности букв, цифр и символов ‘_’. Чтобы пометить оператор, надо поместить перед ним метку и следующий за ней символ «:».
Имена переменных, процедур и функций
Именем переменной, объявленной процедуры или функции может быть любая последовательность букв, цифр и знаков подчеркивания «_», начинающаяся с буквы или знака подчеркивания «_». Вновь создаваемые имена не должны совпадать с зарезервированными словами языка или именами существующих процедур и функций, доступных на момент выполнения. Распознавание имен переменных, процедур и функций ведется без учета регистра букв.
Зарезервированные слова
Приведенные далее ключевые слова являются зарезервированными и не могут использоваться в качестве создаваемых имен переменных и объявляемых процедур и функций. В данном варианте языка каждое из ключевых слов имеет два представления — русское и английское. Английское представление является традиционным для языков программирования. Ключевые слова в русском и английском представлении могут свободно смешиваться в одном исходном тексте. Регистр букв ключевых слов не имеет значения. Ниже приведен список ключевых слов в обоих вариантах представления.
Структура программного модуля
Структуру программного модуля можно подразделить на следующие разделы:
· раздел определения переменных;
· раздел процедур и функций;
· раздел основной программы.
В конкретном программном модуле любой из разделов может отсутствовать.
Раздел определения переменных размещается от начала текста модуля до первого оператора Процедура или оператора Функция или любого исполняемого оператора. В этом разделе могут находиться только операторы объявления переменных Перем.
Раздел процедур и функций размещается от первого оператора Процедура или оператора Функция до любого исполняемого оператора вне тела описания процедур или функций.
Раздел основной программы размещается от первого исполняемого оператора вне тела процедур или функций до конца модуля. В этом разделе могут находиться только исполняемые операторы. Раздел основной программы исполняется в момент запуска модуля на выполнение (см. «Виды программных модулей»). Обычно в разделе основной программы имеет смысл размещать операторы инициализации переменных какими-либо конкретными значениями, которые необходимо провести до первого вызова любой из процедур или функций модуля.
Специальные символы, используемые в исходном тексте
Двумя знаками «косая черта» начинается комментарий. Комментарием считается весь текст от знака «//» до конца текущей строки.
Вертикальная черта в начале строки используется только в строковых константах и означает, что данная строка является продолжением предыдущей (перенос строки), (см. «Строковые константы»).
Знаком тильда начинается метка оператора.
Двоеточием заканчивается метка оператора.
Точка с запятой является символом разделения операторов.
В круглые скобки заключается список параметров методов, процедур и функций.
В квадратные скобки заключается размерность массивов.
Запятая разделяет параметры в списке параметров методов, процедур и функций.
В двойные кавычки заключаются строковые константы.
В одинарные кавычки заключаются константы даты.
Десятичная точка в числовых константах. Разделитель, используемый в описаниях агрегатных типов данных.
Символ «плюс» обозначает операцию сложения.
Символ «минус» обозначает операцию вычитания.
Символ «звездочка» обозначает операцию умножения.
Символ «косая черта» обозначает операцию деления.
Правая угловая скобка обозначает логическую операцию «больше».
Логическая операция «больше или равно».
Две угловые скобки обозначают логическую операцию «не равно».
Процедуры и функции программного модуля
Процедура
Секция описания процедуры.
//Объявления локальных переменных;
//Объявления локальных переменных;
Назначает имя процедуры.
Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т. е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответсвовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст. См. также: «Передача параметров».
Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров.
Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).
Если параметру не задано значение по умолчанию и он является последним в списке передаваемых параметров, то при вызове процедуры его нельзя опускать.
Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.
Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей. Имеет смысл только в глобальном программном модуле.
//Объявления локальных переменных
Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры (см. оператор Перем ).
Исполняемые операторы процедуры.
Необязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно.
Обязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре.
Замечание: ключевые слова Процедура, КонецПроцедуры, являются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля).
См. также: «Передача параметров»
Процедура МояПроцедура(Пар1, Пар2, ПарЗ) Экспорт
Глоб = Глоб + Пар1 + Пар2 + ПарЗ;
МояПроцедура(5, 6, 7); // Вызов процедуры
Функция
Секция описания функции.
//Объявления локальных переменных;
, [Val] П apa м N> [= ДефЗнач >]])[Export]
//Объявления локальных переменных;
Назначает имя функции.
Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т. е. изменение значения формального параметра при выполнении функции никак не повлияет на значение фактического параметра, переданного при вызове функции. Если это ключевое слово не указано, то параметр функции передается по ссылке, то есть изменение внутри функции значения формального параметра приведет к изменению значения соответствующего фактического параметра.
Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответсвовать значениям передаваемых при вызове функции фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте функции. Список формальных параметров может быть пуст. См. также: «Передача параметров».
Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров.
Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).
Если параметру не задано значение по умолчанию и он является последним в списке передаваемых параметров, то при вызове процедуры его нельзя опускать.
Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.
Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Необязательное ключевое слово, которое указывает на то, что данная функция является доступной из других программных модулей. Данное ключевое слово имеет смысл использовать только в глобальном программном модуле.
//Объявления локальных переменных
Объявляются локальные переменные, на которые можно ссылаться только в рамках этой функции (см. оператор Перем ).
Исполняемые операторы функции.
Ключевое слово, которое завершает выполнение функции и возвращает ВозвращаемоеЗначение в выражение, в котором используется функция. Использование данного ключевого слова в функции обязательно.
Выражение, значение которого содержит результат обращения к функции.
Обязательное ключевое слово, обозначающее конец исходного текста функции.
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, т. е. в языке допускается не принимать от функции возвращаемое значение.
Замечание: ключевые слова Функция, КонецФункции являются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля).
См. также: «Передача параметров»
Функция МояФункция(Парам1, Парам2, ПарамЗ) Экспорт
Лок = Глоб + Парам1 + Парам2 + ПарамЗ;
Рез = МояФункция(5, 6, 7); // Вызов функции
Предварительное описание процедур и функций
В тексте программного модуля допускается предварительное описание процедур и функций без их определения.
· фрагмента текста модуля, содержащий предварительное описание процедуры.
Процедура А(Парам1, Парам2) Далее
Процедура А(Парам1, Парам2)
В приведенном фрагменте видно, что обращение к процедуре А (из процедуры Б) предшествует по тексту ее фактическому определению, но перед процедурой Б имеется предварительное описание процедуры А.
Процедура А(Парам1, Парам2) Далее
Передача параметров
По умолчанию параметры методов, процедур и функций передаются по ссылке, то есть изменение внутри процедуры или функции значения формального параметра ведет к изменению значения соответствующего фактического параметра. При передаче параметра по значению изменение значения формального параметра никак не влияет на фактический параметр вызова процедуры. Для указания того, что тот или иной параметр следует передавать по значению, следует в исходном тексте процедуры или функции перед именем параметра записать ключевое слово Знач (англоязычный синоним — Val ).
Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром.
Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает «пустое» значение (значение неопределенного типа).
Если при вызове метода, процедуры или функции параметры не передаются (пустой список параметров), то, тем не менее, круглые скобки обязательно требуется ставить.
Функция МояФункция(Знач Пар1, Пар2, Пар3) Экспорт
Лок = Глоб + Пар1 + Пар2 + Пар3;
Рез = МояФункция(А, 6, 7); // Вызов функции
// Здесь Рез = 146, а переменная А = 10, несмотря на то, что в теле
// функции значение параметра Пар1 изменено на 40
Передача локального контекста программного модуля в качестве параметра
В языке есть возможность передавать локальный контекст программного модуля (см. «Контекст выполнения программного модуля», «Виды программных модулей») в качестве параметра процедуры или функции. Для этого в качестве фактического параметра при вызове процедуры или функции используется ключевое слово Контекст (англоязычный синоним — Context ). Данная возможность позволяет, например, написать в глобальном программном модуле процедуры и функции (общие для многих модулей), которые, при их вызове из других модулей, будут исполняться с использованием конкретного локального контекста вызвавшего модуля.
Процедура УстСклада(Конт) Экспорт
// создаем объект типа «справочник»
// вызываем диалог для выбора элемента Справочника
Если Скл.Выбран() = 1 Тогда
// если в диалоге элемент Справочника был выбран,
// то присваиваем его значение реквизиту Документа,
// который доступен по локальному контексту
· Здесь переменная Конт является формальным параметром, которому при вызове процедуры будет присвоен локальный контекст. В данном примере обращение к реквизитам и методам локального контекста происходит «через точку» после идентификатора Конт, например:
· Теперь в любом программном модуле конфигурации (в данном примере в любом Модуле формы документа) для выбора склада можно вызвать процедуру, передав ей свой локальный контекст в качестве параметра:
Пример исходного текста программного модуля
Перем ФлагПроводки; // Флаг проведения Документа
Перем ФлагИзменения; // Флаг изменения Документа
// Функция возвращает текущее значение остатка товара на складе
Ост = Регистр.ОстаткиТоваров.Остаток(Склад, Товар, «ОстатокТовара»);
// предопределенная процедура, вызываемая при вводе нового документа
// установим дату Документа
// установим реквизиты Документа (по умолчанию)
// процедура, которую мы будем вызывать при нажатии кнопки «ОК»
Если (ФлагПроводки = 1) И (ФлагИзменения = 1) Тогда
Предупреждение(«Проведенный Документ был изменен! При
| сохранении обязательно проведите Документ снова!»);
// При входе в Форму запомним промежуточные переменные