Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Local aFinalizados := ParamIxb[1]
Local oObjeto      := ParamIxb[2]
Local lRet         := .T.
Local cAliasSC9    := GetNextAlias()
Local aAreaSC6     := SC6->(GetArea())
Local aAreaSC9     := SC9->(GetArea())
Local lDelSC9      := .F.
Local aARREsp      := {}
Local itemFinalizado := 1
Local itemEsp        := 1
Local aSequenciasAlteradas   := {}

...

For itemFinalizado := 1 to Len(aFinalizados)
    cItem    := aFinalizados[itemFinalizado]['item']
    cProduto := aFinalizados[itemFinalizado]['produto']
    cLote    := aFinalizados[itemFinalizado]['lote']
    nQtde    := aFinalizados[itemFinalizado]['quantidade']
    cSequenc := aFinalizados[itemFinalizado]['sequencia']
    cTpEstoq := aFinalizados[itemFinalizado]['tipoEstoque']
    cPedido  := oObjeto:numeroDocumento    cAliasSC9  := GetNextAlias()

    BeginSql Alias cAliasSC9
        SELECT SC9.C9_LOTECTL,
                SC9.C9_LOCAL,
                SC9.C9_NUMLOTE,
                SC9.C9_QTDLIB
        FROM %Table:SC9% SC9
        WHERE SC9.C9_FILIAL = %xFilial:SC9%
        AND SC9.C9_PEDIDO = %Exp:cPedido%
        AND SC9.C9_ITEM = %Exp:cItem%
        AND SC9.C9_PRODUTO = %Exp:cProduto%
        AND SC9.C9_SEQUEN = %Exp:cSequenc%            
        AND SC9.%NotDel%
    EndSql
    dbSelectArea(cAliasSC9)
    dbGoTop()
    if (cAliasSC9)->(Eof())
        (cAliasSC9)->(DbCloseArea())
        return {.F., 'Não foi possível localizar o registro relacionado ao pedido '+Alltrim(cPedido)+;
                                '| Item: '+Alltrim(cItem)+;
                                '| Produto: '+Alltrim(cProduto)} 
    else
        If Empty((cAliasSC9)->C9_LOTECTL)
            nPosEsp := aScan(aARREsp,{|x|AllTrim(x[1]) == AllTrim(cItem) .And.;
                                            AllTrim(x[2]) == AllTrim(cProduto) .And.;
                                            AllTrim(x[3]) == "" .And.;
                                            AllTrim(x[5]) == AllTrim(cSequenc) })
            If nPosEsp == 0
                Aadd(aARREsp,{cItem, cProduto, " ", nQtde, cSequenc, cTpEstoq, (cAliasSC9)->C9_LOCAL})
            Else
                aARREsp[nPosEsp][4] += nQtde
            EndIf
        Else
            If AllTrim((cAliasSC9)->C9_LOTECTL) == AllTrim(cLote)
                nPosEsp := aScan(aARREsp,{|x|AllTrim(x[1]) == AllTrim(cItem) .And.;
                                                AllTrim(x[2]) == AllTrim(cProduto) .And.;
                                                AllTrim(x[3]) == AllTrim(cLote) .And.;
                                                AllTrim(x[5]) == AllTrim(cSequenc) })
                If nPosEsp == 0
                    Aadd(aARREsp,{cItem, cProduto, cLote, nQtde, cSequenc, cTpEstoq, (cAliasSC9)->C9_LOCAL})
                Else
                    aARREsp[nPosEsp][4] += nQtde
                EndIf
            Else
                return {.F., 'Lote não encontrado.'} 
            EndIf
        EndIf
    endif

Next itemFinalizado
(cAliasSC9)->(DbCloseArea())

conout("CONOUT WMSFIMPV - ANTES DO FOR")

For itemEsp := 1 to Len(aARREsp)
    cItem    := aARREsp[itemEsp][1]
    cProduto := aARREsp[itemEsp][2]
    cLoteCtl := aARREsp[itemEsp][3]
    nQtde    := aARREsp[itemEsp][4]
    cSequenc := aARREsp[itemEsp][5]
    cLocal   := aARREsp[itemEsp][7]
    cPedido  := oObjeto:numeroDocumento

    cAliasSC9  := GetNextAlias()
    BeginSql Alias cAliasSC9
        SELECT SC9.C9_SEQUEN,
                SC9.R_E_C_N_O_ RECNOSC9
        FROM %Table:SC9% SC9 //(NOLOCK)
        WHERE SC9.C9_FILIAL = %xFilial:SC9%
        AND SC9.C9_PEDIDO = %Exp:cPedido%
        AND SC9.C9_ITEM = %Exp:cItem%
        AND SC9.C9_PRODUTO = %Exp:cProduto%
        AND SC9.C9_LOTECTL = %Exp:cLoteCtl%
        AND SC9.C9_SEQUEN  = %Exp:cSequenc%
        AND SC9.C9_NFISCAL = '  '
        AND SC9.%NotDel%
        ORDER BY C9_SEQUEN
    EndSql

    conout("<<<<|WMSFIMPV|>>>> Query: "+getlastquery()[2])
    dbSelectArea(cAliasSC9)
    dbGoTop()
    if !(cAliasSC9)->(Eof())

        if !vldSaldo(cProduto, cLocal, nQtde, cLoteCtl)
            (cAliasSC9)->(DbCloseArea())
            return {.F., "Produto não possui saldo de estoque suficiente."} 
        endif

        conout("CONOUT WMSFIMPV - WHILE")
        If (cAliasSC9)->(!Eof()) .And. QtdComp(nQtde) > 0
            conout("CONOUT WMSFIMPV - dentro while")
            SC9->(DbGoTo((cAliasSC9)->RECNOSC9))

            nQtdOrig := SC9->C9_QTDLIB

            /*If QtdComp(nQtdOrig) > QtdComp(nQtde)
                Return .t.
            EndIf*/

            nQtdMaior := nQtde - nQtdOrig
            If nQtdMaior <= 0
                Loop
            EndIf

            // Itens Pedidos de Vendas
            SC6->(DbSetOrder(1))
            SC6->(MsSeek(xFilial("SC6")+SC9->C9_PEDIDO+SC9->C9_ITEM))
            // 2.Estorno do SC9 / Estorno da Liberacao de 6.Estoque/4.Credito do SC9 / WMS
            aLocaliz := {{ "","","","",SC9->C9_QTDLIB,,Ctod(""),"","","",SC9->C9_LOCAL,0}}            MaAvalSC9


