| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Методы контролов в диалоге
			 
			
			При определении в диалоге метода 
		
		
		
		
		
		
		
	X++: public void dialogPostRun(DialogRunbase dialog) { ; Super(dialog); dialog.formRun().controlMethodOverload(true); dialog.formRun().controlMethodOverloadObject(this); }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если добавить dialogForm(), т.е. вот так 
		
		
		
		
		
		
		
	X++: public void dialogPostRun(DialogRunbase _dialog) { super(_dialog); _dialog.dialogForm().formRun().controlMethodOverload(true); _dialog.dialogForm().formRun().controlMethodOverloadObject(this); }  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Тоже самое ((  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А метод dialog перекрыт? Там переменная dialog инициализируется?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 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; }  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Добавил в 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; }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Судя по стеку вызовов, у вас RunBase не переключается на клиента при работе диалога. Если посмотреть на свойства CustPrepaymentFactureCreate_RU (наследника RunBase в данном примере), то там прописано RunOn == Server, так что переключаться на клиента он не умеет. А вот DialogRunbase переключаться на клиента умеет - и делает это, в итоге при работе диалога есть два экземпляра DialogRunbase: один клиентский, который рулит формой диалога и содержит непустую ссылку на FormRun, а другой - серверный, у которого такой ссылки нет. Вы на серверном экземпляре вызываете dialog.formRun() и получаете закономерную ошибку "объект не инициализирован".Вообще, чтобы вешать свои обработчики на поля диалога, выполняемого на клиенте, нужен клиентский же объект, которого в вашем случае нет. Учите CustPrepaymentFactureCreate_RU переключаться между клиентом и сервером.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: alex55 (1), syl (1). | |
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, переключил в CalledFrom - заработало!!!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, собственно, вот так будет работать: 
		
		
		
		
		
		
		
	X++: Super(dialog); dialog.dialogOnClient_RU().formRun().controlMethodOverload(true); dialog.dialogOnClient_RU().formRun().controlMethodOverloadObject(this);  | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ссылку на FormRun содержит клиентский экземпляр Dialog, поэтому попробуйте использовать dialogOnClient_RU()  вместо  dialogOnServer()  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		
				__________________ 
		
		
		
		
	// no comments  | 
| 
	
 | 
| 
	
	 | 
	
		
  |