Скидки до 50% и курс по ИИ в подарок 2 дня 12 :27 :27 Выбрать курс
Код
#статьи

Процедуры и функции в 1С: что это, чем они различаются и как работают

Процедурно функционируем в 1С.

Иллюстрация: Оля Ежак для Skillbox Media

В «1С: Предприятии» практически любая конфигурация основана на процедурах и функциях. Эти конструкции делают код логичным, корректным и удобным для сопровождения. Они выглядят похоже, поэтому не всегда понятно, в каких случаях лучше применять процедуру, а в каких — функцию. В этой статье мы подробно разберём их назначение, различия и правила использования.

Содержание


Что такое процедуры и функции

Процедура в 1С — это блок кода, который выполняет действия, но не возвращает результат. Процедуры используют, когда нужно выполнить действие: записать данные в справочник, изменить объект, вывести сообщение пользователю. Они действуют как команда «сделай что-то».

Функция в 1С — это блок кода, который не только выполняет действия, но и возвращает результат. Обычно функции используют, когда нужно что-то вычислить и получить значение, например сумму или дату.

Например, процедура может оформить документ продажи и внести его в базу, а функция — посчитать итоговую сумму по документу и вернуть её.

В языке 1С процедуры и функции пишутся по-разному, но структура у них похожая.

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

Процедуры и функции делают код проще для чтения. Легче понять, что происходит, особенно если их имена объясняют, что они делают. Это облегчает поддержку программы.

Объявление процедуры

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

Процедура НазваниеПроцедуры(Параметр1, Параметр2)
    // Здесь выполняются действия
КонецПроцедуры

Вызов процедуры выглядит так:

НазваниеПроцедуры(10, 20);

Процедура выполняет код внутри, но ничего не возвращает.

Например:

Процедура ПоказатьСообщение()
    Сообщить("Привет, мир!");
КонецПроцедуры

ПоказатьСообщение();

Объявление функции

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

Функция НазваниеФункции(Параметр1, Параметр2)
    // Здесь выполняются вычисления
    Возврат РезультатВыполнения;
КонецФункции

Функцию вызывают так:

Результат = НазваниеФункции(10, 20);

Например:

Функция Умножить(Число1, Число2)
    Возврат Число1 * Число2;
КонецФункции

// Вызов функции:
Результат = Умножить(5, 7);

Использование процедур и функций

Порядок следования процедур и функций в модуле «1С: Предприятие 8» значения не имеет. Из любой процедуры (функции) модуля можно вызывать любую другую процедуру или функцию данного модуля, даже если она расположена после вызывающей.

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

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

Параметры процедур и функций

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

Параметры со значением по умолчанию

В описании можно указать, какое значение будет использоваться по умолчанию. Для этого справа от имени параметра через знак = задаётся значение. Если при вызове оно не указано, система подставит значение по умолчанию.

Процедура СоздатьПользователя(Имя, Пароль = "", Роль = "Пользователь")
    Сообщить("Создан пользователь: " + Имя);
    Сообщить("Роль: " + Роль);
КонецПроцедуры

// Вызовы
СоздатьПользователя("Иван");                  
// Пароль = "" , Роль = "Пользователь"

СоздатьПользователя("Мария", "12345");       
// Пароль = "12345", Роль = "Пользователь"

СоздатьПользователя("Админ", "qwerty", "Администратор"); 
// Все параметры заданы

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

Передача параметров по ссылке

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

Пример с процедурой:

Процедура УвеличитьНаОдин(Число)
    Число = Число + 1;
КонецПроцедуры

МоёЧисло = 10;
УвеличитьНаОдин(МоёЧисло);
Сообщить(МоёЧисло); // Выведет 11

Здесь переменная МоёЧисло изменилась, потому что параметр был передан по ссылке.

Пример с функцией:

Функция Увеличить(Число)
    Число = Число + 10;
    Возврат Число;
КонецФункции

МоёЧисло = 5;
НовыйРезультат = Увеличить(МоёЧисло);

Сообщить(МоёЧисло);     // Выведет: 15
Сообщить(НовыйРезультат); // Выведет: 15

Функция здесь не только возвращает НовыйРезультат через Возврат, но и напрямую изменяет исходную переменную МоёЧисло, так как параметр был передан по ссылке.

Передача параметров по значению

Чтобы передать параметр по значению, нужно явно указать ключевое слово Знач перед именем параметра в объявлении процедуры или функции. В этом случае в процедуру попадёт копия значения, а исходная переменная останется без изменений.

Пример с процедурой:

Процедура Увеличить(Знач Число)
    Число = Число + 1;
КонецПроцедуры

МоёЧисло = 5;
Увеличить(МоёЧисло);
Сообщить(МоёЧисло); // Выведет 5

Теперь переменная МоёЧисло осталась прежней, потому что внутри процедуры менялась только копия.

Пример с функцией:

Функция Увеличить(Знач Число)
    Число = Число + 10;
    Возврат Число;
КонецФункции

МоёЧисло = 5;
НовыйРезультат = Увеличить(МоёЧисло);

