Возврат значения из функции 1с

Онлайн-школа программирования в 1С

Возврат значения из функции 1с

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

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

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

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

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

Функции и процедуры в языке 1С 8.3

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

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

А = 0;ВвестиЧисло(А);Б = 0;ВвестиЧисло(Б);Результат = (А + Б) * (А — Б);ОткрытьЗначение(Результат);

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

Неужели нам снова и снова придётся писать код для её вычисления:

Результат = (А + Б) * (А — Б);

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

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

Пусть этим именем будет ПроизведениеСуммыИРазности.

Получается теперь мы можем написать:

Результат = ПроизведениеСуммыИРазности;

И всё? Нет, конечно! Ведь непонятно произведение суммы и разности каких именно чисел нужно считать. Гораздо лучше будет передать эти числа нашему имени в качестве параметров, как мы обычно делаем при вызове команды:

Результат = ПроизведениеСуммыИРазности(А, Б);

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

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

Функция ПроизведениеСуммыИРазности(А, Б) Результат = (А + Б) * (А — Б); Возврат Результат;КонецФункции

Что включает в себя определение этой функции?

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

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

Дальше идёт тело. Это команды компьютеру, которые будут выполняться в тот момент, когда мы сделаем вызов нашей функции. Тело заканчивается ключевым словом КонецФункции.

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

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

Мы можем вызывать функцию столько раз в программе сколько нам потребуется.

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

Но функции и процедуры не следует писать лишь бы где! Для определения наших функций мы будем использовать новый модуль. Чтобы его добавить следуйте инструкциям ниже.

1. Раскройте список «Общие» в дереве конфигурации.

2. Найдите в нём пункт «Общие модули» и нажмите на нём правой кнопкой мыши. Выберите «Добавить».

3. Добавился модуль. В правой части окна конфигуратора задайте его имя и свойства, как показано ниже.

 Внимание! Пожалуйста, ещё раз убедитесь, что вы поставили галки (Клиент, Сервер, Внешнее соединение) также, как на рисунке выше. 

4. Перейдите в этот модуль. Всё! Здесь можно писать наши функции и процедуры. Напишите процедуру с именем Привет, без параметров, после вызова которой компьютер просто здоровается с нами.

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

5. Теперь вернитесь в модуль управляемого приложения.

6. И сделайте вызов нашей процедуры. Так как она находится в другом модуле к её имени добавляется «Уроки.».

7. Запустите 1С и убедитесь, что всё работает!

Пройдите тестирование

Начать тест

Ещё примеры функций

// ПРИМЕР №1 //*** Расположить этот код в общем модуле Уроки. *** Функция СуммаДвухЧисел(ЧислоА, ЧислоБ) Экспорт  // в функцию передаются при вызове два числа // ЧислоА и ЧислоБ // находим их сумму и возвращаем наружу  Возврат ЧислоА + ЧислоБ; КонецФункции //*** Расположить этот код в модуле управляемого приложения. *** // вызвали функцию СуммаДвухЧисел// передали ей в качестве параметров два числаСумма = Уроки.СуммаДвухЧисел(2, 5);// теперь Сумма равна тому, что вернула нам// функция т.е. 2 + 5 = 7Сообщить(Сумма); // ПРИМЕР №2 //*** Расположить этот код в общем модуле Уроки. *** Функция ОписаниеЗнакаЧисла(ЛюбоеЧисло) Экспорт  // в функцию передается число ЛюбоеЧисло // сравниваем его с нулём и в случае // если число больше или равно нулю // возвращаем наружу одну фразу // иначе другую.  Если ЛюбоеЧисло >= 0 Тогда Возврат «Положительное число.»; Иначе Возврат «Отрицательное число.»; КонецЕсли; КонецФункции //*** Расположить этот код в модуле управляемого приложения. *** // вызвали функцию ОписаниеЗнакаЧисла// передали ей в качестве параметра одно числоОписание = Уроки.ОписаниеЗнакаЧисла(-3);// теперь Описание равно строке «Отрицательное число.»// эту строку нам вернула функцияСообщить(Описание); // ПРИМЕР №3 //*** Расположить этот код в общем модуле Уроки. *** Функция ДлинаОкружности(Радиус) Экспорт  // в функцию передаётся число Радиус   Пи = 3.14; // объявляем Пи // вычисляем результат по формуле Результат = 2 * Пи * Радиус;  // возвращаем этот результат // наружу в место откуда была вызвана функция Возврат Результат; КонецФункции //*** Расположить этот код в модуле управляемого приложения. *** // вызвали функцию, которая вычисляет длину// окружности по переданному радиусуДлина = Уроки.ДлинаОкружности(25);// теперь Длина равна 157// именно это число вернула нам функция в качестве// результата работыСообщить(Длина);

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

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

