1С переопределяемый модуль

Статья решает задачи:

  • Как передать параметр в открываемую программно форму;
  • Как вернуть параметр из открываемой программно формы;

Исходные данные:

  • Имеется общая форма — «НашаФорма», с реквизитами:
    • «МножительА» — заполняется при открытии формы, по значению переданного параметра;
    • «МножительБ» — заполняется вручную;
  • Необходимо:
    • программно открыть форму «НашаФорма».
    • передать в форму параметр, по значению которого заполнить реквизит «МножительА»;
    • вручную заполнить реквизит формы «МножительБ»;
    • умножить «МножительА» на «МножительБ» и результат вернуть в исходную процедуру;

1. Пишем процедуру по открытию «НашаФорма» и передаче в нее параметра «МножительА»

&НаСервере Процедура ОткрытьФормуИВернутьВведенныеДанные() МножительА = 100; //в открываемую форму передадим параметр, через структуру ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить(«МножительА», МножительА); //получим форму МодальнаяФорма = ПолучитьФорму(«ОбщаяФорма.НашаФорма», ПараметрыФормы, ЭтаФорма); //откроем форму Результат = МодальнаяФорма.ОткрытьМодально(); //при закрытии формы «Наша форма» нам вернется результат умножения РезультатУмножения = Результат; КонецПроцедуры

2. Пишем процедуру, которая при открытии «Наша форма» (в обработчике ПриСозданииНаСервере) будет заполнять реквизит «МножительА» по полученному значению

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МножительА = Параметры.МножительА; КонецПроцедуры

3. Пишем процедуру по вычислению результата умножения и возврату значения

&НаКлиенте Процедура ЗакрытьФорму(Команда) //МножительА — полученный параметр //МножительБ — заполненный вручную параметр РезультатУмножения = МножительА * МножительБ; //Вернем результат умножения в исходную процедуру Закрыть(РезультатУмножения); КонецПроцедуры

Один из методов упрощения работы пользователя — это заполнение реквизитов нового объекта (элемент справочник, документ) значениями по умолчанию. Реализовать заполнение реквизитов можно двумя способами:

  1. в обработчике события формы элемента — ПриСозданииНаСервере;
  2. в обработчике события объекта — ОбработкаЗаполнения.

Первый способ не рекомендуется использовать, но все-равно его рассмотрим. Создадим в модуле формы обработчик события ПриСозданииНаСервере. В обработчике проверим факт создания нового объекта, если объект новый, то произведем заполнение реквизитов.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Если ссылка у объекта пустая, значит он еще не записан,
// а следовательно он является новым объектом.
ЭтоНовыйОбъект = Объект.Ссылка.Пустая();
// Если объект новый, то выполняем заполнение реквизитов.
Если ЭтоНовыйОбъект Тогда
Объект.Ответственный = Пользователи.ТекущийПользователь();
Объект.Комментарий = «Документ создан » + Формат(ТекущаяДата(), «ДФ=dd.MM.yyyy»);
КонецЕсли;
КонецПроцедуры
Второй способ намного проще, т.к. он предусмотрен платформой и рекомендован к использованию. Создадим в модуле объекта обработчик события ОбработкаЗаполнения и напишем программный код по заполнению реквизитов объекта без каких-либо проверок, потому что данное событие возникает при интерактивном вводе нового объекта. Более подробное описание обработчика события см. в синтакс-помощнике.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ЭтотОбъект.Ответственный = Пользователи.ТекущийПользователь();
ЭтотОбъект.Комментарий = «Документ создан » + Формат(ТекущаяДата(), «ДФ=dd.MM.yyyy»);
КонецПроцедуры
Пару слов из личного опыта: не стоит вешать тяжелые операции по инициализации реквизитов на события, которые вызываются при открытии объекта, так как они будут существенно увеличивать время открытия объекта. Предоставьте выполнение таких операций на выбор пользователю, создав команду формы.

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

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