|
14.07.2015, 15:33 | #1 |
Участник
|
Методы контролов в диалоге
При определении в диалоге метода
X++: public void dialogPostRun(DialogRunbase dialog) { ; Super(dialog); dialog.formRun().controlMethodOverload(true); dialog.formRun().controlMethodOverloadObject(this); } |
|
14.07.2015, 15:40 | #2 |
Участник
|
А если добавить dialogForm(), т.е. вот так
X++: public void dialogPostRun(DialogRunbase _dialog) { super(_dialog); _dialog.dialogForm().formRun().controlMethodOverload(true); _dialog.dialogForm().formRun().controlMethodOverloadObject(this); } |
|
14.07.2015, 15:43 | #3 |
Участник
|
Тоже самое ((
|
|
14.07.2015, 15:51 | #4 |
Участник
|
А метод dialog перекрыт? Там переменная dialog инициализируется?
|
|
14.07.2015, 16:15 | #5 |
Участник
|
Цитата:
Вообще, чтобы вешать свои обработчики на поля диалога, выполняемого на клиенте, нужен клиентский же объект, которого в вашем случае нет. Учите CustPrepaymentFactureCreate_RU переключаться между клиентом и сервером. |
|
|
За это сообщение автора поблагодарили: alex55 (1), syl (1). |
14.07.2015, 15:53 | #6 |
Участник
|
X++: protected Object dialog(DialogRunbase dialog, boolean forceOnClient) { CustTrans custTrans; CustTable CustTable; SetEnumerator setEnumerator = custTransSet.getEnumerator(); container con; ; if (setEnumerator.moveNext()) { con = setEnumerator.current(); custTrans = CustTrans::find(conpeek(con, 2)); RegInERNN = FactureJour_RU::Calc_RegInERNN(CustTrans.AccountNum, CustTrans.CurrencyCode, CustTrans.TransDate, abs(CustTrans.AmountCur)); CustTable = CustTable::find(custTrans.AccountNum, False); ZEU_INN_RU_Cust_Vend = CustTable.INN_RU; } dialog = super(dialog, forceOnClient); dlgFactureExtId = dialog.addFieldValue(typeid(FactureExternalId_RU), factureexternalId); dlgNNGroup = dialog.addFieldValue(typeid(NumberSequenceGroupId), NNGroup); dlgFactureDate = dialog.addFieldValue(typeid(FactureDate_RU), factureDate); dlgFactuDocId = dialog.addFieldValue(typeid(ZEU_FactuDocId), factureDocId); dlgFactureRasonId = dialog.addFieldValue(typeid(ZEU_FactureRasonId), factureReasonId); dlgCorrectionReason = dialog.addFieldValue(typeid(ZEU_CorrectionReason), correctionReason); dlgResponsible = dialog.addFieldValue(typeid(EmplId), ResponsibleId); dlgINN_RU = dialog.addFieldValue(typeid(INN_RU), ZEU_INN_RU_Cust_Vend); dlgRegInERNN = dialog.addFieldValue(typeid(ZEU_RegInERNN),RegInERNN); dlgRegInERNN.allowEdit(false); return dialog; } |
|
14.07.2015, 16:10 | #7 |
Участник
|
Добавил в CustPrepaymentFactureCreate_RU метод dialogPostRun, все работает.
Перекомпилируйте класс инкрементно. Если не может верните dialog на стандратный X++: protected Object dialog(DialogRunbase dialog, boolean forceOnClient) { ; dialog = super(dialog, forceOnClient); dlgFactureDate = dialog.addFieldValue(typeid(FactureDate_RU), factureDate); return dialog; } |
|
14.07.2015, 16:18 | #8 |
Участник
|
Спасибо, переключил в CalledFrom - заработало!!!
|
|
14.07.2015, 16:20 | #9 |
Участник
|
Да, собственно, вот так будет работать:
X++: Super(dialog); dialog.dialogOnClient_RU().formRun().controlMethodOverload(true); dialog.dialogOnClient_RU().formRun().controlMethodOverloadObject(this); |
|
14.10.2015, 22:22 | #10 |
Участник
|
Вернемся к нашим бар... диалогам)))
Допустим, у меня класс отрабатывает сложный запрос с формированием временной таблицы на сервере. Но параметры-то я ввожу на клиенте. Даже применяя метод dialogOnServer() мне не удалось добиться желаемого... Как мне реализовать данный метод, чтобы не было ошибки с пустым formRun? X++: public void dialogPostRun(Dialog _dialog) { FormRun fr; ; super(_dialog); fr = _dialog.dialogOnServer().dialogForm().formRun(); fr.controlMethodOverload(true); fr.controlMethodOverloadObject(this); }
__________________
// no comments |
|
15.10.2015, 00:34 | #11 |
Участник
|
Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU() вместо dialogOnServer()
|
|
15.10.2015, 09:00 | #12 |
Участник
|
К сожалению, у нас нет русской версии АХ4, только инглиш
__________________
// no comments |
|
|
|