Источник: https://helpme1c.ru/vnutrennij-yazyk-programmirovaniya-1s-8-3-dlya-nachinayushhix-programmistov-urok-13

Язык 1С в примерах

Возврат значения из функции 1с

Полный синтаксис (нажмите, чтобы раскрыть)

Описание:

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

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

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

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

Синтаксис:

Процедура ([[Знач] [=], … ,[Знач] [=]])[Экспорт] // Объявления локальных переменных; // Операторы; … [Возврат;] // Операторы; …КонецПроцедуры

Параметры:

Имя_процНазначает имя процедуры.
ЗначНеобязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, то есть изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
Парам1, …, ПарамNНеобязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст.
=ДефЗначНеобязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров.
ЭкспортНеобязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей.
// Объявления локальных переменныхОбъявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры.
// ОператорыИсполняемые операторы процедуры.
ВозвратНеобязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно.
КонецПроцедурыОбязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре.

  

Функция

Описание:

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

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

Функции отличаются от процедур только тем, что возвращают Возвращаемое значение. Конец программной секции функции определяется по оператору КонецФункции.

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

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

Синтаксис:

Функция ([[Знач] [=], … ,[Знач] [=]])[Экспорт] //Объявления локальных переменных; // Операторы ; … Возврат ; // Операторы ; …КонецФункции

Параметры:

Имя_функцииНазначает имя функции.
ЗначНеобязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении функции никак не повлияет на фактический параметр, переданный при вызове функции. Если это ключевое слово не указано, то параметр функции передается по ссылке, то есть изменение внутри функции значения формального параметра приведет к изменению значения соответствующего фактического параметра.
Парам1, …, ПарамNНеобязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове функции фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте функции. Список формальных параметров может быть пуст.
=ДефЗначНеобязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров.
ЭкспортНеобязательное ключевое слово, которое указывает на то, что данная функция является доступной из других программных модулей.
// Объявления локальных переменныхОбъявляются локальные переменные, на которые можно ссылаться только в рамках этой функции.
// ОператорыИсполняемые операторы функции.
Возврат Возвращаемое значениеКлючевое слово, которое завершает выполнение функции и возвращает указанное значение в выражение, в котором используется функция. В качестве возвращаемого значения может выступать выражение или переменная, значение которого содержит результат обращения к функции.
КонецФункцииОбязательное ключевое слово, обозначающее конец исходного текста функции.

Источник: https://helpme1c.ru/procedury-v-yazyke-1s-8-v-primerax

Возврат значения из функции 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С автоматически прописывает список параметров.

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

Возврат нескольких значений из функции

Подскажите пожалуйсто как вернуть несколко значений ъ Процедура Один () а = 1 б= 2

Сравнить (а, б) //»передали в функцию»

«И вот тут надо Сообщить «а>б» или «а б Тогда возаврт а иначе Б

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

Смотрите так же:  Приказ начало учебного года в доу

ну вот из за того что в данном примере функция возврощает одно значение то условие не получистя.
Зараенее спасибо)))

Войдите как ученик, чтобы получить доступ к материалам школы

Вернуть массив из функции

Только начинаю осваивать 1С. Столкнулся с проблемой:

Есть строка вида: СТР=»Префикс1=Значение1;Префикс2=Значение2.

»
Есть массив префиксов: МассивПрефиков = Есть процедура, где строку разбивают на массив вида

