| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Basics: обновление отдельного поля в гриде
			 
			
			Вопрос новичка. 
		
		
		
		
		
		
		
	Ситуация такая: есть грид, в нем 2 поля из одного источника данных. Поля вида ID, Name. Поле ID выбирается из lookup-формы. Хотелось бы чтоб сразу после выбора ID в поле Name записывалось имя, соответствующее данному ID. Пока что делаю DS.research() в методе modified поля ID, но это кажется нелогичным и к тому же возникают дополнительные неудобства.. Подскажите плз. что нужно сделать...  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			полазив по форуму и посмотрев отвлеченные темы сделал следующим образом: 
		
		
		
		
		
		
		
	PHP код: 
	
			
	Однако продолжает мучать вопрос - неужели нельзя сделать что-нибудь более экономичное по ресурсам, чем перечитывание всего датасорса?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			самое простое делаешь на своей таблице статический метод: 
		
		
		
		
		
		
		
	static Name GetMyName( FieldId _FieldId) { MyTable myTable; ; return (select myTable where myTable.FieldId == _FieldId).MyName; } и бросаешь его на грид, так помоему большинство делает  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Соучастник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			BDI_Charges_DS.refreshEx(-1)
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	View Anton Soldatov's LinkedIn profile  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Антон Солдатов  
BDI_Charges_DS.refreshEx(-1)  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			сорри я не понял вопроса, я думал вопрос про отображение
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Pustik  
самое простое делаешь на своей таблице статический метод: ... По-моему, тут другая ситуация: датасорс грида - другая таблица, в ней хранятся ID затраты и различная дополнительная информация. Дело в том, что хочется на гриде выводить не ID, а наименование затраты, которое хранится в BDI_ChargeCodes(ID,Name). Т.о. я выбираю ID при помощи lookup и хочу чтоб в StringEdit на гриде отобразилось наименование. соответствующее этому ID. \ Проблема именно в мгновенном отображении. если я закрою и открою форму (соответственно, перечитается датасорс) то для всех имеющихся записей наименования будут корректными..  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			дак все-таки вопрос про отображение? сейчас все опишу...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			создаешь на этой таблице BDI_ChargeCodes(ID,Name) метод :     
		
		
		
		
		
		
		
	static Name GetMyName( Id _Id) { BDI_ChargeCodes BDI_ChargeCodes ; return (select BDI_ChargeCodes where BDI_ChargeCodes.id == _Id).Name } далее просто мышкой его хватаешь и несешь в свой грид. Это будет метод который просто отобразит тебе название соответствующее твоему ID А если у тебя STRINGEDIT привязанное к датасоурсу то : 1) поставь свойство у всех элементов формы (ID,String) AutoDeclaration = Yes к примеру они у тебя называются MYID , MYSTRINGEDIT 2) в методе модифайд ID элемента напиши пишешь следующее : MYSTRINGEDIT.text(BDI_ChargeCodes::GetMyName(MYID.value))  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще посмотрите как сделано отображение(выбора) Контактного лица в форме поставщиков - Контакты - помоему это как раз то что вы ищите. Там прячется ID и отображается только Имя
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Pustik, огромное спасибо. первый метод подошел..  
		
		
		
		
		
		
		
	Есть еще один вопрос по этой теме: я очевидно не совсем понимаю концепцию дата-методов: откуда берется параметр Id _Id, передаваемый ему??  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Dymm  
... датасорс грида - другая таблица, .. display Name GetMyName() { return BDI_ChargeCodes::GetMyName(this.ID)) } и тащите его мышкой на свой грид.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Dymm  
[B] Есть еще один вопрос по этой теме: я очевидно не совсем понимаю концепцию дата-методов: откуда берется параметр Id _Id, передаваемый ему?? На самом деле правильно бы было где я написал чуть выше. Там Id передается через This.Id . А еще лучше посмотрите как организован метод Find на таблицах , имеющих статус справочников. Например на таблице InventTable. И посмотрите как на других формах выводится наименование номенклатуры, используя этот метод. Тот вариант что выше, будет возвращать только "Название".  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Pustik  
На самом деле правильно бы было где я написал чуть выше. Там Id передается через This.Id . А с find и display-методом я тоже попробовал. основываясь на Контактах в форме поставщиков.. не заработало  (
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кстати, таки не сработало... потому что тогда поля Name у всех записай начинают отображать имя для кода текущей записи..  
		
		
		
		
		
		
		
	![]() Если я делаю display-метод на таблице (при помощи find) данные для существующих записей отображаются корректно, вся проблема в отображении наименования для ДОБАВЛЯЕМОЙ записи.. Следовательно вопрос перефразируется в "как вызвать display-метод для поля из метода modified другого поля?"   
		 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну так тяжело понять почему у вас не работает;  и что именно работает,  а что нет. 
		
		
		
		
		
		
		
	Попробуйте выложить проект в упрощенной форме : таблица BDI_ChargeCodes, ваша форма( желательно только грид на ней ) , и если надо таблицы датасоурса этой формы. Я посмотрю и постараюсь вам помочь.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			экспортировал все что есть (его там немного)... 
		
		
		
			Если подскажете что делать - буду крайне благодарен...  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			хехе еще вариант можно такой использовать в modified поля ID пишешь  
		
		
		
		
		
		
		
	BDI_Charges_DS.write() произойдет запись этой строчки и метод find отобразит корректно название. Но это только для частных случаев, если не возникнет никаких ошибок. Т.е. это просто вариант. Мы в некоторых ситуациях это дело используем.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			1) Создал новую форму  
		
		
		
			2) Убрал из грида лишние поля(чтобы легче было разобраться) и лишний датасоурс 3) И кстати убрал метод лукап (он не работает не знаю почему)  ))4)Написал дисплей метод на вашей таблице значений, bdi_charge по моему 5)Перенес этот метод в грид. 6)Все  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			да уж. спасибо.. я тоже уже разобрался.. просто дисплей-метод у меня почему-то был объявлен не на BDI_Charges, являющейся датасорсом грида, а на BDI_ChargeCodes  
		
		
		
		
		
		
		
	 )Спасибо за участие, ситуация проясняется...  
		 | 
| 
	
 |