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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.07.2008, 21:03   #1  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Поведение notexists
В классе LedgerJournalCheckPost/checkJournal есть такое место где проверяется, существует ли уже транзакция с таким номером ваучера и берется самая поздняя дата
X++:
        checkTransDate = (select maxof(TransDate) from ledgerTrans
                            where ledgerTrans.Voucher like num).TransDate;
Только не учитывается здесь, а была ли собственно эта транзакция отменена или нет.
Чтобы подкорректировать ситуацию, я добавил код
X++:
        select firstonly TransDate, RecId from ledgerTrans
               order by TransDate desc
               notexists join transactionReversalTrans
               where ledgerTrans.Voucher like num &&
                     transactionReversalTrans.RefTableId == tablenum(LedgerTrans) &&
                     transactionReversalTrans.RefRecId   == ledgerTrans.RecId &&
                     transactionReversalTrans.reversed   == NoYes::Yes;
Этот select возвращает запись с совершенно другим номером ваучера.
В трейсере вижу
X++:
declare @p1 int
set @p1=1073742163
declare @p2 int
set @p2=180171631
declare @p5 int
set @p5=16
declare @p6 int
set @p6=1
declare @p7 int
set @p7=1
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 nvarchar(8),@P2 nvarchar(8),@P3 nvarchar(42),
@P4 int,@P5 int',N'SELECT TOP 1 A.TRANSDATE,A.RECID FROM LEDGERTRANS A WHERE (A.DATAAREAID=@P1)
 AND NOT EXISTS (SELECT TOP 1 ''x'' FROM TRANSACTIONREVERSALTRANS B WHERE ((B.DATAAREAID=@P2)
 AND ((((A.VOUCHER LIKE @P3 ESCAPE ''\'' ) AND (B.REFTABLEID=@P4)) AND (B.REFRECID=A.RECID))
 AND (B.REVERSED=@P5)))) ORDER BY A.DATAAREAID DESC,A.TRANSDATE DESC',
 @p5 output,@p6 output,@p7 output,N'itz',N'itz',N'A08-0547',225,1
select @p1, @p2, @p5, @p6, @p7
В результате написал через цикл
X++:
        while select TransDate, RecId, Voucher from ledgerTrans
               order by TransDate desc
               where ledgerTrans.Voucher like num
        {
            if(!ledgerTrans.reversed())
            {
                checkTransDate = ledgerTrans.TransDate;
                break;
            }
        }
Код работает, но хотелось бы знать, почему notexists так себя ведет?

Kernel 4.0.2163.0 SP2
Localization: Eastern Europe
Старый 14.07.2008, 21:21   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Аксапта просто дословно перевела, что вы ей написали.
У вас условие фильтрации like стоит в условиях объединения, вот на сервер так и ушло.

X++:
select firstonly TransDate, RecId from ledgerTrans
               order by TransDate desc
               where ledgerTrans.Voucher like num 
        notexists join transactionReversalTrans
               where transactionReversalTrans.RefTableId == tablenum(LedgerTrans) &&
                     transactionReversalTrans.RefRecId   == ledgerTrans.RecId &&
                     transactionReversalTrans.reversed   == NoYes::Yes;
За это сообщение автора поблагодарили: sgt.Pepper (1).
Старый 15.07.2008, 12:05   #3  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Спасибо, работает :-)
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поведение equal() метода в классе RunOn Server v3.0 SP4 Russland DAX: Программирование 7 15.11.2007 16:12
Поведение свойства Height в отчете KiselevSA DAX: Программирование 0 31.10.2006 15:32
Врем.табл.: поведение в 2-х и 3-х уровневой конф. Ser DAX: Программирование 12 21.12.2005 11:38
Непонятное поведение векторных полей в QueryBuildDataSource. Lemming DAX: Программирование 2 12.05.2005 17:43
Не работают 2 notexists join savel DAX: Программирование 13 23.07.2004 13:49

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

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

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