1С как вызвать функцию из модуля объекта

snfr1c
12.11.2010 14:51
Прочитано: 22284
Здравствуйте!
Подскажите, как выполнить процедуру или функцию из формы документа, вызвав её из модуля этого же документа?
Процедура в форме, например ПриИзмененииКонтрагента() Экспорт
при попытке выполнения ЭтотОбъект.ПриИзмененииКонтрагента() выдаётся ошибка "Метод не обнаружен"
Yandex
Возможно, вас также заинтересует
snfr1c
12.11.2010 15:18
Ответ № 1
Поясню. Обратится можно
Согласно 1С: "Можно ли обращаться к переменным, процедурам и функциям модуля снаружи объекта?

В 1С:Предприятии 8 любая переменная, процедура и функция модуля объекта (документа, справочника, обработки, формы и т.д.) может быть объявлена как экспортируемая. Для этого достаточно в ее объявлении указать слово Экспорт.

Например:
Код 1C v 8.х
После этого к таким переменным, процедурам и функциям можно обращаться так же, как и к системным свойствам и методам объектов.

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

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

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

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

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

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

Внимание!

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

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

Читайте также:  Как открыть консоль в doom 3

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

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

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

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

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

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

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

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

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

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

Adblock
detector