14.04.2007, 12:19 | #1 |
Участник
|
не срабатывает select forupdate для joined таблицы?
Dynamics AX 3.0 SP5 KR2
SQL Server 2005 Запрос следующего вида: X++: static void Job37(Args _args) { SalesTable salesReservePhysical; InventTrans inventTransIssue; InventDimParm inventDimParm; InventDim inventDim; InventDim inventDimCriteria; ; ttsbegin; select salesReservePhysical order by CustAccount join forupdate inventTransIssue order by InventTransId where inventTransIssue.TransType == InventTransType::Sales && inventTransIssue.TransRefId == salesReservePhysical.SalesId && //salesReservePhysical.Active == NoYes::Yes && inventTransIssue.itemId == '140' && inventTransIssue.valueOpen == InventTransOpen::Yes && inventTransIssue.statusReceipt == StatusReceipt::None && inventTransIssue.statusIssue == StatusIssue::ReservOrdered && //inventTransIssue.inventTransId != movement.transId() && inventTransIssue.inventRefTransId == '' #inventDimJoin(inventTransIssue.InventDimId,inventDim,inventDimCriteria,inventDimParm,DimIdIdx); while (inventTransIssue) { inventTransIssue.statusIssue = StatusIssue::ReservPhysical; //inventTransIssue.inventDimId = _inventDim.inventDimId; inventTransIssue.update(); next inventTransIssue; } ttscommit; } Так вот, в запросе хочу InventTrans выбрать на обновление. А вот запрос, который получаю в профайлере: Оператор SQL: (SalesTable,InventTrans,InventDim) SELECT A.SALESID,…,A.CREATEDBY,A.RECVERSION,A.RECID,B.ITEMID,B.STATUSISSUE,…,B.RECID FROM SALESTABLE A,INVENTTRANS B,INVENTDIM C WHERE (A.DATAAREAID='dat') AND ((B.DATAAREAID='dat') AND (((((((B.TRANSTYPE=0) AND (B.TRANSREFID=A.SALESID)) AND (B.ITEMID='140')) AND (B.VALUEOPEN=1)) AND (B.STATUSRECEIPT=0)) AND (B.STATUSISSUE=5)) AND (B.INVENTREFTRANSID=' '))) AND ((C.DATAAREAID='dat') AND (C.INVENTDIMID=B.INVENTDIMID)) OPTION(FAST 5) [Идентификатор=5344, Использовано повторно=Нет] Конкретно мой случай: Оператор SQL: (ZCH_SalesReservePhysical,InventTrans,InventDim) SELECT A.PRIORITY,A.ACTIVE,A.SALESID,A.RECVERSION,A.RECID,B.ITEMID,…,B.RECID FROM ZCH_SALESRESERVEPHYSICAL A WITH( NOLOCK),INVENTTRANS B WITH( NOLOCK),INVENTDIM C WITH( NOLOCK) WHERE (A.DATAAREAID='dat') AND ((B.DATAAREAID='dat') AND (((((((((B.TRANSTYPE=0) AND (B.TRANSREFID=A.SALESID)) AND (A.ACTIVE=1)) AND (B.ITEMID='140')) AND (B.VALUEOPEN=1)) AND (B.STATUSRECEIPT=0)) AND (B.STATUSISSUE=5)) AND (B.INVENTTRANSID<>' ЛОТ054717')) AND (B.INVENTREFTRANSID=' '))) AND ((C.DATAAREAID='dat') AND ((C.INVENTDIMID=B.INVENTDIMID) AND (C.INVENTLOCATIONID='КВ-ПЛД-РЦ'))) ORDER BY A.DATAAREAID,A.PRIORITY,B.DATAAREAID,B.INVENTTRANSID OPTION(FAST 18,FORCE ORDER) [Идентификатор=11907, Использовано повторно=Нет] И, собственно вопросы: 1. Как выбрать InventTrans с UPDLOCK, сохранив сортировку в указанном порядке? 2. Почему в InventDim ничего не выбирается (и в Аксапте RecId = 0), хотя в дебаггере явно вижу, что должна были отобраться записи с учетом склада (только одна аналитика активна) ЗЫ. Возможно я просто что-то в упор не вижу? Второй вопрос - чисто из интереса. На самом деле интересует ответ именно на первый Последний раз редактировалось kashperuk; 14.04.2007 в 12:25. Причина: ЗЫ |
|