| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Задачка с запросом в форме
			 
			
			Всем привет. 
		
		
		
		
		
		
			есть задачка которую не знаю как сделать. Исходные данные: Форма, на ней 3 связанных источника данных: InventSum->InventDim->InventBatch. Данные группируются (хотя думаю это не важно). Задача: из дата метода на одном источнике данных посмотреть значение полей другого источника данных (например метод на InventSum, а надо посмотреть значение поля на InventDim) 
				__________________ 
		
		
		
		
	--- SHiSHok  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			пишем в методе и все 
		
		
		
		
		
		
		
	InventDim.InventLocationId, то есть указываем курсор по названию датасорса или что-то другое имеется ввиду...?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			не все так просто. такое обращение (InventDim.InventLocationId) не дает значение соответствующее записи с которой вызывается дата метод (например с InventSum). Т.е. при вызове дата метода на InventSum меняются значения только источника InventSum, остальные источники заполняются первым значение и не изменяются при вызове дата метода.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
		
			--- SHiSHok Последний раз редактировалось SHiSHok; 30.03.2009 в 16:29.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Тогда все поля заполнятся значением, расчитанным по текущему положению курсора в форме, а при переходе по записям будут дружно изменяться. 
		
		
		
		
		
		
			Лучше переформулировать задачу (либо я чего-то не знаю). 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
display method определен на DataSource InventSum, надо добраться к InventBatch. Моя трассировка из дисплей метода показывает что соответствие полей InventSum<->InventDim<->InventBatch отсутствует   .
		
				__________________ 
		
		
		
		
	--- SHiSHok  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от SHiSHok
			
			 
... 
		
	display method определен на DataSource InventSum, надо добраться к InventBatch. ... 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			SHiSHok, выложил бы проект с этой формой - давно бы нашли в чем дело.  
		
		
		
		
		
		
		
	Проверь какой у тебя тип джойна между датасорсами (и есть ли там вообще джойн  ).
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: display <-> <>(InventSum _cursor) { return InventBatch::find(InventDim::find(_cursor.InventDimId).InventBatchId, _cursor.ItemId).<->; } 
				__________________ 
		
		
		
		
		
			SY, AVA Последний раз редактировалось ShowPoint; 30.03.2009 в 17:57.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Запрос то с группировкой. Автор не зря спрашивает. _cursor.InventDimId может быть неизвестным по объективным причинам (по InventDim производится группировка по полям аналитик).
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			чтоб выложить проект его причесать надо сначала. 
		
		
		
		
		
		
			Задача простая: SalesQuickQuote запрос InventTable->InventSum->inventDim->InventBatch (везде inner join). в inventBatch есть аттрибут A в зависимости от значения которого будет вычислять поле на на InventSum (и edit метод по разному будет отрабатывать). inventBatch вяжется к inventSum и inventDim, остальные по очереди друг к дружке. аттрибут А, и вычисляемые поля отображаются на гриде. Исполняемый запрос с группировка имеет все необходимые данные чтобы вычислить поля. (это я к вариантам вида A::find(B::find(c::find... - смерть SQL серверу особенно в дисплей методе источника данных) Так вот не могу добраться к значениям аттрибута А таблицы InventBatch из display и edit методов inventSum. (надеюсь как то понятней стало) 
				__________________ 
		
		
		
		
	--- SHiSHok  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			давно это было... тогда делал что то типа такого: 
		
		
		
		
		
		
		
	X++: display <-> <>(InventSum _cursor) { InventDim _InventDim = _cursor.joinChild(); InventBatch _InventBatch = _InventDim .joinChild(); return _InventBatch.<->; }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: SHiSHok (2). | |
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо raz, то что надо.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	--- SHiSHok  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: display str 50 usInfoName() { SysDataBaseLog2 _sysDataBaseLog2; UserInfo _userInfo = _sysDataBaseLog2.joinChild(); return _userinfo.name; }  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			1. Почему не: 
		
		
		
		
		
		
		
	X++: display str 50 usInfoName(SysDataBaseLog _sysDataBaseLog2) { UserInfo _userInfo = _sysDataBaseLog2.joinChild(); return _userinfo.name; }  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			стандартный Link Type - Delayed, менял на Inner Join - никакой разницы
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сделайте что-нибудь с _sysDataBaseLog2, а то он у вас пустой. Товарищ raz вам как бы уже намекнул в коде.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	// no comments  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Delayed - это как раз не соединение. При такой связи для каждой строки основной таблицы будет выполнен отдельный запрос к подчиненной. В одном гриде, к примеру, вы такую связку не отобразите. Метод joinChild же используется для того чтобы определить соответствующую подчиненную строку внутри одного запроса. 
		
		
		
		
		
		
		
	И raz вас правильно поправил. Не понятно для какого курсора вы пытаетесь найти дочернюю запись.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: userax2009 (1). | |
| Теги | 
| datametod, datasource, form, query, программно | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |