AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2014, 19:57   #1  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 543 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
AX 2012 CU7, форма SalesCopying, метод CustInvoiceTrans\upDateRemainderCache, некорректный расчет ранее возвращенного кол-ва для заказов отгруженных через функционал отложенного перехода права собственности, также ошибка есть в случае использования функционала проектов.

X++:
void upDateRemainderCache(CustInvoiceTrans _custInvoiceTrans)
{
    SalesQty qty;
    PdsCWInventQty cwQty;
    SalesLine       localSalesLine;
    // <GEERU>
    GoodsInRouteInventTransIdDelivery_RU inventTransIdDelivery_RU;
    // </GEERU>

    if (!creditNoteReturnRemainder.exists(_custInvoiceTrans.RecId))
    {
        localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId);
        [qty, cwQty] = SalesLine::pdsRemainReturnLotQtyAllCreditNote(_custInvoiceTrans.InventTransId, localSalesLine.ProjId);
        // <GEERU>
        if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
        {
            inventTransIdDelivery_RU = _custInvoiceTrans.custInvoiceTrans_RU().InventTransIdDelivery_RU;
        }
        if (inventTransIdDelivery_RU)
        {
            qty = UnitOfMeasureConverter::convert(-SalesLine::qtyDeliveryToCreditNote_RU(inventTransIdDelivery_RU),
                                                  UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.inventTable().inventUnitId()),
                                                  UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.SalesUnit),
                                                  NoYes::Yes,
                                                  InventTable::itemProduct(_custInvoiceTrans.ItemId));

            qty = localSalesLine.type().invoicedInTotal() - qty;
        }
        // </GEERU>
        creditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, qty);
        cwCreditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, cwQty);
    }
}
Вместо строки
X++:
 localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId);
нужно вставить
X++:
 localSalesLine = SalesLine::findInventTransId(_custInvoiceTrans.InventTransId);
Если провалится в метод SalesLine :: pdsRemainReturnLotQtyAllCreditNote, то там тоже можно увидеть аналогичную ошибку
X++:
public server static container pdsRemainReturnLotQtyAllCreditNote(
    InventTransId   _inventTransId,
    ProjId _projId = SalesLine::find(_inventTransId).ProjId)
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: gl00mie (3), S.Kuskov (1).
Старый 23.02.2015, 21:12   #2  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Thumbs up Тестировали норм
\Data Dictionary\Maps\CustVendTrans\exchRateCurToMst

X++:
public ExchRate exchRateCurToMst()
{
    ExchRate combinedRate;
    CustTrans custTrans;
    VendTrans vendTrans;

    switch (this.TableId)
    {
        case tableNum(CustTrans):
            combinedRate = custTrans.exchRateCurToMst();
            break;
        case tableNum(VendTrans):
            combinedRate = vendTrans.exchRateCurToMst();
            break;
        default:
            Debug::assert(false);
    }

    return combinedRate;
}
Хорошо, хоть, вроде, нигде не использовали.
__________________
Axapta non erubescit

Последний раз редактировалось b_nosoff; 23.02.2015 в 21:16.
Старый 10.03.2015, 17:30   #3  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
2012 R3 (думаю в прошлых версиях аналогично)
Если делать лукап по временной таблице на основе постоянной и при этом не вставить никаких записей во времянку, что-то типа
X++:
    InventTable                     inventTableTmp;
    SysTableLookup                  sysTableLookup  = SysTableLookup::newParameters(tableNum(InventTable), _ctrl);

    inventTableTmp.setTmp()
/*
заполняем времянку по какому-то алгоритму, но записей не нашли и ничего не вставили
*/
    sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId));
    sysTableLookup.parmTmpBuffer(inventTableTmp);
    sysTableLookup.performFormLookup();
то вместо ожидаемого пустого лукапа увидим в гриде все записи постоянной таблицы
Берем напильник, чиним класс SysTableLookupBase. Заводим глобальную переменную boolean useTmpBuffer
X++:
Common parmTmpBuffer(Common _buffer = tmpBuffer)
{
    tmpBuffer = _buffer;

    //-->
    if (! prmisDefault(_buffer))
    {
        useTmpBuffer = true;
    }
    //<--

    return tmpBuffer;
}
protected FormRun formRun()
{
    //...строка 55
    //-->
    //if(useLookupValue && !tmpBuffer)
    if(useLookupValue && ! tmpBuffer && ! useTmpBuffer)
    //<--
    {
    }
    //...строка 117
    //-->
    //if (tmpBuffer)
    if (tmpBuffer || useTmpBuffer)
    //<--
}
__________________
Кононов Пётр
За это сообщение автора поблагодарили: gl00mie (5), Kabardian (4).
Старый 10.03.2015, 20:28   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,431 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
было уже Проблема с временной таблице в lookup
За это сообщение автора поблагодарили: pedrozzz (4).
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

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