|  14.01.2004, 20:19 | #1 | 
| Участник | Динамическое создание DataSource на форме, и добавление элементов дизайна. 
			
			В методе init формы пытаюсь добавть DataSource, и поля этого DS положить на грид на форме. Написал следующее: PHP код: 
			Так что пришлось положить на грид Control типа StringEdit, под названием formControl0 (EDT, например, Name), а из кода уже после него добавлять остальные, нужные, поля. Далее, теперь грид формируется правильно (т.е., содержит одно ненужное и два нужных поля), однако не отображает данные из соответствующей таблицы. Если я такой же набор полей (со сходными свойствами) формирую в гриде вручную, в дизайне, то данные отображаются. Возможно, некорректно устанавливается свойство DataSource грида.. Объясните пожалуйста, чего не хватает (или что я сделал не так). | 
|  | 
|  14.01.2004, 20:34 | #2 | 
| Участник | 
			
			Коллега! Рекомендую посмотреть код формирования списка должностных лиц при печати складских журналов. Думаю там все найдешь. Класс называется InventJournalPrintForm_RU. Метод run. Идея состояла в следующем: Для складского журнала может формироваться 1..n отчетов. Каждый отчет содержит свой список должностных лиц. Потому кнопку диалога была повешена форма в которую динамически набрасывались tabPages, на них в свою очередь grids, которые привязывались к своим источникам данных. Вот такая штука.  P.S. Это верно для версии 3.0 SP1 и старше. | 
|  | 
|  15.01.2004, 10:56 | #3 | 
| NavAx | 
			
			Или посмотрите класс SysTableBrowser (браузер таблиц), там практически все, что Вам нужно.
		 
				__________________ Чудес не бывает (c), истина где-то рядом (c)... | 
|  | 
|  15.01.2004, 17:36 | #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." Какие ещё будут соображения по этому поводу? | 
|  | 
|  15.01.2004, 18:13 | #5 | 
| Участник | 
			
			Попробуйте ваши действия по добавлению динамических элементов производить до супера в init()....
		 | 
|  | 
|  15.01.2004, 19:23 | #6 | 
| Участник | 
			
			Пробовал, при запуске формы аксапта вылетает. PHP код: 
			 | 
|  | 
|  16.01.2004, 11:23 | #7 | 
| Участник | 
			
			Непосредственно на форме не выйдет. Но форму можно создать в классе, как это обсуждалось ранее. Далее этот класс использовать в lookup методе формы. Так как это делается в перекрытых методах lookup.
		 | 
|  | 
|  16.01.2004, 12:39 | #8 | 
| Banned | 
			
			Решал я такую задачу. Все можно сделать, и притом из самой формы. Как было правильно замечено, модифицировать дизайн надо перед super() в init(). Работа идет с классом Form form = formRun.form(). Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу: PHP код: 
			PHP код: 
			 | 
|  | 
|  16.01.2004, 12:59 | #9 | 
| Участник | 
			
			Спасибо, Женя, был не прав    | 
|  | 
|  19.01.2004, 17:36 | #10 | 
| Участник | 
			
			Спасибо, всё получилось.
		 | 
|  | 
|  07.02.2005, 17:22 | #11 | 
| NavAx | Цитата: 
		
			Изначально опубликовано EVGL  Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу. При этом в новую копию формы передать тот же args. Зачем это надо? - можно без кастомизация формы динамически добавлять функциональность (по типу как сделан SysListPanel). 
				__________________ С уважением, Игорь Ласийчук. | 
|  | |
| За это сообщение автора поблагодарили: (1). | |
|  24.11.2010, 13:42 | #12 | 
| Гость | Цитата: добавил контрол на форму, и пытаюсь обратиться к нему из метода init() | 
|  | 
|  24.11.2010, 15:31 | #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). | |