О контексте выполнения читай Программные модули платформы 1С
Понятие функции 1С и процедуры 1С
Функция 1С - это фрагмент программного кода:
- связанный с идентификатором, к которому можно обратиться из другого места программы, и
- возвращающий результат выполнения.
После выполнения функции управление возвращается обратно в точку программы, где данная функция была вызвана.
Если функция не будет иметь ключевого слова
Возврат
, то она вернет несуществующее значение, т.е. значение типа данныхНеопределено
.
Процедура 1С - это функция, которая ничего не возвращает (она просто вызывается и выполняет какие-то действия).
Процедуры 1С, как правило, используются в качестве обработчиков событий, возникающих:
- при работе пользователя с формой (открытие, закрытие, нажатие кнопок и т.п.) или
- при работе платформы (старт, завершение и т.п.).
Процедуры и функции позволяют:
- избавиться от дублирования кода, заменив его вызовом процедуры (функции), в т.ч. и из других функций или процедур;
- упростить внесение изменении в программу (изменения достаточно внести в одном месте - в месте объявления процедуры или функции);
- повысить читаемость программного кода и, в итоге, упростить сопровождение прикладного решения.
Виды обработчиков формы или ее элементов можно увидеть в свойствах — щелкнув мышью на соответствующий элемент формы и прокрутив окно свойств вниз.
Виды обработчиков в модуле объекта можно увидеть с помощью выпадающего списка на панели в конфигураторе (кнопка "Процедуры и функции") — где отображается список еще неопределенных и уже определенных событий. У разных событий различные параметры, при добавлении обработчика 1С автоматически прописывает список параметров.
Выход из процедуры или функции 1С по условию
Чтобы «выйти» из выполнения функции 1С и процедуры используют команду «Возврат
». Т.к. функция (в отличии от процедуры) возвращает результат вычислений, то в ней необходимо написать Возврат <ЗНАЧЕНИЕ>;
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Процедура ОпределитьТипФайла() Если Расширение = "dat" Тогда Сообщить("Неизвестный формат"); Возврат; КонецЕсли; Если Расширение = "jpg" ИЛИ Расширение = "png" ИЛИ Расширение = "bmp" Тогда ТипФайла = "Картинка"; ИначеЕсли Расширение = "xls" ИЛИ Расширение = "xlsx" Тогда ТипФайла = "Excel-таблица"; ИначеЕсли Расширение = "txt" ИЛИ Расширение = "csv" Тогда ТипФайла = "Текстовый документ"; Иначе ТипФайла = "Неопределено"; КонецЕсли; Сообщить(ТипФайла); КонецПроцедуры Расширение = "dat"; ОпределитьТипФайла(Расширение); // "Неизвестный формат" |
Функции 1С не типизированы, т.е. могут возвращать значение разных типов, в зависимости от параметров или условий.
Пример функции 1С:
1 2 3 4 5 |
Функция Функция1(Параметр) Возврат Параметр * 2; КонецФункции Переменная1 = Функция1(10); // Переменная1 будет равна 20 |
Пример процедуры 1С:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Передача в процедуру значения переменной по ссылке Процедура Процедура1(Параметр) Параметр = Параметр * 2; КонецПроцедуры Переменная1 = 10; Процедура1(Переменная1); Сообщить(Переменная1); // 20 // Чтобы передать внутрь процедуры значение переменной, а не ее саму: Процедура Процедура1(ЗНАЧ Параметр) // тело процедуры КонецПроцедуры |
Объявление функций и процедур в 1С
Соглашения при описании процедур и функций 1С
Процедура или функция начинает описываться со слова Процедура
или Функция
. Далее следует Имя процедуры
или Имя функции
. После имени обязательно указываются круглые скобки. Внутри скобок могут находиться описываемые параметры. Данные параметры передаются при вызове (при обращении к процедуре). После круглых скобок может стоять слово Экспорт
(экспортная функция).
Потом следует тело процедуры (функции), т.е. последовательность из любого количества операторов.
В теле могут находиться вызовы других процедур и функций данного модуля или других модулей, которые доступны из текущего программного модуля. Обязательным является наличие заключительного слова КонецПроцедуры (КонецФункции).
После описания процедуры или функции точку с запятой ставить не нужно.
Чтобы обратиться к списку процедур текущего модуля в панели конфигуратора можно нажать на кнопку в виде лупы с надписью «PROC» или использовать горячие клавиши (Ctrl+Alt+P).
Особенности объявления функций и процедур 1С:
- Порядок объявления функций и процедур в модуле произвольный (то есть можно в тексте процедуры, расположенной в самом начале модуля, использовать процедуры, текст которых будет расположен ниже в этом модуле).
- Аналогично переменным 1С, функции 1С могут быть экспортными.
- Параметры функции 1С или процедуры — это ссылки на переменные, существующие в месте вызова. Ссылочность параметров означает то, что при изменении значения параметра «внутри» функции (процедуры) 1С, он будет изменен и «снаружи». Для исключения подобного поведения параметр в функции указывают со значением
ЗНАЧ
. Однако это не работает со значениями-объектами (списками, таблицами, объектами базы данных), они всё равно будут переданы по ссылке.Пример передачи по ссылке12345678910Функция ИзменитьСтроку(ИсходнаяСтрока)ИсходнаяСтрока = ИсходнаяСтрока + "; " + ИсходнаяСтрока;Возврат ИсходнаяСтрока;КонецФункцииФактическийПараметр = "красный";Результат = ИзменитьСтроку(ФактическийПараметр);Сообщить(Результат); // красный;красныйСообщить(ФактическийПараметр); // красный;красный (так как передана по ссылке - меняется сама переменная)[свернуть]Пример передачи по значению12345678910Функция ИзменитьСтроку(ЗНАЧ ИсходнаяСтрока)ИсходнаяСтрока = ИсходнаяСтрока + "; " + ИсходнаяСтрока;Возврат ИсходнаяСтрока;КонецФункцииФактическийПараметр = "красный";Результат = ИзменитьСтроку(ФактическийПараметр);Сообщить(Результат); // красный;красныйСообщить(ФактическийПараметр); // красный (так как передано значение переменной)[свернуть] - Если у функции (процедуры) 1С несколько параметров, то ненужный можно пропустить (указав запятую, если пропущен параметр в середине), при этом будет передано или
Неопределено
(см. ниже) или значение по умолчанию. - При работе с объектами (справочники, документы) необходимо помнить, что внутри функции 1С/процедуры 1С над ними могут быть выполнены действия.
1 2 3 4 5 6 7 8 9 10 11 |
Функция Функция1(Параметр1, Параметр2, Параметр3 = "Строковое значение") // тело функции КонецФункции //Вызов функции без некоторых параметров //параметр2 будет равен Неопределено //параметр3 будет равен "Строковое значение" Функция1(10); //Вызов функции без второго параметра Функция1(10, , "Значение"); |
В некоторые процедуры-обработчики передается такой параметр, как
Отказ
. Значение данного параметра по умолчанию –Ложь
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/// Установка параметра процедуры по умолчанию &НаКлиенте Процедура Проц(Имя = "Сергей", Отчество, Фамилия = "не задано") Сообщить(Имя + " " + Отчество + " " + Фамилия); КонецПроцедуры &НаКлиенте Процедура Пример4(Команда) Проц("Вадим", "Иванович", "Сидоров"); // Вадим Иванович Сидоров Проц("Вадим", "Иванович"); // Вадим Иванович не задано Проц(, "Иванович"); // Сергей Иванович не задано Проц(,,); // Сергей Неопределено не задано КонецПроцедуры |