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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Смотрите так же:  Приказ 340н от 25 апреля 2011 г

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Смотрите так же:  Доверенность на оформление земельного пая.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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