|  08.02.2008, 16:31 | #1 | 
| MCTS | Модификация DialogField 
			
			На классе наследованном от RunBase построен диалог на котором динамически создаются несколько контролов. Нужно при модификации одного из контролов делать еще какие-нибудь вещи. Вариант с    dialogObj.allowUpdateOnSelectCtrl(true); this.dialogSelectCtrl(); подходит, но работает немного коряво, то есть приходится для активации/деактивации контрола вначале перейти на него. Слышал про еще один способ, в котором используется значение dlgfJournalNameId.Name(), в результате которого получаем строку dlg1_.... Потом на классе создается метод, не уверен в названии - dlg1_Modified потом ядро само выовет этот метод при изменении контрола. Может кто слышал? | 
|  | 
|  08.02.2008, 16:47 | #2 | 
| Участник | 
			
			Посмотри вот здесь http://kashperuk.blogspot.com/2007/0...xtensions.html Там улучшения + примеры - в примерах делается требуемая тебе логика (правда там _lookup, а не _modified, но суть та же) | 
|  | |
| За это сообщение автора поблагодарили: Eldar9x (1). | |
|  08.02.2008, 16:48 | #3 | 
| Участник | Цитата: Да,всё верно,создаёте метод dlg1_Modified,где dlg1 - имя контрола, при изменении значения контрола вызовется этот метод.Так вы можете прописать любые методы стандартного контрола. | 
|  | 
|  08.02.2008, 16:55 | #4 | 
| SAP | 
			
			2 Eldar9x, Eugene Murka, kashperuk Я в таких случаях больше предпочитаю вместо динамического дилога вызывать форму. см. \Classes\Tutorial_RunbaseForm X++: public Object dialog() { dialogRunbase dialog = dialog::newFormnameRunbase(formstr(tutorial_RunbaseForm),this); ; dialog = super(dialog); dlgTransDate = dialog.addField(typeid(transDate)); dlgtransDate.value(transDate); return dialog; } Последний раз редактировалось konopello; 08.02.2008 в 16:58. Причина: Ошибки :( | 
|  | 
|  08.02.2008, 17:02 | #5 | 
| Участник | |
|  | 
|  08.02.2008, 17:32 | #6 | 
| Участник | Цитата: Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП. Хочу также напомнить,что формы используются в Аксапточке для отображения данных,сугубо для их ввода используют диалоги. И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть неприемлемо,когда всё остальное работает на сервере. Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:35. Причина: опечатка | 
|  | 
|  08.02.2008, 17:34 | #7 | 
| int 20h | 
			
			А все таки, не могли бы вы более подробно описать код для этих методов. Очень интересная штуковина.
		 
				__________________ It's just my Unhopelessnessabilityerism   Trying to debug my mind   | 
|  | 
|  08.02.2008, 17:40 | #8 | 
| SAP | Цитата: 
		
			Особенно это будет полезно,если от диалога нужно будет создать наследников! Взяли вы форму наваяли там кучу контролов и функционала,а потом нужно её чуть-чуть изменить и использовать в другом месте...копируете вместе со всем кодом,что является грубым нарушением принципов ООП. Цитата: 
		
			И самое главное,форма и все её методы будут выполнятся на клиенте,а это может быть проблемой.
		
	 | 
|  | 
|  08.02.2008, 17:41 | #9 | 
| MCTS | 
			
			Всем большое спасибо, особенно, Kashperuk   . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать... | 
|  | 
|  08.02.2008, 17:46 | #10 | 
| SAP | 
			
			класс SalesFormLetter всегда работает на сервере а диалог на клиенте. X++: salesEditLines = classFactory.formRunClass(FormLetter::newClientArgs(formStr(SalesEditLines), this));И я полностью придерживаюсь этого принципа, это конечно мое личное виденье, да помню были времена и когда то я страдал писал ужасные динамические диалоги, перекрывал у них лукапы и т.д.Но зачем усложнять когда можно все сделать проще и понятней. | 
|  | 
|  08.02.2008, 17:47 | #11 | 
| SAP | Цитата: 
		
			Всем большое спасибо, особенно, Kashperuk . Хотелось бы добавить только, что вариант с вызовом готовой формы, более трудоемок, так как эту форму сначало надо сделать...
		
	 | 
|  | 
|  08.02.2008, 17:47 | #12 | 
| Участник | Цитата: А что описывать - создаёте наследника от Runbase, методе dialog() прописываете контрол,скажем myControlTxt, создаёте новый метод,называете его myControlTxt_Modified запускаете диалог и при изменении значений в myControlTxt будет срабатывать myControlTxt_Modified, всё аналогично статической форме. | 
|  | 
|  08.02.2008, 17:52 | #13 | 
| MCTS | Цитата: 
		
			когда логика формы довольно простая.
		
	  )) | 
|  | 
|  08.02.2008, 17:52 | #14 | 
| Участник | Цитата: И если вы не в курсе,некоторые объекты выполняются на сервере,а некоторые на клиенте,формы - это интерфейс,выполняется на клиенте всегда,а вот классы можно вызывать где угодно. Про сейлс форму я комментировать не буду,действительно вызывать статические формы можно,в этом случае это правильно,но не значит,что так будет всегда.Дискуссию на эту тему я прекращаю. Последний раз редактировалось Eugene Murka; 08.02.2008 в 17:56. Причина: дополнение | 
|  | 
|  08.02.2008, 18:06 | #15 | 
| Участник | Цитата: Я в свое время (в начале работы с Аксаптой) тоже был поклонник такого подхода. По-моему, даже на форум писал. Только вот прошло время, пришел опыт. Сейчас страшно вспоминать, что я иногда в Аксапте писал, включая и динамические формы в диалоге. Ужас! | 
|  | 
|  08.02.2008, 18:09 | #16 | 
| Участник | Цитата: 
		
			Сообщение от Eugene Murka
			   А что описывать - создаёте наследника от Runbase, методе dialog() прописываете контрол,скажем myControlTxt, создаёте новый метод,называете его  myControlTxt_Modified запускаете диалог и при изменении значений в myControlTxt будет срабатывать myControlTxt_Modified, всё аналогично статической форме.  Главным моментом является вызов 2 методов класса FormRun controlMethodOverload(true) controlMethodOverloadObject(this) Это значит, что класс (this) будет управлять методами формы. Такой подход используется, к примеру, при работе панелей (listpanels), как на форме Users/User Groups, т.д | 
|  | 
|  11.02.2008, 11:30 | #17 | 
| int 20h | Цитата: 
		
			Сообщение от kashperuk
			   Ну, раз уж такое дело, то дело совсем не в этом.   Главным моментом является вызов 2 методов класса FormRun controlMethodOverload(true) controlMethodOverloadObject(this) Это значит, что класс (this) будет управлять методами формы. Такой подход используется, к примеру, при работе панелей (listpanels), как на форме Users/User Groups, т.д в классе создал метод X++: boolean controlMethodOverload()
{
   return true;
}fld4_1_modified(), где fld4_1 именно значение контрола (формируется Аксой) в нем описал обработку и все заработало. Вроде как все. 
				__________________ It's just my Unhopelessnessabilityerism   Trying to debug my mind   | 
|  | 
| Теги | 
| программно | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| Ruslan Goncharov: Mandatory property for DialogField | 1 | |||
| DialogField+Modified | 16 | |||
| Модификация выделенных строк | 3 | |||
| изменение значения DialogField | 8 | |||
| Сравнение DialogField с null | 6 | |||
| 
 |