Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
476.99 Кб
Скачать

46. Пользовательские процедуры и функции

Разработка алгоритмов и программ осуществляется, как правило, по принципу "сверху вниз".

Суть такого подхода состоит в разбиении исходной задачи на ряд более простых задач - фрагментов - и последующей работе с ними.

При разбиении задачи на фрагменты надо придерживаться следующей схемы:

  1. Проанализировать задачу и выделить в ней фрагменты.

  2. Отобразить процесс разбиения в виде блок-схемы или линейной схемы и пронумеровать в ней фрагменты.

  3. Установить между выделенными фрагментами связи: для каждого фрагмента определить, какие данные он получает (входные данные) и какие данные возвращает (выходные данные). Связи между фрагментами называются интерфейсом.

  4. Рассмотреть далее каждый фрагмент самостоятельно; разработать для него алгоритм и записать его либо в виде линейной схемы, либо в виде блок-схемы. При необходимости подвергнуть фрагмент разбиению на более мелкие фрагменты. Такое разбиение продолжать до тех пор, пока не будут получены фрагменты, программирование которых не составляет особых затруднений.

  5. Оформить выделенные фрагменты в виде программных компонентов или БОК.

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

Составляемые для фрагментов линейные схемы алгоритмов (разд. 2.8) сопровождаются заголовком и описанием интерфейса, отражающим состав входных и выходных данных.

В 1С для реализации фрагментов можно использовать программные компоненты:

  • основную программу модуля;

  • процедуры и функции модуля.

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

6.2. Структура процедур и функций

Процедуры и функции имеют схожую структуру:

Процедура | Функция Имя([[3нач] парам1 = [значение1]], ..., [[Знач] парамN = [значениеN]]) [Экспорт]

[неисполняемые операторы объявления переменных]

[исполняемые операторы]

КонецПроцедуры | КонецФункции

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

Процедуры вызываются в виде отдельного оператора с соблюдением следующего синтаксиса:

Имя_процедуры([парам1], ..., [парамN]);

Функции, как правило, вызываются из выражений, но могут, так же как и процедуры, вызываться в виде отдельно оператора:

Имя_функции([парам1],..., [парамN]);

Функция, если выход из нее осуществляется не в результате выполнения оператора

Возврат выражение;

а по оператору

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

возвращает число 0.

Функция, в которой нет оператора

Возврат выражение;

всегда возвращает нуль.

Замечание. При программировании из функции следует выходить по оператору

Возврат выражение;

даже если выражение - это константа нуль.

Например, функции ф1 и ф2

функция ф1(а) функция ф2(а)

если а > 0 тогда если а > 0 тогда

возврат 2 * а; возврат 2 * а;

иначе конецЕсли;

возврат 0; конецФункции // ф2

конецЕсли;

конецФункции // ф1

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

функция ф1(a)

возврат ?(а > 0, 2 * а, 0);

конецФункции // ф1

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

Например, в модуле с кодом

функция ф1(а)

возврат ?(а > 0, 2 * а, 0);

конецФункции // ф1

процедура п1 (д) далее // Предварительное описание процедуры п1

процедура Выполнить()

перем б;

б = 2.5 * ф1(3); // б= 15; функция ф1 вызывается из выражения

п1(б); // б = 35; б - фактический параметр процедуры п1

Сообщить(б);

конецПроцедуры // Выполнить

функция ф2(с)

возврат с / 2;

конецФункции // ф2

процедура п1(д) // д - фактический параметр процедуры n1

д = 4*ф2(д) + 5; // д = 4 * 7.5 + 5 = 35

конецПроцедуры // п1

из процедуры Выполнить можно вызвать функцию ф1 и процедуру nl, но нельзя вызвать функцию ф2.

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

процедура п3(д1, д2) Экспорт далее // Предварительное описание процедуры пЗ

Перечень имен процедур и функций модуля можно просмотреть, нажав, находясь в конфигураторе, на иконку & на панели инструментов Текстовый редактор. Так, для вышеприведенного набора процедур и функций, если их разместить, например, в модуле обработки Проба, мы получим приведенный на рис. 2.8 список (сортиров­ка имен не задана).

Рис. 2.8. Окно вывода списка процедур и функций модуля

На начало любой процедуры (функции) или на ее предварительное описание можно переместиться, выбрав в вышеприведенном окне необходимую строку и нажав на кнопку Перейти.