|  08.05.2007, 08:13 | #1 | 
| Участник | Поиск в Grid по полю DataMethod 
			
			В форме "Строки", которая вызывается из формы "* приказы" нужно сделать поиск по полю "Фамилия Имя Отчество". Поле заполняется через метод emplName таблицы RHRMOrderTrans. Т.е. стандартные поиск и фильтрация по нему не работают. В ТЗ написали, чтобы поиск был через отдельный EditText форме. (Что-то типа поиска по подразделению в штатном расписании) Но как его связать с полем "ФИО"?
		 | 
|  | 
|  08.05.2007, 08:51 | #2 | 
| Участник | 
			
			При изменении добавлять в RHRMOrderTrans_ds.query exist join  на EmplTable. Если надо снять фильтр, то восстнавливать изначальный query предварительно запакованный (правда при попытке паковки чего-то с дайналинками вываливается ошибка). Если вы точно знаете что в EmplID всегда есть значение, то второй пункт пропустить. | 
|  | 
|  08.05.2007, 09:44 | #3 | 
| Участник | 
			
			Что такое RHRMOrderTrans_ds.query ?
		 | 
|  | 
|  08.05.2007, 10:06 | #4 | 
| Участник | Цитата: Цитата: 
		
			public container pack( [boolean _doCheck=TRUE] ) Arguments doCheck : If this argument is TRUE, an error is flagged when a datasource in the query has references to an outside cursor (i.e. a dynalink was added to the datasource). The default value is TRUE (i.e. enforce the constraint). Кроме того, надо изменять запрос в QueryRun - тогда сброс фильтра будет стандартный 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | |
| За это сообщение автора поблагодарили: belugin (5). | |
|  08.05.2007, 10:07 | #5 | 
| Участник | 
			
			xxx_ds - это FormDataSource на форме. query - это фильтр в этом источнике данных. Вернее query() т.к. это свойство. то есть если вы хотите обратиться к \Forms\RHRMOrderTrans\Data Sources\RHRMOrderTrans из программы внутри этой вформы надо вызывать RHRMOrderTrans_ds - это объект, представляющий источник данных. | 
|  | 
|  08.05.2007, 10:08 | #6 | 
| Участник | Цитата: 
		
			Кроме того, надо изменять запрос в QueryRun - тогда сброс фильтра будет стандартный
		
	 | 
|  | 
|  08.05.2007, 10:19 | #7 | 
| Участник | 
			
			Да мне не нужны изменения   мне бы только голимый поиск по этому полю... Понимаете, в чем проблема, они пишут, что у них в приказе может быть до 1500 человек и искать им в этом списке в лом (а станартного поиска по этому полю нету). По таб.номеру искать они скорее всего не хотят. Вот и все. Никаких изменений. Или изменения в выводе грида? Про какие изменения говорим-то? | 
|  | 
|  08.05.2007, 10:24 | #8 | 
| Участник | 
			
			В data source нет поля emplName, кстати... Только emplid. А emplName подтягивается из EmplTable.  Поэтому мне нет смысла обращаться к этому датасорсу.  Вижу только как такой вариант: Пользователь вводит фамилию, я из таблицы EmplTable выискиваю его Таб№ и потом по нему делаю фильтр на датасоурс. Это же через Ж... !!! | 
|  | 
|  08.05.2007, 10:30 | #9 | 
| Участник | Цитата: Только в стандарте этого не делают (взять, хотя бы, складские журналы - фильтр разнесенным жунралам)   
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  08.05.2007, 12:15 | #10 | 
| Участник | 
			
			Предлагается при изменении поля-фильтра добавить динамически другой датаурс (причем QueryBuildDataSource а не FormDataSource), связанный с первым.
		 | 
|  | 
|  08.05.2007, 13:20 | #11 | 
| Участник | 
			
			Объясните, плз, что означает сей код: X++: for (i = 1 ; i <= RHRMStaffList_DS.query().dataSourceCount() ; i++) { switch (RHRMStaffList_DS.query().dataSourceNo(i).table()) { case tableNum(RHRMStaffList): dsStaff = i; break; case tableNum(PersonTitleTable): dsTitle = i; break; case tableNum(RPayHRMOrganization): dsOrg = i; break; } } | 
|  | 
|  08.05.2007, 13:24 | #12 | 
| Участник | 
			
			dsStaff, dsTitle, dsOrg переменные типа int.
		 | 
|  | 
|  08.05.2007, 14:16 | #13 | 
| SAP | 
			
			В этом коде перебираются все источники данных этого запроса и в зависимости от того какая это таблица int переменным присваевается значения, скорей всего для того что бы в дальнейшем обращатся к источнику данных по номеру
		 | 
|  | 
|  10.05.2007, 09:27 | #14 | 
| Участник | 
			
			Вопрос номер 1: как в дебагере посмотреть содержимое таблицы. А то я только одну запись вижу и толку мне от нее? Или хотя бы сколько в ней записей на данный момент? Вопрос номер 2: как бегать по джоиной таблице? Пыталась: X++: while (emplTable.RecId) { filter_str += ','+emplTable.emplId; next emplTable; } | 
|  | 
|  10.05.2007, 09:39 | #15 | 
| Участник | 
			
			1. В отладчике - никак. 2. Бегайте по первому (ведущему) датасорсу - остальные синхронизируются автоматом 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  10.05.2007, 10:02 | #16 | 
| Участник | 
			
			Объясните, плиз, что должно происходить (и происходит ли вообще что-нибудь) в этом коде: X++: s2 = FindEdit.valueStr();
emplTable_ds.filter(fieldnum(EmplTable, lastName), s2);
et = emplTable_ds.getFirst(1);et - типа EmplTable. | 
|  | 
|  10.05.2007, 11:36 | #17 | 
| Участник | 
			
			Если emplTable_ds - подчиненный датасорс, то при вызове emplTable_ds.filter() ничего не произойдет. Для фильтрации по этому полю надо дополнительно вызвать [Имя главного датасорса]_ds.research(). Для строки X++: et = emplTable_ds.getFirst(1); 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  10.05.2007, 13:44 | #18 | 
| Участник | 
			
			Тогда скажите, как сделать такой алгоритм.  У датасорса RHRMOrderTrans есть InnerJoin EmplTable (он тоже датасоурс). Мне нужно сделать выборку EmplId из таблицы EmplTable по введенной в строке поиска фамилии (т.е. фильтр по полю LastName) и потом этими выбранными EmplId отфильтровать RHRMOrderTrans_ds. Как это сделать через датасоурсы? Я пока сделала через обращение к самой таблице EmplTable, в которой по введенной фамилии выбираются подходящие EmplId. Из них делаю стринговую переменную (перечеслением через ',') и потом использую эту переменную как фильтр для RHRMOrderTrans_ds. Но если какой-то умный пользватель введет только первую букву, то будет куча фамилий, соответственно куча таб.номеров и стринг обрежется (у него же есть ограничение по длинне 255 символов?), в общем не все таб.номера влезут и могут некоторые фамилии потеряться. | 
|  | 
|  10.05.2007, 13:51 | #19 | 
| Участник | 
			
			почему вы не слушаете советы? Вам же сказали, сделайте exists join EmplTable в случае, если введен фильтр, и накладывайте фильтр на поле этого нового источника на соответствующее поле (ФИО) | 
|  | 
|  10.05.2007, 14:28 | #20 | 
| Участник | 
			
			О, по одной простой причине: сделать нужно вчера (как всегда), а я ничего не понимаю из написанного, а разбираться времени не было. Сейчас появилось, попробую разобраться.
		 | 
|  |