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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.04.2007, 12:19   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
не срабатывает 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;
}
Вместо SalesTable на самом деле другая таблица, но смысл похожий.
Так вот, в запросе хочу 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. Причина: ЗЫ
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вызов метода из таблицы в операторе while select V777 DAX: Программирование 7 23.04.2008 09:11
Из-за пробелов не срабатывает select vasiliy DAX: Программирование 4 08.12.2006 15:04
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
joined-курсор был использован в другом операторе SELECT raz DAX: Программирование 8 08.01.2004 12:54
select FORUPDATE renat DAX: Программирование 5 10.09.2003 09:45

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:11.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.