| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Связь таблиц
			 
			
			Здравствуйте!  
		
		
		
		
		
		
		
	у меня не большой вопрос: мне надо получить записи из InventTable связанного с VendContractItem и вывести в грид. Перекрыв метод executeQuery - он ни в какую не хочешь проводить выборку ![]() вот текст запроса: X++: public void executeQuery() { Query q_Items; ; q_Items = this.query(); q_Items.dataSourceTable(TableNum(InventTable)); q_Items.dataSourceTable(TableNum(InventTable)).addDataSource(TableNum(VendContractItem)); q_Items.dataSourceTable(TableNum(VendContractItem)).addLink(FieldNum(InventTable,ItemId),FieldNum(VendContractItem,ItemId)); q_Items.dataSourceTable(TableNum(VendContractItem)).joinMode(JoinMode::InnerJoin); q_Items.dataSourceTable(TableNum(VendContractItem)).addRange(FieldNum(VendContractItem,RContractAccount)).value(sysQuery::value(RContractTable_RContractAccount.valueStr())); super(); } спасибо за ранее  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте что-то вроде этого: 
		
		
		
		
		
		
		
	X++:     QueryBuildDataSource    qbds;
;
    qbds = this.query().dataSourceTable(TableNum(InventTable));
    qbds = qbds.addDataSource(TableNum(VendContractItem));
    qbds.addLink(FieldNum(InventTable,ItemId),FieldNum(VendContractItem,ItemId));
    qbds.joinMode(JoinMode::InnerJoin);
    qbds.addRange(FieldNum(VendContractItem,RContractAccount)).value(sysQuery::value(RContractTable_RContractAccount.valueStr()));
    super(); | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это одно и то же. 
		
		
		
		
		
		
			
		
		
		
		
	Учтите, что этот код будет вызываться каждый раз при выполнении считывания данных (executeQuery), а значит будет добавляться все больше и больше источников. А почему вы не хотите добавить источник еще один на форму? Если таки хотите это сделать из кода, может перенесите весь этот код (за исключением фильтрации) в метод init источника InventTable. И перед фильтрацией ищите сперва существующий фильтра, а только если не найден создавайте новый.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Proid (1). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			в init() нет необходимости добавлять, так же как и добавление dataSource на форму - там возникают не понятные "глючи". На форме связано и так много dataSource'ов, и все привязаны к InventTable. пробовал не в executeQuery создавать - результата ноль. Если явно задать для примера номенклатуру - отрабатывает нормально, но вот джойнить VendContractItem ни в какую не хочет
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Не понятно.... Т.е. прописываешь на форме датасорс, джойнишь, а он всё равно не привязывается? Смотрел, что получается в запросе к БД? Хоть что-то же там должно появится... Приведи сюда, какой SQL получается. 
		
		
		
		
		
		
			ЗЫ имхо,слишком мало информации, чтоб понять в чём дело... 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Proid (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Axapta Retail User 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня ваш код чудесно работает. (Хотя конечно в идеале его нужно в init() или все-таки на форму - что у вас там за глюки?).  
		
		
		
		
		
		
		
	Возможно у вас значение RContractTable_RContractAccount.valueStr() не корректно - поэтому вы записи не видите? Ну и советую войти в группу пользователей Axapta Retail  
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Proid (1). | |
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			SELECT FIRSTFAST * FROM InventTable WHERE VendContractItem.ItemId=InventTable.ItemId EXISTS JOIN FIRSTFAST * FROM InventItemRangeRef WHERE InventTable.ItemRangeIdRef = InventItemRangeRef.RangeIdRef 
		
		
		
		
		
		
		
	Странно, но почему этот запрос формируется Аксаптой ... Связь InventTable с InventItemRangeRef и то через другую таблицу только на датасорсах. Вообще задача такая - переделать добавление из классификатора с фильтрацие по договорам. Если делать через добавления датасорса и установкой связи inner join - отрабатывает нормально, но уже существующий функциал дает сбой с первой записью. Ковыряться довольно муторно, вот и решил может программно выбирать записи в inventTable. Но чувствую, придется ковыряться именно в работе фунционала классификатора.  | 
| 
	
 |