Вход | Регистрация


ERP 2.0 Управляемые формы

ERP 2.0 Управляемые формы
Я
   burnylpc
 
02.02.18 - 12:41
ERP 2.0
Была задача: на форму стандартного документа (регистрация наработок) поместить кнопку, по нажатии которой должна каким-то образом заполнится ТЧ в форме документа.
Что сделано: вынесла в расширение общий модуль "МодификацияКонфигурацииКлиентПереопределяемый". В нем через процедуру "УА2_ВыполнитьПереопределяемуюКоманду" на форму программно добавляю кнопку с командой. По этой команде открывается форма выбора ОС. Пользователь выбирает ОС, и собственно по нему (по выбранному значению) должна заполнится ТЧ.

Вот код:
&После("ВыполнитьПереопределяемуюКоманду")
// Вызывается в формах при выборе команды, которая добавлена программно

//
// Параметры:

//  Форма                     - УправляемаяФорма - форма в которой расположена команда
//  Команда                     - КомандаФормы - выбранная команда

//  ДополнительныеПараметры     - Структура - дополнительные параметры
//

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

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

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


После выбора ОС пытаюсь оповестить форму документа 

//процедура в модуле ОбщегоНазначенияВызовСервера.

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

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

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


Все отрабатывает без ошибок, но форма документа не обновляется. ПОДСКАЖИТЕ, ЧТО Я НЕ ТАК ДЕЛАЮ?

п/с вариант с выносом самой формы документа в расширения не рассматривается
 
 
   ГдеСобакаЗарыта
 
1 - 02.02.18 - 12:45
Ну надо еще и саму форму оповестить
   burnylpc
 
2 - 02.02.18 - 12:59
т.е. нужно все таки еще саму форму изменять?
   Defender aka LINN
 
3 - 02.02.18 - 13:01
А что мешает использовать внешние обработки заполнения?
   burnylpc
 
4 - 02.02.18 - 13:03
Что за внешние обработки заполнения, подскажите, где хоть прочитать про них? Это что-то стандартное или это обработки из справочника внешних обработок?
   ГдеСобакаЗарыта
 
5 - 02.02.18 - 13:09
Наверно по закрытии формы выбора ОС надо вызвать клиентскую процедуру, которая вызовет на сервере РазузловатьОС(), а потом оповестит форму документа через Оповестить().
Но внешняя обработка заполнения все-таки лучше
   Вафель
 
6 - 02.02.18 - 13:11
(5) так вызываетя же процедура, там оповещение накинуто
   ГдеСобакаЗарыта
 
7 - 02.02.18 - 13:17
(6) Но на сервере ты форму документа не оповестишь после изменения. Поэтому и надо клиентскую процедуру, которая будет разузловку вызывать
   Вафель
 
8 - 02.02.18 - 13:19
на каком сервере? тут с клиента идет выбор.
   ГдеСобакаЗарыта
 
9 - 02.02.18 - 13:19
Да, сорри, я туплю по пятницам
   Вафель
 
10 - 02.02.18 - 13:21
нужно в процедуре РазузловатьОС обращаться к 
ФормаДокумента.Объект и его заполнять
 
 Рекламное место пустует
   ГдеСобакаЗарыта
 
11 - 02.02.18 - 13:24
Хотя почему туплю? Форма выбора ОС закрылась и по оповещению вызвала процедуру на сервере РАзузловать(). На сервере объект изменили и теперь надо его форму обновить. Ведь так? А как ты оповестишь с сервера открытую форму документа?
   burnylpc
 
12 - 02.02.18 - 13:25
Собственно, если конкретизировать сам вопрос, то получится: а как правильно заполнять форму через процедуры в общем модуле?
....
раскопала в станд.конфигурации процедуры (такие часто встречаются), которые находятся в общих модулях.
Вот пример:
Общий модуль БухгалтерскиеОтчетыВызовСервера, галки сервер, вызов сервера
// Вызывается из обработчика события "ПриСохраненииПользовательскихНастроекНаСервере" формы отчета.

//
// Параметры:

//    ФормаОтчета - УправляемаяФорма - Форма отчета.
//    Настройки - ПользовательскиеНастройкиКомпоновкиДанных - Сохраняемые настройки.

//    СохранятьТолькоРеквизиты - Булево - Признак сохранения только значений реквизитов отчета без настроек СКД.
//

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

Пробовала так же, но когда я передавала форму, то ругался, что форму на сервер передавать нельзя

Пример с данными
общ.м. ДоставкаТоваров, сервер

// Возвращает таблицу значений с колонками, скопированными из переданной коллекции.

//
// Параметры:

//  Коллекция     - ДанныеФормыДерево, ДанныеФормыКоллекция, ТаблицаЗначений     - источник данных, колонки которого
//      необходимо копировать.

//  ИменаКолонок - Строка                                                     - имена копируемых колонок, перечисленные через запятую.
// 

// Возвращаемое значение:
//  ТаблицаЗначений - скопированная таблица.

//
Функция СкопироватьКолонкиКоллекции(Коллекция, ИменаКолонок) Экспорт
    ............................
    Возврат ДанныеФормыВЗначение(Коллекция, Тип("ТаблицаЗначений"));
    ............................
КонецФункции

Все это из станд.конфигурации..
Как я понимаю, как то это должно работать.
Но я пробовала делать свой модуль в расширении, так же вызывать, ругался

У меня уже глаза замылились)) помогите, кто чем может)) я по любому что-то не так делаю, не понимаю что
   Вафель
 
13 - 02.02.18 - 13:29
Получить из другой формы серверный контекст формы документ нельзя
   burnylpc
 
14 - 02.02.18 - 13:32
(5) делала так, тоже не получается
   burnylpc
 
15 - 02.02.18 - 13:34
Т.е. предлагаете все таки сделать внешнюю обработку? как мне тогда кнопку на форму вывести, подскажите пожалуйста
   ГдеСобакаЗарыта
 
16 - 02.02.18 - 13:40
(15) А так попробуй
ОписаниеОповещения = Новый ОписаниеОповещения("РазузловатьОСнаКлиенте", ОбщегоНазначенияКлиент, Форма);     
        ФормаВыбора.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения; 


Процедура РазузловатьОСнаКлиенте(ОбъектЭксплуатации, Форма) Экспорт         
       ОбщегоНазначенияВызовСервера.РазузловатьОС(ОбъектЭксплуатации, Форма.Объект)
Форма.Прочитать();    

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


Но вообще да, внешняя обработка
   ГдеСобакаЗарыта
 
17 - 02.02.18 - 13:42
(15) Через внешнюю обработку на форме стандартная команда появится "Заполнить".
   Defender aka LINN
 
18 - 02.02.18 - 14:12
(4) В демо БСП есть примеры
   burnylpc
 
19 - 02.02.18 - 14:44
Ура получилось!
Все такие через клиентскую процедуру
....
В итоге

В модуле МодификацияКонфигурацииКлиентПереопределяемый (клиент)

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

        ФормаВыбора.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения;                
        
        ФормаВыбора.Открыть();                                       
                
    КонецЕсли;

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


Процедура РазузловатьОС(ОбъектЭксплуатации, Форма) Экспорт                           
    
    МассивУзлов = ОбщегоНазначенияВызовСервера.РазузловатьОС(ОбъектЭксплуатации);     // серверный модуль. ОбщегоНазначенияВызовСервера. возвращает массив запросом

    
    Для каждого Узел из МассивУзлов Цикл
        
        НоваяСтрока = Форма.Объект.Наработки.Добавить();
        НоваяСтрока.ОбъектЭксплуатации = ОбъектЭксплуатации;
        НоваяСтрока.ОбъектФормы = ОбъектЭксплуатации;
        НоваяСтрока.УзелФормы = Узел;
        
    КонецЦикла;
    
КонецПроцедуры

без вскяких обновить(), прочитать() и обработок))) 
Спасибо, что помогли разобраться!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует