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

Рассмотрим эту задачу на следующем примере:

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

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

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

  1. Сделать вызываемую процедуру экспортируемой (то есть доступной не только из самого модуля объекта, но и из других модулей)
    Процедура ПересчетНДС () Экспорт
    //Содержание процедуры
    КонецПроцедуры
  2. Получить объект документа. Обычно, на управляемых формах документов есть основной реквизит Объект.
    Как вызвать процедуру или функцию из модуля объекта на управляемой форме
    Однако, на клиенте, на управляемых формах не существует прикладных объектов. Они есть только на сервере. Поэтому нужно преобразовать реквизит формы Объект в переменную с типом ДокументОбъект, и при этом сделать все это на сервере.
    Итак, создаем команду, назначаем ей процедуру на клиенте, из которой вызываем контекстную серверную процедуру

    &НаКлиенте
    Процедура ПересчитатьНДС(Команда)
    ПересчитатьНДСНаСервере();
    КонецПроцедуры

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

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

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

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

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

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

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

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

четырнадцать + 2 =