两步转移 过账

在ACT的方案中没有使用传统的转仓功能,而是在原基础上增加了两个操作,

  1. 发送
  2. 接收

每一次转仓都是先发送到中转仓,然后在接收时将中转仓的物料再次过账到目标仓。

下面代码摘自 类ACT_CreateMovementJournal 方法initFrom2StepTransSend_NJ()

public void initFrom2StepTransSend_NJ(Nj_2StepTransTable _transTable)
{

    InventJournalTable          currJournalTable;
    InventJournalTrans          currJournalTrans;
    NJ_2StepTransLines          currTransLine;
    InventDim                   currFromInventDim;
    InventDim                   currToInventDim;
    InventLocation              inventLocation;
    InventDim                   currInventDim;
    int                         i;
    ;
    ttsbegin;
    inventJournalTable.clear();
    inventJournalTable.initFromInventJournalName(InventJournalName::find(_transTable.JournalNameId));
    inventJournalTable.InventLocationId = _transTable.FromInventLocationId;
    inventJournalTable.WMSLocationId    = _transTable.FromWMSLocationId;
    inventJournalTable.ToLocationId     = _transTable.MidInventLocationId;
    inventJournalTable.ToWmsLocationId  = _transTable.MidWMSLocationId;
    inventJournalTable.Description      = _transTable.TransferId;
    inventJournalTable.ACT_CombineRefId = "@SYS50570";
    inventJournalTable.insert();

    if(inventJournalTable)
    {
        while select currTransLine
                index hint LinesIdx
                where currTransLine.TransferId == _transTable.TransferId
        {
                i++;

                currInventDim                       = InventDim::find(currTransLine.InventDimId);
                currFromInventDim.configId          = currInventDim.configId;
                currFromInventDim.InventSizeId      = currInventDim.InventSizeId;
                currFromInventDim.InventColorId     = currInventDim.InventColorId;
                currFromInventDim.inventBatchId     = currInventDim.InventBatchId;
                currFromInventDim.InventLocationId  = inventJournalTable.InventLocationId;
                currFromInventDim.wMSLocationId     = inventJournalTable.WMSLocationId;
                currFromInventDim                   = InventDim::findOrCreate(currFromInventDim);

                currToInventDim.configId          = currInventDim.ConfigId;
                currToInventDim.InventSizeId      = currInventDim.InventSizeId;
                currToInventDim.InventColorId     = currInventDim.InventColorId;
                currToInventDim.inventBatchId     = currInventDim.InventBatchId;
                currToInventDim.InventLocationId    = inventJournalTable.ToLocationId;
                currToInventDim.wMSLocationId       = inventJournalTable.ToWmsLocationId;
                currToInventDim                     = InventDim::findOrCreate(currToInventDim);

                inventJournalTrans.clear();
                inventJournalTrans.initFromInventJournalTable(inventJournalTable);
                inventJournalTrans.initFromInventTable(InventTable::find(currTransLine.ItemId));
                inventJournalTrans.InventDimId      = currFromInventDim.inventDimId;
                inventJournalTrans.ToInventDimId    = currToInventDim.inventDimId;

                inventJournalTrans.Qty              = currTransLine.DeliverNow;
                inventJournalTrans.ACT_QtySec       = currTransLine.DeliverNowSec;
                inventJournalTrans.LineNum          = i;
                inventJournalTrans.TransDate        = systemDateGet();
                inventJournalTrans.setCostPrice(currinventDim.inventDimId,currInventDim);
                inventJournalTrans.calcCostAmount();
                inventJournalTrans.EmplId           = EmplTable::userId2EmplId(curUserId());
                inventJournalTrans.ACT_ReferenceNo  = _transTable.TransferId;
                inventJournalTrans.insert();

        }
    }

    currJournalTable = InventJournalTable::find(inventJournalTable.JournalId,true);
    currJournalTable.NumOfLines = i;  //记录总行数
    currJournalTable.update();

    ttscommit;

上述代码用初始化InventJournalTable表与InventJournalTrans表行,在InventJournalTable中插入了一条日志

2.接下来就是将这条日志过账,过账使用InventJournalCheckPost类完成。

Public JournalId postingMovementJournal()
{
    InventJournalTable          currJournalTable;
    ;
    if(inventJournalTable)
    {

        try
        {
           
inventJournalPost = InventJournalCheckPost::newPostJournal(inventJournalTable);
            inventJournalPost.run();

        }
        catch(Exception::Error)
        {
            if(inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::Melt ||
               inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::MultiSmelt)
            {
                ACT_MouldSmeltTable::updateTransLineJournal(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
            }
            if(inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::SprueClean)
                ACT_SprueCleanTable::updateTransLineJournal(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
            if(boolMould)
            {
                ACT_MouldTable::updateMouldLines(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
            }

            delete_from currJournalTable
                    where currJournalTable.JournalId == inventJournalTable.JournalId;

            throw error("未过账");
        }
        return inventJournalTable.JournalId;
    }
    return '';
}

posted @ 2012-03-13 14:36  perock  阅读(535)  评论(0编辑  收藏  举报