[Alimir_BootModal_Login]

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

Автор уроков и преподаватель школы: Владимир Милькин

На прошлом уроке мы начали знакомство с функциями и процедурами в языке 1С 8.3. Так как это действительно важная тема посвятим ей и это занятие.

Функции в 1С 8.3 - продолжение...

Итак, мы уже уяснили, что все программы состоят из команд компьютеру.

А функции - это способ группировки этих команд точно также как, например, папки на компьютере - способ группировки для файлов.

Ещё функцию можно рассматривать как чёрный ящик, внутри которого лежат какие-то команды для компьютера. Чёрный ящик имеет имя. И чтобы заставить компьютер выполнить команды из этого ящика нам нужно указать его имя, например, так:

ЧёрныйЯщик();

Как видите, вызов "чёрного ящика" сам по себе является командой. При вызове чёрного ящика - выполнятся все команды, которые находятся внутри него.

Более того один ящик может содержать в себе не только команды, но и другие ящики, точно также как папки могут быть вложенными в другие папки. Ну вы поняли аналогию.

Но чёрные ящики (функции) имеют такую особенность:

  1. Они могут содержать входные отверстия (одно или несколько) для того, чтобы мы в них могли что-то положить (параметры).
  2. И они обязательно содержат одно выходное отверстие, из которого мы сможем забрать результат работы ящика.
  3. Ящик-функция просто обязан вернуть нам хотя бы какой-то результат в выходное отверстие.

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

  1. Придумываем имя для этого ящика - "СуммаЧисел".
  2. Придумываем имена для входных отверстий этого ящика (параметров). Их два (числа), поэтому пусть будет - "ЧислоА" и "ЧислоБ".
  3. Пишем объявление самого ящика (функции):
    Функция СуммаЧисел(ЧислоА, ЧислоБ)
    КонецФункции
  4. Теперь нам осталось поместить внутри ящика команды, которые посчитают сумму входных параметров (ЧислоА и ЧислоБ) и вернут их в выходное отверстие (команда Возврат):
    Функция СуммаЧисел(ЧислоА, ЧислоБ)
        Результат = ЧислоА + ЧислоБ;
        Возврат Результат;
    КонецФункции
  5. Отлично! Теперь мы можем использовать этот чёрный ящик в своей работе. Вызывается он так:
    ЧислоС = СуммаЧисел(10, 25);
    Сообщить(ЧислоС); // выведет 35

    Обращаю ваше внимание, что при вызове мы указали имя ящика (СуммаЧисел), а затем его входные параметры в круглых скобках. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Ящик выполнил свою работу и вернул результат в переменную ЧислоС, значение которой мы вывели командой Сообщить.

А вот как выглядит ящик, который принимает всего одно число и возвращает квадрат этого числа:

Функция КвадратЧисла(ЧислоА)
    Результат = ЧислоА * ЧислоА;
    Возврат Результат;
КонецФункции

Вызывается он так:

Сообщить(КвадратЧисла(10)); // выведет 100

Функции (ящики) могут принимать и один, и два и три и гораздо больше входных параметров. А могут и совсем не принимать.

Для примера давайте напишем функцию, которая всегда возвращает в качестве результата работы строку "Привет":

Функция Привет()
    Возврат "Привет";
КонецФункции

Так как функция (ящик) совсем не содержит входных параметров (отверстий), то внутри круглых скобок при вызове писать ничего не нужно:

Строка = Привет();
Сообщить(Строка);

Процедуры в языке 1С 8.3 - продолжение ...

С функциями более менее должно быть понятно теперь думаю всем. А что же такое процедуры? Да те же чёрные ящики:

  1. И входные отверстия (параметры) у них имеются.
  2. И команды они в себе также могут содержать.
  3. И другие ящики они также в себя могут включать.

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

Таким образом, если нам нужно объединить группу команд, которая что-то сделает и вернёт нам результат (например, сумму чисел), то используем функции.

А если обратного результата не будет - то процедуры. Процедуры являются как бы укороченными функциями. Более простыми. Они могут принимать входные параметры и что-то с ними делать, но они не возвращают нам обратный результат после своей работы. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Давайте в качестве примера напишем такой ящик-процедуру, который будет принимать на вход число и, если это число больше или равно нулю, то прямо внутри ящика будет выводится сообщение "положительное число", иначе "отрицательное число".

  1. Определим имя нашего ящика - "ОписаниеЧисла".
  2. Определим имя входного параметра - "ЧислоА";
  3. Определим описание нашего ящика:
    Процедура ОписаниеЧисла(ЧислоА)
    КонецПроцедуры
  4. Теперь поместим внутрь ящика команды, которые выведут описание числа, в зависимости от его знака:
    Процедура ОписаниеЧисла(ЧислоА)
        Если ЧислоА >= 0 Тогда
            Сообщить("положительное число");
        Иначе
            Сообщить("отрицательное число");
        КонецЕсли;
    КонецПроцедуры
  5. А вызывать наш ящик будем так:
    ОписаниеЧисла(-3);

Выполните тест по следующему примеру

Процедура Привет(Число)
    Сообщить("Привет!");
    Сообщить("Я процедура и меня только что вызвали.");
    Сообщить("У меня всего один параметр и его имя Число.");
    Сообщить("При моём вызове его значение указали равным " + Число);
КонецПроцедуры
Начать тест

Выполните тест по следующему примеру

Функция Утроение(Строка)
    Сообщить("Я функция Утроение. Меня вызвали.");
    Сообщить("Мне передали параметр с именем Строка и значением " + Строка);
    Сообщить("Я утрою этот параметр и верну как результат своей работы.");
    Возврат Строка + Строка + Строка;
КонецФункции
Начать тест

Домашние задания

Задание №37. Напишите ящик, который принимает радиус круга, а возвращает его площадь. Продемонстрируйте его использование.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

Задание №38. Напишите ящик, который принимает две строки, а возвращает их объединение (или как говорят конкатенацию). То есть передали "Иван" и "Петров", а вернул "Иван Петров".  Продемонстрируйте его использование.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся