|  03.12.2013, 20:20 | #1 | 
| Участник | Динамически создаваемые LookUp-ы и создание на них динамической обработки 
			
			Как на динамически создаваемый LookUp например dlgFactureExtIdNumSeq = dialog.addFieldValue(typeid(NumberSequenceGroupId), factureexternalId); повесить метод обработки, чтобы передать данные для фильтра в другое поле, созданное так : dlgFactureExtId = dialog.addFieldValue(typeid(FactureExternalId_RU), factureexternalId); ? | 
|  | 
|  03.12.2013, 22:13 | #2 | 
| Молодой, подающий надежды | 
			
			Для 2009 старше RU5 можно перекрыть метод lookup по аналогии с примером в теме Расширенные возможности отслеживания событий на диалогах классов-наследников RunBase В 2012 можно использовать метод контрола registerOverrideMethod() X++: dlgFactureExtId.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(MyClass, dlgFactureExtId_lookup), this); | 
|  | |
| За это сообщение автора поблагодарили: Dzha (1). | |
|  04.12.2013, 19:52 | #3 | 
| Участник | 
			
			Создаю динамическую форму : protected Object dialog(DialogRunbase dialog, boolean forceOnClient) ..... dlgFactuDocId = dialog.addFieldValue(typeid(ZEU_FactuDocId), factureDocId); //Fld2_1 ..... dlgFactureExtIdNumSeq = dialog.addFieldValue(typeid(NumberSequenceGroupId), factureexternalId); //Fld5_1 dlgZEU_SourceFacture = dialog.addFieldValue(typeid(FactureExternalId_RU), ZEU_SourceFacture); dlgZEU_CorrectionReason = dialog.addFieldValue(typeid(ZEU_CorrectionReason), ZEU_CorrectionReason); dlgZEU_SourceFacture.visible(false); dlgZEU_CorrectionReason.visible(false); dialog.allowControlMethodOverload_RU(true); ..... Создаю обработку на выбор LookUp : protected boolean Fld2_1_modified() { boolean ret=True; ; if (!(ZEU_FactureDoc::find(dlgFactuDocId.value()).DocType == ZEU_DocType::RK)) { dlgZEU_SourceFacture.visible(true); dlgZEU_CorrectionReason.visible(true); } else { dlgZEU_SourceFacture.visible(false); dlgZEU_CorrectionReason.visible(false); } // for Repaint dialog dialog2.dialogOnClient_RU().updateServer(); dialog2.updateClient(dialog2.dialogOnClient_RU()); return ret; } Суть в том, что при выборе LookUp Fld2_1 надо проверять выбранное значение и соответственно делать видимыми/невидимыми два поля ввода. Проблемы : 1. dlgFactuDocId.value() - пустое 2. Если включен блок // for Repaint dialog, то визуально эти два поля появляются на форме, но при этом текст Fld2_1 становится пустым 3. Если не включен блок // for Repaint dialog, то визуально эти два поля НЕ появляются на форме, и при этом текст Fld2_1 не пустой (хотя dlgFactuDocId.value() все равно пустой) Что я не так делаю ? | 
|  | 
|  05.12.2013, 09:04 | #4 | 
| Участник | 
			
			Чтобы решить первую проблему, попробуйте дописать свой код как показано ниже. Вторая проблема возможно исчезнет сама. X++: protected boolean Fld2_1_modified() { Object control = dialog.formRun().controlCallingMethod(); boolean ret = control.modified(); boolean vsblity; ; if (ret) { vsblity = ZEU_FactureDoc::find(dlgFactuDocId.value()).DocType != ZEU_DocType::RK; dlgZEU_SourceFacture.visible(vsblity); dlgZEU_CorrectionReason.visible(vsblity); // for Repaint dialog dialog2.dialogOnClient_RU().updateServer(); dialog2.updateClient(dialog2.dialogOnClient_RU()); } return ret; } 
				__________________ // no comments | 
|  | 
|  05.12.2013, 11:47 | #5 | 
| Участник | 
			
			Во время выполнения строка : Object control = dialog2.formRun().controlCallingMethod(); ругается на "объект controlCallingMethod() не инициализирован" | 
|  | 
|  05.12.2013, 12:01 | #6 | 
| Программатор | 
			
			dialog2?
		 | 
|  | 
|  05.12.2013, 12:13 | #7 | 
| Участник | 
			
			Дело в том, что в форме которую я рехтую в ClassDeclaretion    объявлено  DialogRunbase           dialog2;  И в методе    protected Object dialog(DialogRunbase dialog, boolean forceOnClient) есть присваивание dialog2=dialog; К объекту dialog вне этого метода доступа нет. | 
|  | 
|  05.12.2013, 12:30 | #8 | 
| Программатор | 
			
			что то вы не так делаете с кучей диалогов объявите глобальной переменной один диалог и работайте с ним а потом public Object dialog() { ; dialog = super(); ******************* return dialog; } Последний раз редактировалось Sada; 05.12.2013 в 12:32. | 
|  | 
|  05.12.2013, 12:36 | #9 | 
| Участник | 
			
			Попробую. Проблема в том что этот dialog был кем-то написан до меня и почему так не стандартно я не знаю. И для чего надо forceOnClient ?
		 | 
|  | 
|  05.12.2013, 12:52 | #10 | 
| Участник | 
			
			Поменял //class CustPrepaymentFactureCreate_RU extends RunBase на public class CustPrepaymentFactureCreate_RU extends RunBaseBatch Оставил только один dialog. Его метод поменял на public Object dialog() { ; dialog = super(); ******************* return dialog; } Во время выполнения строка все равно ругается: Object control = dialog.formRun().controlCallingMethod(); ругается на "объект controlCallingMethod() не инициализирован" | 
|  | 
| Теги | 
| lookup filter, lookupvalue | 
|  | 
| 
 |