AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.01.2006, 10:25   #1  
Aslan is offline
Aslan
Участник
 
98 / 10 (1) +
Регистрация: 23.08.2005
Адрес: Астана
? Вложенный while select
вырезка из кода:
while (queryRunPosition.next())
{ ...
while select RAssetStandards where RAssetStandards.AssetId==RAsset.AccountNum
{excel.cellValue(i,q+7,RAssetStandards.AcquisitionPrice);q++;} -здесь проходит в цикле 2 раза
q=0;
...
}- весь запрос также проходит в цикле 2 раза, хотя надо 1
Подскажите как сделать так чтобы queryRunPosition считывал только одну запись.
Старый 30.01.2006, 10:39   #2  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
Цитата:
Сообщение от Aslan
Подскажите как сделать так чтобы queryRunPosition считывал только одну запись.
Пишите без Whilе, вот Вам и одна запись.

Однако, логичнее поместить в запрос нужное количество записей, например сгруппировав.
Старый 30.01.2006, 11:03   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Уважаемый Aslan, уточните, пож-та, в двух словах на человеческом языке (не кодом!) что Вы хотите получить? В частности, сколько у Вас моделей основных средств?
Старый 30.01.2006, 11:09   #4  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
Без, имеется ввиду тут:

while (queryRunPosition.next())

т.е. просто queryRunPosition.next();

Но это, так к Вашему вопросу:

Цитата:
Сообщение от Aslan
вырезка из кода:
while (queryRunPosition.next())
{ ...
...
}- весь запрос также проходит в цикле 2 раза, хотя надо 1
Подскажите как сделать так чтобы queryRunPosition считывал только одну запись.
Старый 30.01.2006, 11:13   #5  
Aslan is offline
Aslan
Участник
 
98 / 10 (1) +
Регистрация: 23.08.2005
Адрес: Астана
Ок....моделей учёта...два..(бух,налог)..на человеческом языке делаю отчёт по ОС. Теперь мне надо бы считать начисленный износ налогового учёта и бухгалтерского одновременно одним запросом.Поэтому приходится делать вложенный цикл. После прочтения первой записи в цикле во второй раз меняется колонка....вот и весь замысел, может можно сделать как то по другому, но искать другого выхода просто нет времени. При запросе одного ОС отчёт выводит его 3 раза.
Старый 30.01.2006, 11:19   #6  
Artild is offline
Artild
Участник
 
38 / 10 (1) +
Регистрация: 24.01.2003
Адрес: Новосибирск
если в Query, на основе которого был создан QueryRun, существуют связанные датасорсы, то запись основого датасорса будет выбираться до тех пор, пока существуют удовлетворяющие связям и рэйнджам записи в связанном датасорсе. Мне кажется в этом здесь проблема. Для этого у объекта класса QueryRun существует метод public boolean changed(tableId _table [, int _occurrence=1] ), который сообщает выбиралась ли после вызова next() новая запись в соответствующем датасорсе.

Последний раз редактировалось Artild; 30.01.2006 в 11:25.
Старый 30.01.2006, 11:33   #7  
Artild is offline
Artild
Участник
 
38 / 10 (1) +
Регистрация: 24.01.2003
Адрес: Новосибирск
странно все это Changed перекрывать не надо, его надо вызывать
Хочу уточнить... В query у вас один датасорс и queryRun несколько раз выбирает одну и ту же запись?
Попробуйте перед выполненим всего что вложено в основной цикл проверить с помощью changed изменение записи то есть если queryRunPosition.changed(tableNum(RAssetTable)) == true, то выполнем, если нет, то не выполняем цикл.
Старый 30.01.2006, 11:39   #8  
Aslan is offline
Aslan
Участник
 
98 / 10 (1) +
Регистрация: 23.08.2005
Адрес: Астана
Спасибо Artild.Точнее спасибо всем за отклик. И вправду сделал проверку на выбор queryRunPosition.changed(tableNum(RAssetTable)) всё стало на свои места.
Старый 30.01.2006, 11:43   #9  
Artild is offline
Artild
Участник
 
38 / 10 (1) +
Регистрация: 24.01.2003
Адрес: Новосибирск
Не за что. Только я все равно в непонятках остался Как это QueryRun на одну и ту же запись несколько раз выпадал, если связанных датасорсов нету. Не могет тако быть, имхо
Старый 30.01.2006, 12:50   #10  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
Цитата:
Сообщение от Aslan
Ок....моделей учёта...два..(бух,налог)..на человеческом языке делаю отчёт по ОС.
Сегодня два учета, завтра может быть больше. Кроме того для одного ОС может быть разное количество моделей, некоторые из них могут быть блокированы, например.

Цитата:
Сообщение от Aslan
Теперь мне надо бы считать начисленный износ налогового учёта и бухгалтерского одновременно одним запросом. Поэтому приходится делать вложенный цикл.
Ваш отчет работал бы гораздо быстрее, если бы Вы построили Query именно одним запросом.

Цитата:
Сообщение от Aslan
При запросе одного ОС отчёт выводит его 3 раза.
В Query у Вас точно не одна таблица RAssetTable!

Цитата:
Сообщение от Aslan
...но искать другого выхода просто нет времени.
Очень жаль.
Старый 30.01.2006, 12:53   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Да. Будем ждать. Я так понял, что есть внешний цикл по RAssetTable, т.е. по кодам основных средств. И есть внутрений по RAssetStandards, т.е. по моделям ОС внутри одного кода. Поскольку моделей две, то и на каждое ОС выводится по две строки с одним и тем же AssetId и с разными AssetStandardId.
Старый 30.01.2006, 15:52   #12  
Artild is offline
Artild
Участник
 
38 / 10 (1) +
Регистрация: 24.01.2003
Адрес: Новосибирск
"Не верю!" (c) Станиславский.
Аслан, Вы ошибаетесь, так быть не может. Скорей всего у вас RAssetStandards уже выбирается в QueryRun. побробуйте полчить запись: queryRunPostioin.get(tableNum(RAssetStandards)).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:50.