1С 8.3 Процедуры и Функции — Программист 1С Минск. Автоматизация бизнеса.
✔ Возврат значения из функции
&НаКлиенте
Функция Округление1 ( ПараметрЧисло , ПараметрЗнОкр )
Возврат Окр ( ПараметрЧисло , ПараметрЗнОкр ); //3.1415926535, 2
&НаКлиенте
Процедура ИсполняемаяПроцедура1 ( Команда )
ТекущееЧисло = 3.1415926535 ;
КолЗнОкр = 2 ;
ОкругленноеЧисло = Округление1 ( ТекущееЧисло , КолЗнОкр );
Сообщить ( ОкругленноеЧисло ); // 3.14
&НаКлиенте
Функция СообщениеПараметров2 ( ПараметрЧисло , ПараметрДата , ПараметрСтрока = «Строковое значение» )
Сообщить ( ПараметрЧисло ); // 2020
Сообщить ( ПараметрДата ); // Неопределено
Сообщить ( ПараметрСтрока ); // «Строковое значение»
&НаКлиенте
Процедура ИсполняемаяПроцедура2 ( Команда )
// Если у функции несколько параметров, то ненужный можно пропустить (указав запятую)
// при этом будет передано или Неопределено или значение по-умолчанию (в параметрах самой функции)
СообщениеПараметров2 ( 2020 ,,); //
&НаКлиенте
Процедура ИзменениеПараметра3 ( ПараметрСсылка )
// Изменение значения внутри и снаружи
ПараметрСсылка = 2020 ;
&НаКлиенте
Процедура ИсполняемаяПроцедура3 ( Команда )
ГодЗаписи = 2019 ;
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019
ИзменениеПараметра3 ( ГодЗаписи );
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2020
&НаКлиенте
Процедура ИзменениеПараметра4 (Знач ПараметрЗначение )
// Изменение значения только внутри процедуры
ПараметрЗначение = 2020 ;
&НаКлиенте
Процедура ИсполняемаяПроцедура4 ( Команда )
ГодЗаписи = 2019 ;
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019
// Только для простых типов (строка, число, дата), сложные объекты всё равно будут переданы в виде ссылки
ИзменениеПараметра4 ( ГодЗаписи );
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019 (остался прежним)
&НаКлиенте
Процедура ИзменениеПараметра5 ( ПараметрМассив )
// Изменение первого элемента массива
ПараметрМассив [ 0 ] = 2021 ;
// ПараметрМассив = 2021 и 2020
&НаКлиенте
Процедура ИсполняемаяПроцедура5 ( Команда )
Года = Новый Массив ();
Года . Добавить ( 2019 );
Года . Добавить ( 2020 );
// Создание копии массива через список значений
КопияГода = Новый СписокЗначений ;
КопияГода . ЗагрузитьЗначения ( Года );
КопияГода = КопияГода . ВыгрузитьЗначения ();
// Вызов процедуры, меняющую переданный массив (копия: Года)
ИзменениеПараметра5 ( КопияГода );
// После вызова процедуры в массиве Года по прежнему = 2019 и 2020
Процедуры и функции в 1с.
Процедуры и функции в системе 1с напоминают подобные конструкции в других языках программирования. Разработчик 1с имеет возможность создавать собственные процедуры и функции.
Объявление процедур и функций
Процедура в 1с
Процедура – это идентификатор, выполняющий некоторые действия, определенные
пользователем или системные. Говоря простым языком: если мы пропишем внутри нашего кода
некоторую процедуру (не важно, нами написанную или процедуру программы 1С), то когда
выполнение программы дойдет до этой строки, тогда будут выполнены определенные действия.
Функция в 1с
Функция – это идентификатор, выполняющий некоторые действия, определенные пользователем или системные, и возвращающий значение определенного типа. Как видите, функции отличаются от процедур только тем, что возвращают определенное значение.
Объявление функции
Например, функция СтрДлина() вычисляет длину строки. Аргумент передается в нее в качестве параметра, и возвращает это значение пользователю в виде числа. Или функция ТекущаяДата() определяет системную дату компьютера и возвращает это значение в виде даты.
Передача параметров процедуры и функции в 1с
Процедуры и функции в 1с могут обмениваться параметрами или аргументами. Передача параметров процедур и функций выполняется одним из способов.
Во-первых способ называется передачей по ссылке и представляет собой передачу не конкретного значения параметра, а адреса памяти (ссылки на переменную), где расположено это значение. Изменение переданного значения в вызываемой процедуре или функции приведет к изменению передаваемой переменной в вызывающем методе.
Во-вторых способ называется передачей по значению и представляет собой передачу копии значения параметра. В этом случае изменение переданного значения в вызываемой процедуре или функции не приведет к изменению значения передаваемой переменной в вызывающем методе.
В то же время механизм передачи параметров процедур и функций зависит от того, какой вызов будет выполняться:
● вызов без передачи управления между клиентом и сервером (только на клиенте или только на сервере);
● вызов с передачей управления между клиентом и сервером.
Возврат функцией 1с нескольких значений.
Функция 1с возвращает результат при помощи ключевого слова Возврат. После данного ключевого слова можно поставить только одну переменную. Для возвращение нескольких значений используется объект Структура.
Пример объявления функции 1с
Как создать процедуру в 1с
Функции 1С и процедуры в 1С работают аналогично другим языкам — функция это именованная подпрограмма для вызова из других мест программного кода.
Далее подробнее про функции 1С и процедуры 1С.
Порядок объявления функций в модуле произвольный (то есть можно в тексте процедуры, расположенной в самом начале модуля использовать процедуры, текст которых будет расположен ниже в этом модуле). Аналогично переменным 1С, функции 1С могут быть экспортными.
Чтобы «выйти» из выполнения функции 1С и процедуры — используют команду «Возврат;». Функция (в отличии от процедуры) «возвращает» результат вычислений, то есть необходимо написать «Возврат ЗНАЧЕНИЕ;». Функции 1С не типизированы, значит могут возвращать значение разных типов, в зависимости от параметров или условий.
Функция отличается от процедуры возможностью вернуть результат вычислений, например:
Функция Функция1(Параметр)
Возврат Параметр * 2;
КонецФункции
Переменная1 = Функция1(10);
//Переменная1 будет равна 20
Параметры функции 1С и процедуры — это ссылки на переменные, существующие в месте вызова. «Ссылка» — значит при изменении значения параметра «внутри» функции 1С, он будет изменен и «снаружи». Чтобы такого не происходило — параметр передают со значением ПЕРЕМ. Однако это не работает со значениями-объектами (списками, таблицами, объектами базы данных), они все-равно будут переданы по ссылке.
При передаче параметра в процедуру/функцию, он передается «по ссылке». Это значит, что изменяя его внутри процедуры, Вы изменяете его значение, при доступе после окончания функции 1С. Таким образом, предыдущий пример можно написать так:
Процедура Процедура1(Параметр)
Параметр = Параметр * 2;
КонецПроцедуры
Переменная1 = 10;
Процедура1(Переменная1);
Сообщить(Переменная1);
//Результатом будет 20
Чтобы передать внутрь процедуры значение переменной, а не ее саму:
Процедура Процедура1(ЗНАЧ Параметр)
//действия..
КонецПроцедуры
При работе с объектами (справочники, документы) необходимо помнить, что внутри функции 1С/процедуры 1С над ними могут быть выполнены действия.
Если у функции 1С/процедуры 1С несколько параметров, то ненужный можно пропустить (указав запятую, если пропущен параметр в середине), при этом будет передано или Неопределено (см. ниже) или значение по-умолчанию:
Функция Функция1(Параметр1, Параметр2, Параметр3 = «Строковое значение»)
//Чтото делаем
КонецФункции
//Вызов функции без некоторых параметров
//параметр2 будет равен Неопределено
//параметр3 будет равен «Строковое значение»
Функция1(10);
//Вызов функции без второго параметра
Функция1(10, , «Значение»);
Как уже говорилось ранее, процедуры 1С используются в качестве обработчиков событий, возникающих при работе пользователя с формой (открытие, закрытие, нажатие кнопок и т.п.) или работе платформы (старт, завершение и т.п.). Возможные виды обработчиков формы или ее элементов можно увидеть в свойствах — щелкнув мышью на соответствующий элемент формы (и прокрутив окно свойств вниз). Виды обработчиков в модуле объекта можно увидеть с помощью выпадающего списка на панели в конфигураторе — где отображается список еще неопределенных и уже определенных событий. У разных событий различные параметры, при добавлении обработчика 1С автоматически прописывает список параметров.
В модуле формы, объекта располагаются обработчики событий. Обработчик можно добавить (назначить) следующими способами:
Процедуры и функции
Процедуры и функции используются для выделения отдельных алгоритмов, разбития кода на логические участки или для избежания дублирования кода. Функция отличается от процедуры тем, что возвращает значение.
Параметры
У процедур и функций может быть сколько угодно параметров или может не быть вообще. Параметры могут быть обязательными и необязательными(в таком случае необходимо указать значения параметров по умолчанию). Обычно обязательные параметры указываются вначале, необязательные в конце.
Передача параметров в процедуру или функцию
В функцию или процедуру параметры передаются по ссылке(не создается отдельная копия, а передается ссылка на эту переменную, изменение параметра повлечет за собой изменение переменной), но если при определении процедуры/функции перед параметром указать Знач например:
то в функцию будет передаваться не ссылка на переменную а ее копия. Некоторые типы значений всегда передаются по ссылке, надо найти и указать. Порядок следования процедур и функций в модуле не имеет значения. Пример определения процедуры:
Документирование
С некоторых пор в платформе появилась возможность документировать собственные процедуры и функции. Для этого комментарий к функции должен быть оформлен особым образом. Система подсказок платформы умеет распознавать такие комментарии. И при отображении подсказок по параметрам функции будет выводить не только имена параметров, но и их назначение.
При написании кода, использующего такую функцию, мы получим удобный комментарий.