ИсходныйМассив =
Далее в процедуре вызывается функция, на вход ей подаются элементы массива ИсходныйМассив и весь МассивПрефиксов.

Задача функции — вернуть ВыходнойМассив вида (конечно попутно там происходит проверка еще кое-каких условий, но ВыходнойМассив должен отдаваться с 2 значениями). По факту получаю:
Вызываю в основной процедуре эту функцию:

Результат=Функция(ИсходныйМассив[элемент], МассивПрефиксов); Для каждого ЭлементРезультат из Результат Цикл Сообщить(ЭлементРезультат);

КонецЦикла

Заканчивается ошибкой: итератор для значения не определен

Результат=Функция(ИсходныйМассив[элемент], МассивПрефиксов);
Сообщить(Результат[0]);

Заканчивается ошибкой: Получение элемента по индексу для значения не определено

Процедура или Функция?

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

Данный вопрос относится к категории «Размышления над стилем».

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

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

Небольшой опрос среди своих сослуживцев выявил несколько разных подходов к этой проблеме.
Но из позитивных замечаний получилось выделить несколько идей.

Подход 1. Исходя из определения Процедуры и Функции
Тут всё просто, читаешь документацию и, помня, что процедура отличается от функции только возвращаемым значением, решаешь — если возврат значения не нужен, то Процедура, если нужен, то Функция. Тем не менее, процедура может изменять значения параметров, переданных по Ссылке.

В контексте данного подхода, есть два разветвления на тему, как Фукнция должна возвращать параметры:

Подход 1.1 Функция возвращает один параметр через возврат, остальные через переменные, переданные по ссылке. На выходе процедуры мы включаем некую обработку ошибок, зависящую от возвращаемого значения.

Смотрите так же:  Строгий выговор это дисциплинарное взыскание

Подход 1.2 Функция не может возвращать значения через свои параметры и должна это делать только через значение возврата.

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

Если в ходе работы появилась ошибка, то будет возвращено значение Неопределено.

Подход 2. Процедуры — они как МАКРОСЫ При этом подходе Процедура используется всего лишь для того, чтобы объединить несколько вызовов однотипных действий.

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

Подход 3. Всё на свете — Функции, но без идиотизма 1. Всегда используются функции, процедуры не используются. 2. Функция возвращает либо «», либо строковое описание ошибки, все изменения данных идут по ссылке через выходные параметры

3. Для исключения идиотизма в применении правила 2, для функций, возвращающих гарантировано одно значение, без ошибок внутри функции, используется передача значения через возврат функции. Например, ЭтоКорректнаяДата(вхДата)

Вот пока что получилось. А какие есть подходы у вас?

Возврат пустого значения функцией

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

да. И так гимороя хватает без типизации

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

Если Функция возвращает ТОЛЬКО пустое значение, то зачем нужна функция?

(0) «Однако, по факту. »
Вопрос на засыпку: чем недокументированные возможности отличаются от документированных?

Если в документации сказано «обязательно», значит обязательно. А уж «» или 0 или ПолучитьПустоеЗначение() зависит от того, для чего используется функция

Источник: https://nnvrsk.ru/vozvrat-znachenija-iz-funkcii-1s

1с 7.7 возврат значения

Возврат значения из функции 1с

В модуле формы обработки пишем:

сзПараметр = СоздатьОбъект( «СписокЗначений» ); сзПараметр . Установить ( «ТЗ» , тзТовары ); Если Конт . Выбран () = 1 Тогда ОткрытьФорму( Конт . ТекущийДокумент (), сзПараметр );

КонецЕсли;

В модуле формы документа добавляем предопределенную процедуру «ПриПовторномОткрытии()» примерно следующего содержания:

сзПараметр = Форма . Параметр ;
Если ТипЗначенияСтр( сзПараметр ) = «СписокЗначений» Тогда

ТЗ = сзПараметр . Получить ( «ТЗ» );

ТЗ . ВыбратьСтроки ();
Пока ТЗ . ПолучитьСтроку () = 1 Цикл