("SC9",2,aLocaliz,Nil,Nil,Nil,Nil,Nil,Nil,,.F.,,.F.)
            //-- Atualiza quantidade liberada
            RecLock("SC9",.F.)
            SC9->C9_BLEST   := " "
            SC9->C9_BLCRED  := " "
            //SC9->C9_QTDLIB  := SC9->C9_QTDLIB + nQtdMaior
            SC9->C9_QTDLIB  += nQtdMaior
            SC9->C9_BLWMS   := "01"
            SC9->C9_DATALIB := dDataBase
            SC9->C9_QTDLIB2 := ConvUm(SC9->C9_PRODUTO,SC9->C9_QTDLIB,0,2)
            SC9->C9_LOTECTL := cLoteCtl
            If QtdComp(SC9->C9_QTDLIB) <= 0
                lDelSC9 := .T.
            EndIf
            SC9->(MsUnlock())
            SC9->(DbCommit()) //-- Força enviar para o banco a atualização da SC9

            If WMSSaasPedidoVenda():IsItemInConvergencia(SC9->C9_PEDIDO, SC9->C9_ITEM, SC9->C9_PRODUTO, SC9->C9_SEQUEN)
                aAdd(aSequenciasAlteradas, {;
                    "produto": cProduto,;
                    "item": cItem,;
                    "sequencia": Alltrim(SC9->C9_SEQUEN),;
                    "tipoEstoque": cLocal,;
                    "quantidade":SC9->C9_QTDLIB,;
                    "lote":cLoteCtl;
                    })                    
            EndIf

            RecLock("SC6",.F.)
            // Atualiza item do pedido de venda
            SC6->C6_QTDLIB  := SC9->C9_QTDLIB
            SC6->C6_QTDLIB2 := SC9->C9_QTDLIB2
            SC6->C6_LOTECTL := cLoteCtl
            // Deve calcular tudo o que já possui liberado do pedido de venda
            cAliasSUM  := GetNextAlias()
            BeginSql Alias cAliasSUM
                    SELECT SUM(SC9.C9_QTDLIB) SUM_QTDLIB
                    FROM %Table:SC9% SC9
                    WHERE SC9.C9_FILIAL = %xFilial:SC9%
                    AND SC9.C9_PEDIDO = %Exp:SC9->C9_PEDIDO%
                    AND SC9.C9_ITEM = %Exp:SC9->C9_ITEM%
                    AND SC9.%NotDel%
            EndSql
            If QtdComp((cAliasSUM)->SUM_QTDLIB) > QtdComp(SC6->C6_QTDVEN)
                SC6->C6_QTDVEN := (cAliasSUM)->SUM_QTDLIB
                SC6->C6_UNSVEN := ConvUM(SC6->C6_PRODUTO,SC6->C6_QTDVEN,0,2)
            EndIf
            (cAliasSUM)->(DbCloseArea())
            SC6->(MsUnlock())
            SC6->(DbCommit())

            //aSequenciasAlteradas[1]["quantidade"] := SC9->C9_QTDLIB
            //-- Atualiza Credito
            If !lDelSC9
                aLocaliz := {{ "","","","",SC9->C9_QTDLIB,,Ctod(""),"","","",SC9->C9_LOCAL,0}}
                MaAvalSC9("SC9",1,aLocaliz,Nil,Nil,Nil,Nil,Nil,Nil,,.F.,,.F.)
            EndIf

            // Atualiza DBY com novas quantidades, lotes e data de validade
            oObjeto:updateSequences(aSequenciasAlteradas)
            aSequenciasAlteradas := {}
            
            (cAliasSC9)->(DbSkip())
            nQtdMaior  := 0
        EndIf
    EndIf
    (cAliasSC9)->(DbCloseArea())
Next itemEsp


RestArea(aAreaSC6)
RestArea(aAreaSC9)

...