Показать сообщение отдельно
Старый 05.04.2007, 13:40   #1  
Akinak is offline
Akinak
Участник
 
17 / 11 (1) +
Регистрация: 22.02.2007
Метод addRange() и его использование (верное)
Доброго времени суток, дамы и господа.

Подскажите пожалуйста, может кто-либо из вас сталкивался с таким вопросом. Суть - нужно открыть форму(№2) с заранее отсортированным дс из другой формы(№1).

Для этого изпользуются классы FormRun, FormDataSource и QueryBuildRange. В частности вот код -
X++:
    QFormRun = ClassFactory.FormRunClass(Args);
    QFormRun.init();
    QFormDs = QformRun.dataSource(2);
    criteria = QFormDs.Query().dataSourceNo(2).addRange(
        fieldNum(pgpProjTable,ProjId)); //спозиционировались
    criteria.value(pgpProjTable.ProjId); //задали рейндж
    QFormRun.Run();
В данном случае код рабочий, однако, когда в другой форме(№3) используется точно такой-же код (необходимо открыть форму №2 с сортировкой того-же дс, но по другому полю), то в строке
X++:
criteria = QFormDs.Query().dataSourceNo(2).addRange(
        fieldNum(pgpTaskTable,TaskId)); // вот тут начинаются чудеса :eek: 
criteria.value(pgpTasksTable.TaskId);
Аксапта не позиционируется на необходимое нам поле, а взамен этого выдает позиционирование на другое поле (даже из другой таблицы). В результате в дебаггере видна строка - criteria = pgpProjId = TN4 , где pgpProjId - это неправильное позиционирование, а TN4 - это правильно полученный TaskId. Что совсем интересно, так это то, что при смене позиционирования на другое поле(TaskName к примеру) Аксапта начнет позиционировать на необходимое поле (т.е. TaskId).
Как говорила некая Алиса - "Всё чудесатее и чудесатее."

З.Ы. Ax 3.0 eng SP2. Заранее благодарю.