| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Динамическое создание DataSource на форме, и добавление элементов дизайна.
			 
			
			В методе init формы пытаюсь добавть DataSource, и поля этого DS положить на грид на форме. 
		
		
		
		
		
		
		
	Написал следующее: PHP код: 
	
			
	Так что пришлось положить на грид Control типа StringEdit, под названием formControl0 (EDT, например, Name), а из кода уже после него добавлять остальные, нужные, поля. Далее, теперь грид формируется правильно (т.е., содержит одно ненужное и два нужных поля), однако не отображает данные из соответствующей таблицы. Если я такой же набор полей (со сходными свойствами) формирую в гриде вручную, в дизайне, то данные отображаются. Возможно, некорректно устанавливается свойство DataSource грида.. Объясните пожалуйста, чего не хватает (или что я сделал не так).  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Коллега! Рекомендую посмотреть код формирования списка должностных лиц при печати складских журналов. Думаю там все найдешь. Класс называется InventJournalPrintForm_RU. Метод run. Идея состояла в следующем: Для складского журнала может формироваться 1..n отчетов. Каждый отчет содержит свой список должностных лиц. Потому кнопку диалога была повешена форма в которую динамически набрасывались tabPages, на них в свою очередь grids, которые привязывались к своим источникам данных. Вот такая штука.  
		
		
		
		
		
		
		
	P.S. Это верно для версии 3.0 SP1 и старше.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Или посмотрите класс SysTableBrowser (браузер таблиц), там практически все, что Вам нужно.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Чудес не бывает (c), истина где-то рядом (c)...  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, посмотрел эти классы, понял, насколько был неправ при написании кода до этого  
		
		
		
		
		
		
		
	  .  Но проблему не решил.Моя ситуация немного отличается. В данных классах сначала создаётся объект Form, затем на него вешаются DataSource и FormControls, затем на основе этого Form создаётся FormRun, и запускается на выполнение. В моём же случае, нужно изменить структуру формы из самой этой формы. (Изначально вопрос возник из размышлений на тему, возможно ли сделать относительно универсальный лукап, отсюда и привязка всех действий непосредственно к лукап-форме). Всё, что нашёл в Аксапте на эту тему - кратенькое замечание в developer's guide про медот формы init() : "Before the super() call in the method, you can modify the form using the FormBuild system class." Какие ещё будут соображения по этому поводу?  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте ваши действия по добавлению динамических элементов производить до супера в init()....
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Пробовал, при запуске формы аксапта вылетает. 
		
		
		
		
		
		
		
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Непосредственно на форме не выйдет. Но форму можно создать в классе, как это обсуждалось ранее. Далее этот класс использовать в lookup методе формы. Так как это делается в перекрытых методах lookup.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Решал я такую задачу. Все можно сделать, и притом из самой формы. Как было правильно замечено, модифицировать дизайн надо перед super() в init(). Работа идет с классом Form form = formRun.form(). Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу: 
		
		
		
		
		
		
		
	PHP код: 
	
			
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, Женя, был не прав  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, всё получилось.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано EVGL  
Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу. При этом в новую копию формы передать тот же args. Зачем это надо? - можно без кастомизация формы динамически добавлять функциональность (по типу как сделан SysListPanel). 
				__________________ 
		
		
		
		
	С уважением, Игорь Ласийчук.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: (1). | |
| 
			
			 | 
		#12 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
добавил контрол на форму, и пытаюсь обратиться к нему из метода init()  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Developer 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Представьте, что экземпляры объектов, таких как DataSource, DataSource_DS, DataSource_Q, DataSource_QR, и экземпляры контролов с AutoDeclaration = Yes, хранятся некоторым списком. Сами переменные, используемые в коде формы, имеют смысл ссылок на позицию (адрес) в этом списке. При чем экземпляры объектов для источников данных хранятся перед контролами. При добавлении нового источника данных у формы "создаются новые" экземпляры объектов, которые сдвигают контролы в списке. Естественно указатели на контролы становятся неверными, поэтому и возникают ошибки при обращении к ним. В вашем случае - при обращении к StaticText. Решение: либо добавить нужное количество источников данных на форму заранее в репозитарий, либо, если первое не возможно, как минимум отказаться от использования контролов с AutoDeclaration = Yes (данным путем не ходил, возможно потребуется ввести и другие ограничения) Последний раз редактировалось vallys; 24.11.2010 в 16:03.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: gl00mie (5), S.Kuskov (10), (1). | |