|  22.05.2006, 15:49 | #1 | 
| Участник | Переход к основной таблице номенклатуры 
			
			Здравствуйте, уважаемые коллеги! Не работает переход к основной таблице номенклатуры. При выполнении этой операции открывается номенклатурный справочник, но курсор позиционируется на первую строчку, а не на нужную. Так происходит при переходе из всех таблиц. Для остальных таблиц указанная операция перехода работает нормально На форуме искал, ничего по этой проблеме не нашел. Может, кто-то сталкивался с подобным? Ax 3.0 SP4 | 
|  | 
|  22.05.2006, 16:05 | #2 | 
| Участник | 
			
			А у вас порядок сортировки на форме справочника номенклатур по коду или по какому-либо другому полю?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | |
| За это сообщение автора поблагодарили: DreamCreator (2). | |
|  22.05.2006, 16:40 | #3 | 
| Участник | 
			
			Скорее всего, вы поменяли индекс на датасорсе в форме номенклатурного справочника.
		 | 
|  | 
|  23.05.2006, 15:56 | #4 | 
| Участник | 
			
			Изменений индекса и сортировки не делал, все стандартное.
		 | 
|  | 
|  23.05.2006, 16:25 | #5 | 
| Участник | 
			
			Если у вас есть возможность, попробуйте промониторить запрос, идущий на сервер при переходе. В нормальных условиях на сервер должен уходить запрос вида X++: select ... from INVENTTABLE A, ... where A.DataAreaId = '' and A.ItemId >= 'Код номенклатуры' and ... order by A.DataAreaId, A.ItemId PS Возможно, у вас на форме при инициализации чистятся element.args().lookupField() или element.args().lookupValue() 
				__________________ Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 23.05.2006 в 16:28. | 
|  | 
|  23.05.2006, 19:52 | #6 | 
| Участник | 
			
			Есть вариант - перекрыть метод на поле ист. данных откуда переходим к основной таблице Код:  
public void jumpRef()
{
    Args            args1;
    FormRun         formRun;
    InventTable    inventTable;
    ;
    select firstonly inventTable where inventTable.ItemId == DataSources.ItemId;
    args1 = new Args(formstr(InventTable));
    args1.record(inventTable);
    formRun = classFactory.formRunClass(args1);
    formRun.init();
    formRun.run();
    formRun.detach();
}Да, еще на форме InventTable придеться дописывать в executeQuery что то типа. Код:  
    if (element.args().dataset())
       InventTable_DS.findRecord(element.args().record()); | 
|  | 
|  23.05.2006, 23:37 | #7 | 
| Участник | 
			
			При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго.
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  24.05.2006, 06:02 | #8 | 
| Участник | 
			
			Рискну высказать еще одно предположение: не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись.
		 | 
|  | 
|  24.05.2006, 08:36 | #9 | 
| Участник | 
			
			А вы переходите к основной таблице по коду номенклатуры или по ее названию?
		 | 
|  | 
|  24.05.2006, 09:07 | #10 | 
| Участник | Цитата: 
		
			Сообщение от denny
			
			  ...не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись. Цитата: 
		
			Сообщение от AraraT®
			
			 А вы переходите к основной таблице по коду номенклатуры или по ее названию? | 
|  | 
|  24.05.2006, 11:15 | #11 | 
| Участник | Цитата: 
		
			Сообщение от akvi
			
			 Есть такие модификации  Если модификации создают query и datasource формы заново, то никакой связи с внешними таблицами и формами не будет. Ваш код должен брать текущий queryRun формы и модифицировать его. Ни в коем случае не пересоздавать. Т.е. в форма следующий код инициализации датасорса является неправильным, поскольку датасорс пересоздается X++: query q = new Query();
q.addRange(....)
...
this.query(q);X++: super();
this.query().addRange(...)
...X++: super();
SysQuery::findOrCreateRange(this.query(),....);
...Устанавливать значения в range нужно в методе executeQuery. Теоретически можно и не заниматься всей этой "чепухой" и лепить полностью новый запрос в init'е. Вы почувстуете разницу как раз при переходе к основной таблице, при привязке вашей формы к другим (dynaLink) и на прочих интересных вкусностях (например, работа RLS)... Просто делайте модификации корректно. Если уж начали их делать. | 
|  | 
|  24.05.2006, 11:17 | #12 | 
| Участник | Цитата: 
		
			Сообщение от akvi
			
			 Перехожу, конечно же, по коду Если ваш код содержит специальные символы .,?*"\ или пробел, то такой код нужно экранировать при передаче в range. Используйте SysQuery::Value() чтобы гарантировано экранировать спец.символы. Посмотрите этот метод, чтобы разобраться что и как экранируется. | 
|  | 
|  24.05.2006, 12:03 | #13 | 
| Участник | Цитата: 
		
			Сообщение от mazzy
			
			 Просто делайте модификации корректно. Если уж начали их делать.   | 
|  | 
|  24.05.2006, 14:59 | #14 | 
| Участник | Цитата: 
		
			Сообщение от AndyD При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго. | 
|  |