Если ПустоеЗначение( ТЗ . Товар ) = 1 Тогда Предупреждение( «Имеется пустой товар !» ); СтатусВозврата( 0 ); Возврат;

КонецЕсли;

НоваяСтрока (); Товар = ТЗ . Товар ; Количество = ТЗ . Количество ; Цена = ТЗ . Цена ; Сумма = ТЗ . Сумма ; Всего = ТЗ . Всего ; НДС = ТЗ . НДС ;

НП = ТЗ . НП ;

Оператор Функция

Описывает функцию для повторного использования

Описание функции во встроенном языке 1С:Предприятие 7.7 имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

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

Определение функции начинается с ключевого слова Функция и заканчивается ключевым словом КонецФункции . За ключевым словом Функция обязательно следует идентификатор функции и блок определения формальных параметров.

Описывать параметры функции вовсе не обязательно. Обязательно лишь указать обязательный атрибут функции — круглые скобки.

Ключевое слово Экспорт используется в глобальном модуле для расширения области видимости функции. Функция, определенная как экспортная, будет доступна в любом другом программном модуле конфигурации.

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

Сразу за блоком формальных параметров и до ключевого слова КонецФункции располагается тело функции — объявления локальных переменных функции и последовательность исполняемых операторов.

Переменные можно объявлять до первого исполняемого оператора.

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

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

Также в теле функции можно использовать оператор Возврат, который прекращает выполнение функции и возвращает произвольное значение в точку вызова функции.

Функции 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С автоматически прописывает список параметров.

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

v7: Обмен данными между открытыми формами

(4)а как контекст формы первой обработки получить? можешь примерчик какой-нить привести?

допустим, из 1 обработки вызываем:

Из обработки2 надо передать назад что-то, как это сделать?

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

А вот с возвратом параметра у многих бывают затруднения. Одним из способов является возврат параметра через глобальную переменную, но в данной статье я опишу более изящный и неочевидный способ.

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

параметр обрабока может вернуть любой параметр в тот же модуль из которого она была вызвана! Для этого достаточно в модуле формы обработки выполнить

т.е. для моего случая из (5) можно выходит просто написать в обработке2:

Форма.Параметр=»значение»,
и тогда в обработке1 будет:

Возврат параметра из обработки (1С:Предприятие 7.7)

Наверное, многие, кто занимался разработкой прикладных решений на платформе 1С:Предприятие 7.7, сталкивались со следующей задачей: в процессе выполнения кода нужно открыть обработку, передать в неё параметр и получить результат её работы, в виде возвращаемого параметра. С передачей параметра в обработку никаких проблем не возникает, как следует из документации:

ОткрытьФормуМодально(«Обработка.МояОбработка»,Параметр);

А вот с возвратом параметра у многих бывают затруднения. Одним из способов является возврат параметра через глобальную переменную, но в данной статье я опишу более изящный и неочевидный способ.

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

параметр обработка может вернуть любой параметр в тот же модуль из которого она была вызвана! Для этого достаточно в модуле формы обработки перед ее закрытием выполнить

форма.параметр=»ВозвращаемыйПараметр»;

В качестве примера приведу простую обработку проверки пароля:

Вызов из программного модуля:

ПравильныйПароль = «12345»; ОткрытьФормуМодально(«Обработка.Авторизация»,ПравильныйПароль); Если (ПравильныйПароль=0) Тогда Сообщить(«Не угадали»); Возврат;

КонецЕсли;

Обработка Авторизация:

// Пароль — поле ввода на форме

// На форме имеются две кнопки, их обработчики — процедуры Ок() и Отмена()

Смотрите так же:  Требования black mirror

// Модуль формы обработки

Процедура ПриОткрытии() ПравильныйПароль=Форма.Параметр; Форма.Параметр=0;

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

Процедура Ок() Если (СокрЛП(Пароль)=ПравильныйПароль) Тогда Форма.Параметр=1; Форма.Закрыть(0); Иначе Пароль=»»; Предупреждение(«Неверный пароль !»); Активизировать(«Пароль»,1); КонецЕсли;

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

Процедура Отмена() Форма.Закрыть(0);

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

Адвокат 24