Как из модуля объекта обратиться к форме 1с
Перейти к содержимому

Как из модуля объекта обратиться к форме 1с

1С 8.3 Вызов процедур или функций из модуля объекта в модуле формы — Программист 1С Минск. Автоматизация бизнеса.

1С 8.3 Вызов процедур или функций из модуля объекта в модуле формы

&НаСервере
Процедура Вызов_из_модуля_объекта ()

// сперва получаем объект:
ДокОбъект = РеквизитФормыВЗначение ( «Объект» );
ДокОбъект . ПроцедураМодуляОбъектаЭкспортная ();
//.

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

Как вызвать процедуру или функцию из модуля объекта на управляемой форме

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

Содержание самой процедуры пересчета рассматривать в рамках данной статьи не будем.

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

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

&НаКлиенте
Процедура ПересчитатьНДС ( Команда )
ПересчитатьНДСНаСервере ( ) ;
КонецПроцедуры &НаСервере
Процедура ПересчитатьНДСНаСервере
//Получаем объект документа из реквизита формы
ДокОбъект = РеквизитФормыВЗначение ( "Объект" , Тип ( "ДокументОбъект.РеализацияТовара" ) ) ;

//Вызываем экспортную процедуру ПересчетНДС из модуля объекта
ДокОбъект . ПересчетНДС ( ) ;

//Возвращаем объект документа в реквизит формы
ЗначениеВРеквизитФормы ( ДокОбъект , "Объект" ) ;

Теперь немного об использованных функциях:

  • РеквизитФормыВЗначение(<ИмяРеквизита>, <ТипОбъекта>) — преобразует указанный реквизит управляемой формы в объект прикладного типа. Первый параметр — имя реквизита управляемой формы (в кавычках, т.к. это строка), второй параметр — тип прикладного объекта (переменная со типом Тип).
  • ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>) — выполняет обратную процедуру — преобразует прикладной объект в указанный реквизит управляемой формы. Первый параметр — переменная, содержащая прикладной тип, второй параметр — имя реквизита управляемой формы, в который нужно преобразовать объект.

Добавить комментарий Отменить ответ

Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.

Как из управляемой формы вызвать процедуру модуля объекта

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

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

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

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

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

Процедура ПрименитьСкидку ( ПроцентСкидки ) Экспорт
Для каждого СтрокаТЧ Из Товары Цикл
СтрокаТЧ . Цена = СтрокаТЧ . Цена — СтрокаТЧ . Цена / 100 * ПроцентСкидки ;
КонецЦикла;
КонецПроцедуры

Внимание!

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

На форме документа расположим кнопку, вызывающую серверную процедуру:
&НаКлиенте
Процедура ПересчитатьЦены ( Команда )

// Этап 1. Вызов серверной процедуры
ПересчитатьЦеныНаСервре ();

&НаСервере
Процедура ПересчитатьЦеныНаСервре ()

// Этап 2. Преобразование основного реквизита формы в прикладной объект
ДокументОбъект = РеквизитФормыВЗначение ( «Объект» );
// Этап 3. Вызов процедуры модуля объекта
ДокументОбъект . ПрименитьСкидку ( 5 );
// Этап 4. Обратное преобразование прикладного объекта в реквизит формы
ЗначениеВРеквизитФормы(ДокументОбъект , «Объект» );

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *