Приветствую Вас ГостьВоскресенье, 05.05.2024, 04:53

Каталог статей


Дополнительные обработки заполнения.

При выполнении обработки заполнения надо чтобы изменения были отображены на форме. В связи с этим обработка на сервере не подходит, так как при этом обновление формы не доступно.

Для обновления данных формы надо в сведениях дополнительной обработки параметр "Использование" заполнять значением ВызовКлиентскогоМетода или ОткрытиеФормы.

В обоих случая надо создать основную форму дополнительной обработки.

При использовании ВызовКлиентскогоМетода  в модуле формы надо поместить экспортный метод 

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
КонецПроцедуры  

В этом методе можно получить данные объекта заполнения одним из способов:

  1. Из массива ОбъектыНазначенияМассив
  2. Из реквизита Объект Владельца формы объектЗаполнения = ВладелецФормы.Объект.Ссылка;

В этом методе можно вызвать форму для заполнения дополнительных параметров или открыть другие формы, необходимы для гибкого заполнения. 

При использовании ОткрытиеФормы, на форме располагаем необходимые команды, и продолжаем обработку заполнения уже ими.

Форма открывается с набором параметров:

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

На форме можно расположить реквизиты и команды и настроит их видимость в с значением Параметры.ИдентификаторКоманды

Чтобы обновить данные формы можно использовать 2 метода:

1. Получить объект на сервере, заполнить его и после возвращения в клиентский метод вызывать 

ВладелецФормы.Прочитать();

2. Заполнять данные непосредственно на форме объекта, для которого вызвали обработку заполнения. Для этого к форме надо обращаться через реквизит ВладелецФормы

Пример добавления строки в табличную часть:

        ФормаДокумента = ВладелецФормы; 
        НовСтрока = ФормаДокумента.Объект.ТабличнаяЧасть.Добавить();

Получить значения заполненных параметров

Если для заполнения значений параметров вызывается другая форма, то введенные значения параметров отбора можно вернуть в основную форму или клиентский метод при закрытии формы параметров. Прощу всего значения помещать в структуру, которую получим в описании оповещения при закрытии.

Например:

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

&НаКлиенте
Процедура ЗаполнениеПоВыбраннымПараметрам(Результат, Параметры) Экспорт
    
    Если Результат <> Неопределено Тогда
     // выполнение действий       
    КонецЕсли;
    
КонецПроцедуры

В приведенном примере форма ввода параметров универсальная и набор реквизитов отображается в соответствии с входным параметром СписокПараметровОтбора.

Модуль формы параметров:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("СписокПараметровОтбора") Тогда             
        
        МассивИменПараметров = СтрРазделить(Параметры.СписокПараметровОтбора,", ",Ложь);        
        СписокПараметровОтбора.ЗагрузитьЗначения(МассивИменПараметров);
        УстановитьВидимостьПараметров(МассивИменПараметров);
        
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьПараметров(МассивИменПараметров)          
    
    Для Каждого Элемент Из Элементы Цикл
        Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
            Элемент.Видимость = (МассивИменПараметров.Найти(Элемент.ПутьКДанным)<> Неопределено);                
        КонецЕсли;
    КонецЦикла;

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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

&НаКлиенте
Процедура ЗакрытьФорму(Команда) 
    
    РезультатЗакрытия = Новый Структура();
    Для Каждого ПараметрОтбора Из СписокПараметровОтбора Цикл        
        РезультатЗакрытия.Вставить(ПараметрОтбора.Значение, ЭтотОбъект[ПараметрОтбора.Значение]);
    КонецЦикла;
    ЭтотОбъект.Закрыть(РезультатЗакрытия); 
    
КонецПроцедуры
 

 

 

 

 

 

Категория: Программирование | Добавил: leshic (08.04.2024)
Просмотров: 22 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [40]
Администрирование [34]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0