| 
	 | 
| 
			
			 | 
		#1 | 
| 
			
			 Снова балуюсь косаптой :) 
		
			
	 | 
	
	
	
		
		
			
			
			Казалось бы, простая задача...
			 
			
			Задача: есть некая таблица Table1. У нее есть поле VendAccount - ссылка на поставщика (AccountNum из VendAccount).  
		
		
		
		
		
		
			В форме Form1, которая "имеет дело" с данными Table1, есть, разумеется, датасурс Table1. Пользователь хочет видеть в форме Form1 не только код, но и наименование и другие атрибуты поставщика - поля из VendTable. Это не должны быть дисплей-методы: наименование поставщика - должно меняться пользователем непосредственно в форме Form1. Вешаем на форму Form1 подчиненный к Table1 датасурс VendTable; LinkType = OuterJoin. В методе init() датасурса VendTable формы пишем код, который актуализует именно нужный нам релейшен между таблицами VendTable и Table1: X++: qbds = qbds.addDataSource(tableNum(VendTable)); qbds.addLink(fieldNum(Table1, VendAccount), fieldNum(VendTable, AccountNum)); qbds.joinMode(joinMode::OuterJoin); this.query(q); Все работает замечательно - датасурсы связываются, мы можем менять в форме наименование поставщика, соответствующего текущей записи в датасурсе Table1. Но: когда мы меняем Table1.VendAccount - то есть собственно поставщика - связанная запись в датасурсе VendTable не меняется. То есть, изменили код ПОСТ-1 на ПОСТ-2 - а наименование осталось "Поставщик 1". Проблема была решена так: перекрыт метод modified() на поле Table1.VendAccount (в датасурсе VendTable формы), следующим образом: X++: public void modified() { ; super(); element.lock(); buffer.data(Table1); Table1.doUpdate(); Table1_ds.research(); if (Table1) { Table1_ds.findRecord(buffer); } element.unlock(); } Но что-то мне подсказывает, что данное решение является безграмотным и можно достичь этой цели - перепозиционирования записи в подчиненном датасурсе при изменении поля записи родительского датасурса - БЕЗ research() или executeQuery(). Вопрос к уважаемым гуру: я прав или неправ?  
		
				__________________ 
		
		
		
		
	Бесты и регарды!  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не совсем понятно, зачем добавлять VendTable и связывать датасорсы из кода.  
		
		
		
		
		
		
			Вообще же, подобная задача рашается на формах, где есть выбор складской аналитики (строки складские журналов, закупки, заказы) Например, для строк складских проводок класс InventJournalFormTrans_Movement, метод datasourceWritePost() X++:     if (inventjournalTrans.inventDimId != inventDim.inventDimId)
    {
        inventDim.data(InventDim::find(inventJournalTrans.inventDimId));
        inventDim_ds.setCurrent();
    }
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: konfet (1). | |
| 
			
			 | 
		#3 | 
| 
			
			 Снова балуюсь косаптой :) 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Не совсем понятно, зачем добавлять VendTable и связывать датасорсы из кода.
		
	 
Цитата: 
	
		
			... 
В данном случае отображается при сохранении. Но можно точно так же сделать и для модификации X++: public void modified() { ; super(); table1.doUpdate(); VendTable.data(VendTable::find(table1.VendAccount)); VendTable_ds.setCurrent(); VendTable_ds.refresh(); // RequestParam_ds.research(); } 
				__________________ 
		
		
		
		
	Бесты и регарды!  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			наименование поставщика - должно меняться пользователем непосредственно в форме
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Снова балуюсь косаптой :) 
		
			
	 | 
	
	
	
		
		
		
		 
			
			edit-методы не подходят: нужен поиск и сортировка. Название поставщика находится в одном гриде с полями из родительского датасурса table1. 
		
		
		
		
		
		
			Кстати, я несколько поторопился   Метод setCurrent похоже здесь не при чем... все прекрасно работает, если его закомментировать. Достаточно сделать X++: VendTable.data(VendTable::find(table1.VendAccount)); VendTable_ds.refresh(); Более того - залез в стандартный функционал, в форму "Закупки" (PurchTable). Метод Write датасурса PurchLine - закомментировал там строчку с setCurrent. PHP код: 
	
			
	 
		
				__________________ 
		
		
		
		
	Бесты и регарды!  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Тогда outer join не подойдет, нужно динамически при наложении фильтра менять тип связи на inner...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Андрей.  | 
| 
	
 | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Задача: запретить удалять строки разнесённых журналов. | 12 | |||
| Задача оптимизации | 62 | |||
| Задача оптимизации загрузки производственых мощностей | 23 | |||
| Простая загадка | 5 | |||
| Нешуточная задача | 8 | |||
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |