Обращение к процедуре объекта как к функции

Обращение к процедуре объекта как к функции

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

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

Общая схема вызова серверной процедуры/функции состоит из нескольких этапов:

  1. Вызов контекстной серверной процедуры формы;
  2. Преобразование основного реквизита формы в прикладной объект;
  3. Вызов экспортной процедуры/функции модуля объекта;
  4. Обратное преобразование прикладного объекта в реквизит формы.

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

Процедура модуля объекта документа для применения скидки:

Внимание!

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

На форме документа расположим кнопку, вызывающую серверную процедуру:

Остались вопросы?
Спросите в комментариях к статье.

Примеры по программированию в 1с 7.7, 8.1, 8.2

вторник, 10 февраля 2015 г.

Полезные типовые функции и процедуры УПП

Функции/Процедуры из модуля "ОбщегоНазначения.":

Получить Фамилию и инициалы физлица:
ОбщегоНазначения.ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ", НаДату = Неопределено)

Получает имя значения перечисления как объекта метаданных:
ОбщегоНазначения.ИмяЗначенияПеречисления(Значение)
Возвращаемое значение: Строка — имя значения перечисления как объекта метаданных

Печать табличного документа:
УниверсальныеМеханизмы.НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", Ссылка = Неопределено, ПараметрыПечДокумента = Неопределено);

Проверяет дату на заполненность по аналогии с системной функцией "ПустаяСтрока".
ОбщегоНазначения.Функция ПустаяДата(ПроверяемаяДата)
Если ТипЗнч(ПроверяемаяДата) = Тип("Дата")
И ПроверяемаяДата = Дата(1,1,1) Тогда

Читайте также:  Как открыть файл opus на андроид

Функция возвращает массив вышестоящих групп указанного элемента (Ограничение — только 5 родителей!)
ОбщегоНазначения.Функция ПолучитьСписокВышеСтоящихГрупп(ЭлементСправочника)

Позволяет определить есть ли среди реквизитов табличной части документа:
ОбщегоНазначения.Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти)

Функция проверяет наличие в строке только цифр
ОбщегоНазначения.Функция ЕстьНеЦифры(Знач СтрокаПроверки)

Получить организацию по умолчанию:
ОргПоУмолчанию = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация")

Период строкой:
БухгалтерскиеОтчеты.Функция ПолучитьПериодДатСтрокой(Знач Период, Знач ДатаПериода) Экспорт

ПериодСтр = Период;
Если ПериодСтр = "ДЕНЬ" тогда
ДатаНачала = НачалоДня(ДатаПериода);
ДатаОкончания = КонецДня(ДатаПериода);
ИначеЕсли ПериодСтр = "НЕДЕЛЯ" тогда
ДатаНачала = НачалоНедели(ДатаПериода);
ДатаОкончания = КонецНедели (ДатаПериода);
ИначеЕсли ПериодСтр = "МЕСЯЦ" тогда
ДатаНачала = НачалоМесяца(ДатаПериода);
ДатаОкончания = КонецМесяца (ДатаПериода);
ИначеЕсли ПериодСтр = "КВАРТАЛ" тогда
ДатаНачала = НачалоКвартала(ДатаПериода);
ДатаОкончания = КонецКвартала (ДатаПериода);
ИначеЕсли ПериодСтр = "ГОД" тогда
ДатаНачала = НачалоГода(ДатаПериода);
ДатаОкончания = КонецГода (ДатаПериода);
КонецЕсли;

Возврат ПредставлениеПериода(ДатаНачала, ДатаОкончания, "ФП=Истина")

БухгалтерскиеОтчеты.Функция ПроверитьКорректностьОграниченийПоДатам(Знач ДатаНач, Знач ДатаКон, Знач ВыдаватьПредупреждение = Истина) Экспорт

// Проверка на пустые значения
Если ДатаНач > ДатаКон И ДатаКон <> ‘00010101000000’ Тогда

Если ВыдаватьПредупреждение Тогда
Предупреждение("Дата начала периода не может быть больше даты конца периода");
КонецЕсли;

ИсхПараметры = Новый Структура("Номенклатура, Количество, ХарактеристикаНоменклатуры",Выборка.Продукция,Выборка.Количество);
РезультатРазулования = Новый Структура;
РезультатРазулования.Вставить("ИсходныеКомплектующие");
РазузлованиеНоменклатуры.РазузловатьНоменклатуру(ИсхПараметры, РезультатРазулования);
Если РезультатРазулования <> Неопределено Тогда
Для каждого СтрокаРазузлования из РезультатРазулования.ИсходныеКомплектующие Цикл
Если не СтрокаРазузлования.Спецификация.пустая() Тогда Продолжить;КонецЕсли;
Нов = Тз.Добавить();
Нов.Материал = СтрокаРазузлования.Номенклатура;
Нов.МатериалИмя = СтрокаРазузлования.Номенклатура.Наименование;
Нов.Еи = СтрокаРазузлования.ЕдиницаИзмерения;
Нов.Количество = СтрокаРазузлования.Количество;
КонецЦикла;
КонецЕсли;

Лабораторная работа №7

“Программирование с использованием подпрограмм (процедур и функций)”

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

Теоретическая часть

1.1. Описание подпрограмм в языке программирования Pascal.

В Pascal различают два вида подпрограмм:

Описание подпрограммвыполняется в последнем пятом пункте раздела объявлений всей программы после раздела описания переменных var.

Подпрограммы-процедуры.

Описание процедуры состоит из следующих частей:

procedure nameproc (S);

Читайте также:  Почему кварцевые часы останавливаются и снова идут

– procedure – служебное слово;

– nameproc – имя процедуры;

– S – список формальных параметров с указанием их типов.

2) Тело процедуры.

Аналогично программам состоит из двух частей:

– раздел объявлений (label, const,…), в котором объявляются локальные переменные, то есть те переменные, которые будут встречаться только внутри процедуры;

– операторная или выполняемая часть:

Обращение к подпрограмме процедуре (вызов процедуры).

Обращение выполняется в основной программе.

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

Например, если процедура описана следующим образом:

Procedure Poisk( i,j:byte; var a:real)

То ее вызов может выглядеть следующим образом:

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

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

Подпрограммы-функции.

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

Описание функции аналогично описанию процедуры:

function namefun (s:тип):тип;

где function – служебное слово;

namefun – имя функции;

s:тип – список формальных параметров с указанием типов;

Читайте также:  Средняя скорость через интеграл

тип – указание типа результата.

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

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

Например, если функция описана:

Procedure Max( i,j:byte; a:real):real;

То ее вызов может выглядеть следующим образом:

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Как то на паре, один преподаватель сказал, когда лекция заканчивалась — это был конец пары: "Что-то тут концом пахнет". 8866 — | 8380 — или читать все.

Ссылка на основную публикацию
Нет общего доступа к флешке что делать
Если при подключении любой флешки или внешнего жесткого диска по USB и попытке открыть его содержимое (в статье рассматривается именно...
Не подключается мобильный интернет феникс
В связи с запуском в эксплуатацию сети LTE Band 20 и по поручению врио Главы Донецкой Народной Республики Дениса Пушилина...
Не работает клава в сталкере чистое небо
Stalker — это одна из лучших игр в своём жанре, которую любят и дети, и взрослые люди. После выхода каждой...
Номера мобильных операторов в крыму
Используемые телефонные номера Диапазоны телефонных номеров используемых в регионе Республика Крым для мобильной связи: Вы так же можете: Участники рынка...
Adblock detector