Monday, November 17, 2025

Production Order Creation And Posting Service

 public  class  W_ProductionOrderCreationAndPostingService 

     

    public  W_ProductionOrderCreationAndPostingResponseContract  processReport( W_ProductionOrderCreationAndPostingHeaderRequestContract ProductionBookingContract) 

         

    { 

         W_ProductionOrderCreationAndPostingResponseContract     contract; 

         W_ProductionOrderCreationAndPostingLinesRequestContract linecontract; 

        ProdStatusType  ProdStatusType; 

         

        ProjId         existProjid, newProdID; 

        ProdJournalBOM JournalBOM; 

        UnitQty      UnitQty; 

        JournalId journalid; 

  

        List   Pickinglist = ProductionBookingContract.parmProdLines();; 

        ListEnumerator PickingListEnumerator = Pickinglist.getEnumerator(); 

        ListEnumerator PickingListEnumeratorItems = Pickinglist.getEnumerator(); 

         W_ProductionOrderCreationAndPostingResponseContract response = new  W_ProductionOrderCreationAndPostingResponseContract(); 

        try 

        {   //ttsbegin; 

            changecompany(ProductionBookingContract.parmDataAreaId()) 

            { 

                if(this.checkOnholdQty(ProductionBookingContract.parmLocation(),ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmStartQty())) 

                { 

                    throw Error(strFmt("%1 Item not avaliable with quantity %2",ProductionBookingContract.parmItemID(),ProductionBookingContract.parmStartQty())); 

                } 

  

                ExistProjid = this.existProjid(ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmpool(),ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmLocation(),ProductionBookingContract.parmDateLoc()); 

                response.parmPONumber(ExistProjid); 

                if(ExistProjid) 

                {    

                    //while(PickingListEnumeratorItems.moveNext()) 

                    //{ 

                    //    linecontract = PickingListEnumeratorItems.current(); 

                    //    if(this.checkOnholdQty(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse(),linecontract.parmQuantity())) 

                    //    { 

                    //        throw Error(strFmt("%1 Item not avaliable with quantity %2",linecontract.parmItemID(),linecontract.parmQuantity())); 

                    //    } 

                    //} 

  

                    ProdJournalTable ProdJournalTable; 

                    response.parmPONumber(ExistProjid); 

                    ExistProjid = this.ProdStartUP(ExistProjid,ProductionBookingContract.parmStartQty()); 

                    ttsbegin; 

                    select forupdate ProdJournalTable  

                        order by ProdJournalTable.CreatedDateTime desc  

                        where ProdJournalTable.ProdId == ExistProjid 

                        && ProdJournalTable.JournalType == ProdJournalType::Picklist; 

                    if(ProdJournalTable.RecId) 

                    { 

                        ProdJournalTable.selectForUpdate(true); 

                        ProdJournalTable. WStartUpQty =ProductionBookingContract.parmStartQty(); 

                        ProdJournalTable.update(); 

                    } 

                    ttscommit; 

                    if(ProdJournalTable.RecId) 

                    { 

                        while(PickingListEnumerator.moveNext()) 

                        {    

                            linecontract = PickingListEnumerator.current(); 

                           

                                ttsbegin; 

                            select forupdate JournalBOM where JournalBOM.ItemId ==linecontract.parmItemID() 

                                && JournalBOM.JournalId == ProdJournalTable.journalid; 

                            if(JournalBOM.RecId) 

                            {    

                                JournalBOM.selectForUpdate(true); 

                               // JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse()); 

                                JournalBOM. WWeighingQty = linecontract.parmQuantity(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                JournalBOM. WFeedMoisture = linecontract.parmFeedMositure(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                UnitQty =this.prodJournalBOMWriteen(JournalBOM); 

  

                                if( UnitQty) 

                                {    

                                    JournalBOM. WWeighedAvgFeedMoisture  = UnitQty; 

                                } 

                                JournalBOM.InventConsump =  linecontract.parmQuantity(); 

                                JournalBOM.update(); 

                            } 

                            ttscommit; 

                        } 

                        response.parmPlNumberr(ProdJournalTable.JournalId); 

                        this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId); 

  

                        if(!ProdTable::find(ExistProjid). WPackingOrder) 

                        { 

                            this.prodReportFinished(ExistProjid); 

                            select JournalId,JournalType from ProdJournalTable 

                                where ProdJournalTable.ProdId == ExistProjid 

                                && ProdJournalTable.JournalType == ProdJournalType::ReportFinished; 

  

                            if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished && ProdJournalTable.RecId) 

                            { 

                                response.parmRAFnumber(ProdJournalTable.JournalId); 

                            } 

                        } 

                    } 

                    response.parmErrorMessage('Success'); 

  

                } 

                else 

                { 

                    NewProdID = this.CreateProductionOrder( ProductionBookingContract.parmProdQty(), ProductionBookingContract.parmItemID(), ProductionBookingContract.parmLocation(), ProductionBookingContract.parmsite(), 

                                        ProductionBookingContract.parmBOMNumber(), ProductionBookingContract.parmRouteNumber(), ProductionBookingContract.parmpool(), ProductionBookingContract.parmWarehourse(), 

                                        ProductionBookingContract.parmCostcenter(), ProductionBookingContract.parmCostCenterGroup(), ProductionBookingContract.parmDepartment(), ProductionBookingContract.parmIspackingOrder(), 

                                         ProductionBookingContract.parmDateLoc()); 

                    

                    response.parmPONumber(NewProdID); 

                    while(PickingListEnumeratorItems.moveNext()) 

                    { 

                        linecontract = PickingListEnumeratorItems.current(); 

                        if(this.checkOnholdQty(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse(),linecontract.parmQuantity())) 

                        { 

                            throw Error(strFmt("%1 Item not avaliable with quantity %2",linecontract.parmItemID(),linecontract.parmQuantity())); 

                        } 

                    } 

                     

  

                    ProdJournalTable ProdJournalTable; 

                    NewProdID = this.ProdStartUP(NewProdID, ProductionBookingContract.parmStartQty()); 

                    ttsbegin; 

                    select forupdate ProdJournalTable 

                        order by ProdJournalTable.CreatedDateTime desc 

                        where ProdJournalTable.ProdId == NewProdID 

                        && ProdJournalTable.JournalType == ProdJournalType::Picklist; 

                    if(ProdJournalTable.RecId) 

                    { 

                        ProdJournalTable.selectForUpdate(true); 

                        ProdJournalTable. WStartUpQty =ProductionBookingContract.parmStartQty(); 

                        ProdJournalTable.update(); 

                    } 

                    ttscommit; 

                    if(ProdJournalTable.RecId) 

                    { 

                   

                        while(PickingListEnumerator.moveNext()) 

                        {    

                            ttsbegin; 

                            linecontract = PickingListEnumerator.current(); 

                            select forupdate JournalBOM where JournalBOM.ItemId ==linecontract.parmItemID() 

                                && JournalBOM.JournalId == ProdJournalTable.JournalId; 

                            if(JournalBOM.RecId) 

                            {    

                                JournalBOM.selectForUpdate(true); 

                                JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse()); 

                                JournalBOM. WWeighingQty = linecontract.parmQuantity(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                JournalBOM. WFeedMoisture = linecontract.parmFeedMositure(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                UnitQty =this.prodJournalBOMWriteen(JournalBOM); 

  

                                if( UnitQty) 

                                { 

                                    JournalBOM. WWeighedAvgFeedMoisture  = UnitQty; 

                                } 

                                JournalBOM.update(); 

                            } 

                            ttscommit; 

                        } 

                        response.parmPlNumberr(ProdJournalTable.JournalId); 

                        ttsbegin; 

                        this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId); 

                        ttscommit; 

                        if(!ProdTable::find(newProdID). WPackingOrder) 

                        { 

                            this.prodReportFinished(newProdID); 

                            select JournalId, JournalType from ProdJournalTable 

                                where ProdJournalTable.ProdId == newProdID 

                                 && ProdJournalTable.JournalType == ProdJournalType::ReportFinished; 

  

                            if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished && ProdJournalTable.RecId) 

                            { 

                                response.parmRAFnumber(ProdJournalTable.JournalId); 

                            } 

                        } 

                        

                    } 

                    response.parmErrorMessage('Success'); 

  

                } 

            } 

            //ttscommit; 

        } 

        catch(Exception::Error) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::Deadlock) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::UpdateConflict) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::DuplicateKeyException) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::CLRError) 

        { 

            System.Exception  ex = CLRInterop::getLastException(); 

            response.parmErrorMessage(ex.Message); 

        } 

        catch(Exception::ViewDataSourceValidation) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

  

        return response; 

    } 

  

    public boolean checkOnholdQty(str _LocationId,str _Site,str _Item,str _Warehouse, InventQty _qty) 

    { 

        InventDim  inventDim; 

        InventDimParm inventDimParm; 

        InventOnhand  inventOnhand; 

        InventQty   qty;; 

        boolean ret; 

       select  firstonly inventDim  

            where inventDim.InventLocationId == _Warehouse 

            && inventDim.InventSiteId ==_Site 

            && inventDim.wMSLocationId ==_LocationId; 

       

        inventDim = InventDim::findOrCreate(inventDim); 

        inventDimParm.initFromInventDim(inventDim); 

        inventOnhand = InventOnhand::newParameters(_Item, inventDim, inventDimParm); 

        qty = inventOnhand.availPhysical(); 

          

        if(qty<_qty) 

        { 

            ret =true; 

        } 

        return ret; 

    } 

  

    public ProjId existProjid(str _site,str _itemId,str _PoolId,real _qty,str _Warehouse ,str _LocationId,Transdate _date) 

    { 

        ProdTable  prodTable; 

        InventDim  inventDim,inventDimloc; 

        ProdId     ProdId; 

        InventDimId InventDimId; 

        int month,year, sysmonth,sysyear; 

  

        select  firstonly inventDim 

            where inventDim.InventLocationId == _Warehouse 

            && inventDim.InventSiteId ==_Site 

            && inventDim.wMSLocationId ==_LocationId; 

         

        InventDimId = inventDim.inventDimId; 

  

         while  select  firstonly  prodTable 

             order by prodTable.createdDateTime desc,prodTable.ProdId asc 

             where prodTable.InventDimId == InventDimId 

                    && prodTable.ItemId ==_itemId 

                    && prodTable.ProdPoolId == _PoolId 

                    && (prodTable.ProdStatus ==ProdStatus::Created || prodTable.ProdStatus ==ProdStatus::StartedUp) 

                   && (prodTable.QtySched -prodTable.QtyStUp) > _qty 

        { 

            month = DateTimeUtil::month(prodTable.DlvDate); 

            year =DateTimeUtil::year(prodTable.DlvDate); 

            sysmonth =DateTimeUtil::month(_date); 

            sysyear = DateTimeUtil::year(_date); 

            if(month == sysmonth && year== sysyear) 

            { 

                ProdId = prodTable.ProdId; 

  

            } 

        } 

         

        return  ProdId; 

    } 

  

    public ProdId CreateProductionOrder(real _ProdQty,ItemId _item,str _locationId,str _site,str _BOM,str _RouteId,str _poolId,str _Warehouse, str _costCenter, str _CostCenterGroup, str _Department, NoYes _IspackingOrder, transdate _TransDate) 

    { 

        ProdId    prodId; 

        ProdTable prodTableLoc; 

        InventDim inventDim; 

  

        ProdQtySched  productionQty =_ProdQty; 

        ItemId        productionItem = _item; 

        select  firstonly inventDim  

            where inventDim.wMSLocationId == _locationId  

            && inventDim.InventSiteId ==_site 

            && inventDim.InventLocationId ==_Warehouse; 

        InventDimParm inventDimParm; 

  

        InventTable inventTable; 

        inventDim.initValue(); 

        inventTable = InventTable::find(productionItem); 

        //Initialise the base values 

        ttsbegin; 

        prodTableLoc.clear(); 

        prodTableLoc.initValue(); 

        prodTableLoc.ItemId = inventTable.ItemId; 

        prodTableLoc.initFromInventTable(inventTable); 

        prodTableLoc.DlvDate =DateStartMth(_TransDate); 

        prodTableLoc.QtySched = productionQty; 

        prodTableLoc.RemainInventPhysical = prodTableLoc.QtySched; 

        //Set the active bom and route 

        prodTableLoc.BOMId =_BOM ; 

        prodTableLoc.RouteId = _RouteId; 

        prodTableLoc.ProdPoolId =_poolId; 

        prodTableLoc. WPackingOrder=_IspackingOrder; 

        prodTableLoc.DefaultDimension = this.createDefaultDimension(_site,_CostCenterGroup,_costCenter,_Department); 

        prodTableLoc.initRouteVersion(); 

        prodTableLoc.initBOMVersion(); 

        prodTableLoc.InventDimId = inventDim.inventDimId; 

     

      /* prodtable.BOMId = BOMVersion::findActive(prodtable.ItemId, 

            prodtable.BOMDate, 

            prodtable.QtySched, 

            inventDim).BOMId; 

        prodtable.RouteId = RouteVersion::findActive(prodtable.ItemId, 

            prodtable.BOMDate, 

            prodtable.QtySched, 

            inventDim).RouteId;*/ 

        

        prodTableLoc.insert(); 

        ttscommit; 

  

        ProdId = prodTableLoc.ProdId; 

  

        return ProdId; 

    } 

  

    public DimensionDefault createDefaultDimension(str _BusinessUnit, str _CostCenterGroup, str _costCenter,str _Department) 

    { 

        DimensionAttributeValueSetStorage   valueSetStorage = new DimensionAttributeValueSetStorage(); 

        DimensionDefault                    result; 

        int                     i; 

        DimensionAttribute      dimensionAttribute; 

        DimensionAttributeValue dimensionAttributeValue; 

     

        container               conAttr = ["BusinessUnit", "CostCenterGroup", "costCenter","Department"]; 

     

        container               conValue = [_BusinessUnit, _CostCenterGroup, _costCenter,_Department]; 

     

        str                     dimValue; 

     

        for (i = 1; i <= conLen(conAttr); i++) 

        { 

            dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i)); 

            if (dimensionAttribute.RecId == 0) 

            { 

                continue; 

            } 

            dimValue = conPeek(conValue,i); 

            if (dimValue != "") 

            { 

                dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true); 

                valueSetStorage.addItem(dimensionAttributeValue); 

            } 

        } 

     

        result = valueSetStorage.save(); 

        //It reutrns the value of type DimensionDefault 

        return result; 

    } 

  

    public str ProdStartUP(ProdId _prodId, Qty _qty) 

    { 

        ProdParmStartUp ProdParmStartUp; 

        prodTable       prodTable; 

  

        str  prodId    =_prodId ; 

        ProdMultiStartUp prodMultiStartUp = new prodMultiStartUp(); 

        ProdStatusType ProdStatusType; 

        ProdPurch prodPurch = ProdPurch::newProd(); 

  

        ttsbegin; 

        prodTable = ProdTable::find(prodId); 

        prodMultiStartUp = ProdMultiStartUp::construct(new Args()); 

        RunBaseMultiParm::initParm(prodMultiStartUp); 

        prodMultiStartUp.insert(prodTable, prodMultiStartUp.defaultParmBuffer()); 

         

        select  forupdate ProdParmStartUp where ProdParmStartUp.ProdId == prodId; 

        if(ProdParmStartUp.RecId) 

        { 

            prodParmStartUp.StartUpQty          = _qty; 

            prodParmStartUp.PostNowBOM          = NoYes::No; 

            prodParmStartUp.PostNowRoute        = NoYes::No; 

            prodParmStartUp.StartUpProduction   = NoYes::Yes; 

            prodParmStartUp.JournalShowInfo     = NoYes::Yes; 

            ProdParmStartUp.update(); 

           

        } 

        prodTable.status().runStartUp(ProdParmStartUp); 

        ttscommit; 

        return prodId; 

    } 

  

    public  void checkPostProdJournalTablePickingList(JournalId _journalID) 

    { 

        ProdJournalCheckPost ProdJournalCheckPost; 

        ProdJournalTable prodJournalTable = ProdJournalTable::find(_journalID, true); 

  

        // Check/Post journal 

        ProdJournalCheckPost = ProdJournalCheckPostBOM::newJournalCheckPost(true, 

                                                                        true, 

                                                                        JournalCheckPostType::Post, 

                                                                        prodJournalTable.TableId, 

                                                                        prodJournalTable.JournalId); 

        ProdJournalCheckPost.run(); 

    } 

  

    public void prodReportFinished(ProjId _proid) 

    { 

  

        ProdJournalTable        prodJournalTable; 

        ProdJournalBOM          prodJournalBOM; 

        BOM                     bom; 

        ProdBOM                 prodBOM; 

        InventQty               totalDryQty; 

        Args Args; 

        ProdMultiReportFinished ProdMultiReportFinished; 

        prodParmreportFinished prodParmreportFinished,prodParmreportFinishedUPD; 

        Boolean RAF,Ended; 

        ProdTable ProdTable = ProdTable::find(_proid); 

        ttsbegin; 

        Args = new Args(); 

        Args.parmEnum(0); 

        Args.record(prodTable); 

        ProdMultiReportFinished = ProdMultiReportFinished::construct(Args); 

        RunBaseMultiParm::initParm(ProdMultiReportFinished); 

        prodParmreportFinished = ProdMultiReportFinished.defaultParmBuffer(); 

        ProdMultiReportFinished.insert(prodTable,prodParmreportFinished); 

        prodParmreportFinishedUPD = prodParmreportFinished::find(prodParmreportFinished.ParmId,prodParmreportFinished.ProdId,True); 

        if(prodParmreportFinishedUPD) 

        { 

            prodParmreportFinishedUPD.selectForUpdate(true); 

  

            while select prodJournalBOM 

             join prodJournalTable 

             join   prodBOM 

             join    bom 

            where prodJournalBOM.JournalId == prodJournalTable.JournalId && 

            prodJournalTable.JournalType == ProdJournalType::Picklist && 

            prodJournalTable.Posted == NoYes::Yes && 

            prodJournalBOM. WRAFStatus == NoYes::No    && 

            prodJournalBOM.ProdId == ProdTable.ProdId && 

            prodJournalBOM.InventTransId == prodBOM.InventTransId && 

            prodbom.BOMRefRecId == bom.RecId 

            { 

                if (bom. WNotInclude == NoYes::No) 

                { 

                    if (bom. WInFactor) 

                    { 

                        totalDryQty +=  prodJournalBOM. WWeighingQty/bom. WInFactor; 

                    } 

                    else 

                    { 

                        totalDryQty +=  prodJournalBOM. WDryQty; 

                    } 

                } 

            } 

  

            prodParmreportFinishedUPD.QtyGood          = totalDryQty; 

            prodParmreportFinishedUPD.RouteAutoConsump = RouteAutoConsump::Never; 

            prodParmreportFinishedUPD.BOMAutoConsump    = BomAutoConsump::Never; 

            prodParmreportFinishedUPD.AcceptError = Noyes::Yes; 

            prodParmreportFinishedUPD.ReportFinishProd = NoYes::Yes; 

            prodParmreportFinishedUPD.JournalShowInfo  = NoYes::Yes; 

  

            prodParmreportFinishedUPD.update(); 

        } 

        ttscommit; 

        ProdMultiReportFinished.run(); 

        

        //ProdTable prodTable; 

        //ProdMultiReportFinished prodMultiReportFinished; 

  

        //prodTable = ProdTable::find(_proid); 

  

        //prodMultiReportFinished = ProdMultiReportFinished::construct(new Args()); 

        //RunBaseMultiParm::initParm(prodMultiReportFinished); 

        //prodMultiReportFinished.insert(prodTable, prodMultiReportFinished.defaultParmBuffer()); 

  

        //prodMultiReportFinished.run(); 

        

    } 

  

    public Log ErrorMsg() 

  

    { 

        Log errorMessage; 

        SysInfologEnumerator sysInfologEnumerator; 

        sysInfologEnumerator = SysInfologEnumerator::newData(infolog.infologData()); 

        errorMessage =""; 

        While(sysInfologEnumerator.moveNext()) 

        { 

            errorMessage += sysInfologEnumerator.currentMessage(); 

        } 

        return  errorMessage; 

    } 

  

    public UnitQty prodJournalBOMWriteen(ProdJournalBOM  _ProdJournalBOMtable) 

    { 

        InventQualityOrderTable     inventQualityOrderTable; 

        InventQualityOrderLine      inventQualityOrderLine; 

        InventDim                   inventDimQO, inventDimBOM; 

        boolean                     isPassQOAvailable; 

        real                        WTFMPercentage; 

        prodJournalBOM          prodJournalBOM,prodJournalBOMUpd; 

         

  

        prodJournalBOM = _ProdJournalBOMtable; 

        if(prodJournalBOM.InventTransChildType == InventTransChildType::ProdJournalBOM) 

        { 

            while select ItemId,OrderStatus,OrderStatus,QualityOrderId,InventDimId from inventQualityOrderTable 

                    order by VALIDATEDDATETIME desc 

                    where inventQualityOrderTable.ItemId         == prodJournalBOM.ItemId 

                    &&    inventQualityOrderTable.OrderStatus    == InventTestOrderStatus::Pass 

                    &&    (inventQualityOrderTable.ReferenceType == InventTestReferenceType::Purch 

                    ||     inventQualityOrderTable.ReferenceType == InventTestReferenceType::Inventory) 

            { 

                inventDimQO     = InventDim::find(inventQualityOrderTable.InventDimId); 

                inventDimBOM    = InventDim::find(prodJournalBOM.InventDimId); 

                if(   inventDimQO.InventSiteId      == inventDimBOM.InventSiteId 

                   && inventDimQO.InventLocationId  == inventDimBOM.InventLocationId 

                   && inventDimQO.wMSLocationId     == inventDimBOM.wMSLocationId) 

                { 

                    isPassQOAvailable   = true; 

                    break; 

                } 

                else 

                { 

                    continue; 

                } 

            } 

  

            if(isPassQOAvailable) 

            { 

                select QualityOrderId,TestId, WWeightedAvgFeedMoisture from inventQualityOrderLine 

                    where inventQualityOrderLine.QualityOrderId == inventQualityOrderTable.QualityOrderId 

                    &&    (inventQualityOrderLine.TestId        == "Moisture" 

                    ||     inventQualityOrderLine.TestId        == "PFM"); 

  

                if(inventQualityOrderLine) 

                { 

                    if(inventQualityOrderLine. WWeightedAvgFeedMoisture != prodJournalBOM. WWeighedAvgFeedMoisture) 

                    { 

                       return inventQualityOrderLine. WWeightedAvgFeedMoisture; 

                        

                    } 

                } 

            } 

            

        } 

        Return inventQualityOrderLine. WWeightedAvgFeedMoisture; 

    } 

  

    public  JournalId createPickListJournal(ProjId _projid, real _qty, transdate _dlvDate) 

    { 

        ProdJournalCreateBOM prodJournalCreateBOM; 

        ProdJournalTable     ProdJournalTable; 

        ProdJournalBOM       ProdJournalBOM; 

  

        prodJournalCreateBOM = ProdJournalCreateBOM::construct(); 

  

        prodJournalCreateBOM.parmProdId(_projid); 

        prodJournalCreateBOM.parmJournalNameId(ProdJournalName::standardJournalName(ProdJournalType::Picklist, prodJournalCreateBOM.parmProdId())); 

        prodJournalCreateBOM.parmTransDate(_dlvDate); 

        prodJournalCreateBOM.parmBOMAutoConsump(BOMAutoConsump::Never); 

        prodJournalCreateBOM.parmProposalAsConsump(NoYes::No); 

        prodJournalCreateBOM.parmQtyCalc(_qty); 

        prodJournalCreateBOM.parmConsumpProposal(ProdBOMConsumpProposal::Qty); 

  

        prodJournalCreateBOM.run(); 

        ttsbegin; 

        select forupdate ProdJournalTable 

            order by JournalId desc 

            where ProdJournalTable.ProdId == _projid; 

     

                        

        if(ProdJournalTable.RecId) 

        {   ProdJournalTable.selectForUpdate(true); 

            ProdJournalTable. WStartUpQty = _qty; 

            ProdJournalTable.write(); 

        } 

        ttscommit; 

       return ProdJournalTable.JournalId; 

    } 

  

    /// <summary> 

    /// 

    /// </summary> 

    public InventDimId createInventDim(str _LocationId,str _Site,str _Item,str _Warehouse) 

    { 

        InventDim  inventDim; 

        

        select  firstonly inventDim 

            where inventDim.InventLocationId == _Warehouse 

            && inventDim.InventSiteId ==_Site 

            && inventDim.wMSLocationId ==_LocationId; 

       

        inventDim = InventDim::findOrCreate(inventDim); 

        return inventDim.inventDimId; 

    } 

  

 


No comments:

Post a Comment