Сообщить(МоёЧисло);     // Выведет: 5
Сообщить(НовыйРезультат); // Выведет: 15

Специальный параметр Отказ

В некоторых процедурах-обработчиках в параметры передаётся специальная переменная Отказ. Её значение по умолчанию — Ложь. Если внутри обработчика присвоить ей Истина, выполнение процедуры будет прервано.

Пример:

Процедура ПередЗаписью(Отказ, РежимЗаписи)
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        Сообщить("Нельзя проводить этот документ!");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

В этом примере документ не проводится, потому что параметр Отказ был установлен в Истина.

Как работать с параметрами

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

Использование параметров. Параметры должны располагаться в логической последовательности: сначала указываются основные (общие), а затем уточняющие.

Неправильно:

Процедура РассчитатьСуммуДокумента(ИмяПоляСумма, ДокументОбъект, СуммаВключаетНДС = Истина)
Процедура ИзменитьЦветПоляФормы(Цвет, ИмяПоля, Форма)

Правильно:

Процедура РасчитатьСумму Документа(ДокументОбъект, ИмяПоляСумма, СуммаВключаетНДС = Истина)
Процедура ИзменитьЦветПоляФормы(Форма, ИмяПоля, Цвет)

Необязательные параметры должны располагаться после обязательных.

Пример:

Функция РассчитатьСкидку(СуммаПокупки, ПроцентСкидки = 5)
    Возврат СуммаПокупки * (1 - ПроцентСкидки / 100);
КонецФункции

// Вызовы:
РассчитатьСкидку(1000);        // ПроцентСкидки = 5 (по умолчанию)
РассчитатьСкидку(1000, 10);    // ПроцентСкидки = 10

Количество параметров

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

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

Плохой пример: слишком много параметров:

// Добавляет новый товар в документ
Процедура ДобавитьТоварВДокумент(ДокументОбъект, КодТовара, Наименование, Количество, Цена, СтавкаНДС = 20, Скидка = 0, Валюта = "RUB", ЕдиницаИзмерения = "шт")
    // Громоздкий код
КонецПроцедуры

// Вызов функции выглядит запутанно:
ДобавитьТоварВДокумент(Документ, "A123", "Монитор", 2, 15000, 20, 5, "USD", "шт");

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

Хороший пример: параметры сгруппированы в структуру

// Добавляет новый товар в документ
Процедура ДобавитьТоварВДокумент(ДокументОбъект, ПараметрыТовара)
    // Работаем с переданной структурой
КонецПроцедуры

// Вызов:
Параметры = Новый Структура;
Параметры.Вставить("КодТовара", "A123");
Параметры.Вставить("Наименование", "Монитор");
Параметры.Вставить("Количество", 2);
Параметры.Вставить("Цена", 15000);
Параметры.Вставить("СтавкаНДС", 20);
Параметры.Вставить("Скидка", 5);
Параметры.Вставить("Валюта", "USD");
Параметры.Вставить("ЕдиницаИзмерения", "шт");

ДобавитьТоварВДокумент(Документ, Параметры);

В этом примере код читается лучше: видно, какой параметр чему соответствует, и порядок свойств не имеет значения. Если добавить новые параметры, код вызова почти не меняется.

Как использовать процедуры и функции в конфигурациях «1С: Предприятия»

Процедуры и функции — это основные строительные блоки логики приложения 1С. Они структурируют код, сокращают дублирование и управляют бизнес-процессами.

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

Например:

Процедура ПровестиДокумент()
    ПроверитьДанные();
    ЗаписатьПроводки();
    Сообщить("Документ проведён успешно!");
КонецПроцедуры

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

Функция РассчитатьСуммуСоСкидкой(Сумма, Скидка)
    Возврат Сумма * (100 - Скидка) / 100;
КонецФункции

Где применяются

В модулях объектов (Документ, Справочник, Регистр):

  • проведение документов;
  • проверка данных при записи;
  • расчёт регламентных показателей.

В модулях форм:

  • обработка событий интерфейса (нажатие кнопки, изменение реквизита);
  • вызов серверных процедур для работы с базой;
  • заполнение табличных частей и управляемых элементов.

В общих модулях:

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

Как посмотреть

Чтобы просмотреть список процедур и функций текущего модуля, нужно нажать на кнопку с изображением лупы и подписью Proc или использовать сочетание клавиш Ctrl + Alt + P. Откроется окно навигации, в котором можно выбрать нужную процедуру или функцию и перейти к её коду.

Скриншот: «1С: Предприятие» / Skillbox Media

По умолчанию элементы отображаются так, как они расположены в модуле. Список можно отсортировать по алфавиту, установив флажок Сортировка.

Кроме процедур и функций, в списке для каждого модуля отображаются стандартные обработчики, например ПриОткрытии (), ПриЗакрытии (), ПриЗаписиНаСервере (), набор которых различается для разных элементов. Если дважды щёлкнуть по выбранному обработчику, в модуле автоматически создастся заготовка соответствующей процедуры — обработчика события.

Больше интересного про код — в нашем телеграм-канале.  Подписывайтесь!





Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована