К статьям

Знакомство с процедурами и функциями

5 мин


Функция

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

Сотрудник Часов отработано Ставка Премия
Иванов 100 100 10
Петров 120 150 12

Методика расчета следующая:

  • Оплата за отработанные часы считается умножением отработанных часов на часовую ставку.
  • Премия считается как процент от оплаты за отработанные часы.
  • Премия и оплата за отработанные часы будет суммой зарплаты.

Опишем расчет на встроенном языке:

ПовременнаяОплата = КоличествоОтработанныхЧасов * ЧасоваяСтавка;

Премия = ПовременнаяОплата * ПроцентПремии / 100;

Результат = ПовременнаяОплата + Премия;

Рассчитаем зарплату для Иванова и Петрова:

Отработано = 100;

ПроцентПремии = 10;

Ставка = 100;

 

ПовременнаяОплата = Отработано * Ставка;

Премия = ПовременнаяОплата * ПроцентПремии / 100;

ЗарплатаИванов = ПовременнаяОплата + Премия;

Сообщить(ЗарплатаИванов);

Отработано = 120;

ПроцентПремии = 12;

Ставка = 150;

 

ПовременнаяОплата = Отработано * Ставка;

Премия = ПовременнаяОплата * ПроцентПремии / 100;

ЗарплатаПетров = ПовременнаяОплата + Премия;

Сообщить(ЗарплатаПетров);

Если внимательно посмотреть на полученный код, видно, что для Иванова и Петрова меняются только переменные: КоличествоОтработанныхЧасов, ПроцентПремии, ЧасоваяСтавка. 

Код с расчетом можно вынести в отдельную «формулу», куда подставляются значения переменных и получается результат.

Из описания «формулой» является функция, подставляемые значения переменных — параметры функции, получаемый результат — возвращаемое значение.

Опишем, как конструируется функция из примера.

1. Выделим фрагмент общего кода.

...

ПовременнаяОплата = Отработано * Ставка;

Премия = ПовременнаяОплата * ПроцентПремии / 100;

Зарплата = ПовременнаяОплата + Премия;

...

2. Функция всегда должна возвращать какое-то значение, после чего заканчивает свое выполнение. Возвращаемое значение описывается после слова «Возврат». В примере возвращать нужно значение «Зарплата».

...

ПовременнаяОплата = Отработано * Ставка;

Премия = ПовременнаяОплата * ПроцентПремии / 100;

Зарплата = ПовременнаяОплата + Премия;

 

Возврат Зарплата;

...

3. Нужно выделить начало и конец функции. Для этого используются ключевые слова «Функция», «КонецФункции», после которых не ставится «;».

Функция ...

    ...

    ПовременнаяОплата = Отработано * Ставка;

    Премия = ПовременнаяОплата * ПроцентПремии / 100;

    Зарплата = ПовременнаяОплата + Премия;

    

    Возврат Зарплата;

    

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

4. Функция должна содержать имя - функция <Имя>. Имя образуется по тем же правилам, что и переменная.
Чтобы понимать, какие значения и в каком порядке будут подставляться, опишем параметры: функция <Имя> (<Параметр1>, <Параметр2>...).

Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)

 

    ПовременнаяОплата = Отработано * Ставка;

    Премия = ПовременнаяОплата * ПроцентПремии / 100;

    Зарплата = ПовременнаяОплата + Премия;

 

    Возврат Зарплата;

 

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

Функция может не содержать параметров.

Функция ПроцентПремии()

    Возврат 10;

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

5. Чтобы использовать функцию (вызвать), обратимся по ее имени и опишем значения параметров.

Отработано = 100;

Ставка =  100;

ПроцентПремии = 10;

 

ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(ОтработаноСтавка, ПроцентПремии);

Вместо переменных допустимо указывать конкретные значения.

ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(100, 100, 10);

Внутри функции будут выполнены вычисления зарплаты, результат получен и присвоен переменной ЗарплатаИванов. Т. е. функция вернет значение зарплаты.

...

ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(100, 100, 10);

ЗарплатаПетров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);

 

Сообщить(ЗарплатаИванов);

Сообщить(ЗарплатаПетров);

...

Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)

 

    ПовременнаяОплата = Отработано * Ставка;

    Премия = ПовременнаяОплата * ПроцентПремии / 100;

    Зарплата = ПовременнаяОплата + Премия;

 

    Возврат Зарплата;

 

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

Процедура

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

Процедура СообщитьПроцентыПремий()

    Сообщить("Иванов 10%

    |Петров 12%

    |Сидоров 12%

    |Александров 15%

    |Сергеев 17%");

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

Вместо слов «Функция», «Конец функции» использовалось «Процедура», «КонецПроцедуры», а «Возврат» отсутствует.

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

Процедура СообщитьЗарплаты()

    

    ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(100, 100, 10);

    ЗарплатаПетров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);

    ЗарплатаСидоров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);

    

    Сообщить(ЗарплатаИванов);

    Сообщить(ЗарплатаПетров);

    Сообщить(ЗарплатаСидоров);

    

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

 

Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)

 

    ПовременнаяОплата = Отработано * Ставка;

    Премия = ПовременнаяОплата * ПроцентПремии / 100;

    Зарплата = ПовременнаяОплата + Премия;

 

    Возврат Зарплата;

 

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

Чтобы сообщить зарплаты, достаточно вызвать процедуру

СообщитьЗарплаты();

Общее

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

Процедура УвеличитьЧислоНаЕдиницу(Число)    

    Число = Число + 1;

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

 Функция ЧислоУвеличиноНаЕдиницу(Число)   

    Число = Число + 1;

    Возврат Истина; 

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

 В платформе уже имеется большое количество процедур и функций. Среди них:

  • Процедуры и функции работы с файлами, двоичными данными и т. д.
  • Функции работы со строками, датами и т. д.

Они описаны в «Синтакс-помощнике».

Например, функция Макс(<Значение1>, <Значение2>, ..., <ЗначениеN>)

Возвращает максимальное из полученных значений.

МаксимальноеЧисло = Макс(1, 2, 3, 10);

Сообщить(МаксимальноеЧисло); // 10

Задачи на эту тему:

Рейтинг 0

Комментарии