Довольно часть встречается ситуация, когда из формы какого-то прикладного объекта необходимо вызвать экспортную процедуру или функцию, расположенную в модуле этого объекта.
Напрямую обратиться к процедурам модуля объекта из формы не получится. Связано это с тем, что прикладных объектов на клиенте нет, они существуют только на сервере. На клиенте доступны только специальные типы для отображения данных.
Общая схема вызова серверной процедуры/функции состоит из нескольких этапов:
- Вызов контекстной серверной процедуры формы;
- Преобразование основного реквизита формы в прикладной объект;
- Вызов экспортной процедуры/функции модуля объекта;
- Обратное преобразование прикладного объекта в реквизит формы.
Рассмотрим описанные действия на примере. Предположим, что у документа есть табличная часть с товарами и ценами. Необходимо из формы документа вызвать процедуру модуля объекта, которая применяет для всех строк табличной части скидку в процентах.
Процедура модуля объекта документа для применения скидки:
Внимание!
Процедуры/функции модуля объекта, которые предназначены для вызова извне модуля должны быть экспортными, т.е. иметь ключевое слово Экспорт .
На форме документа расположим кнопку, вызывающую серверную процедуру:
Остались вопросы?
Спросите в комментариях к статье.
Примеры по программированию в 1с 7.7, 8.1, 8.2
вторник, 10 февраля 2015 г.
Полезные типовые функции и процедуры УПП
Функции/Процедуры из модуля "ОбщегоНазначения.":
Получить Фамилию и инициалы физлица:
ОбщегоНазначения.ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ", НаДату = Неопределено)
Получает имя значения перечисления как объекта метаданных:
ОбщегоНазначения.ИмяЗначенияПеречисления(Значение)
Возвращаемое значение: Строка – имя значения перечисления как объекта метаданных
Печать табличного документа:
УниверсальныеМеханизмы.НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", Ссылка = Неопределено, ПараметрыПечДокумента = Неопределено);
Проверяет дату на заполненность по аналогии с системной функцией "ПустаяСтрока".
ОбщегоНазначения.Функция ПустаяДата(ПроверяемаяДата)
Если ТипЗнч(ПроверяемаяДата) = Тип("Дата")
И ПроверяемаяДата = Дата(1,1,1) Тогда
Функция возвращает массив вышестоящих групп указанного элемента (Ограничение – только 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 –
или читать все.