Problema ExecAuto Sobrepondo item - MATA140

Olá pessoal, estou com um problema na rotina automática do ExecAuto MATA140, onde no documento de entrada o item da nota apresenta somente o ultimo item inserido.

Ao executar o MATA140, utilizo um array com os itens que quero lançar. porém como na imagem ele lança somente o ultimo item do array.

a baixo meu fonte.

Agradeço desde já!

User Function PreNotaAuto(oNfeEntity,aQuebraItem)
    local nOpc       := 3 //Inclusão
    local aCab        := {}
    local nX          := 1
    local lRet        := .T.
    local aLinha      := {}
    local nVlrUnit      := 0
    local nQtdProd       := 0
    local nValorTotal := 0

    Private lMsErroAuto := .F.

    Private oItemNF     := Nil
    Private oPedido     := NFLPurchaseOrderEntity():New()
    Private oLote         := NFLNFLotesEntity():New()

    //CAMPOS CABEÇALHO - GERAR PRÉ-NOTA NFLEGAL
    aCab    := {{"F1_DOC"     , oNfeEntity:getNumDoc()            , NIL},;
                {"F1_SERIE"   , oNfeEntity:getSerie()            , NIL},;
                {"F1_FORNECE" , oNfeEntity:getFornecedor()       , NIL},;
                {"F1_LOJA"    , oNfeEntity:getLoja()             , NIL},;
                {"F1_EMISSAO" , oNfeEntity:getXMLDtEmissao()    , NIL},;
                {"F1_EST"     , "SP"                            , NIL},;
                {"F1_TIPO"    , "N"                                , NIL},;
                {"F1_DTDIGIT" , dDataBase                        , NIL},;
                {"F1_ESPECIE" , "SPED"                            , NIL},;
                {"F1_CHVNFE"  , oNfeEntity:getChave()           , ".T."},;
                {"F1_FRETE"      , 0                                , Nil},;
                {"F1_RECBMTO" , dDataBase                        , Nil}}

    aItens := {}

    //CAMPOS GRID - GERAR PRÉ-NOTA
    For nX := 1 to Len(aQuebraItem)

        dbSelectArea("SD1")
        SD1->(dbSetOrder(1))

        oItemNF := aQuebraItem[nX]

        nVlrUnit    := oItemNF:getXMLVlrUnit()
        nQtdProd     := oItemNF:getXMLQuant()
        nValorTotal := 0

        nValorTotal := nVlrUnit * nQtdProd
        // Pedido de Compra
        oPedido := oItemNF:getPedidos() // Array com os Pedidos

        oLote := oItemNF:getLotes()   // Array Quebra de Lote

        aAdd(aItens,{"D1_ITEM"  ,oItemNF:getXMLItem()     ,NIL})
        aAdd(aItens,{"D1_COD"   ,oItemNF:getERPProd()     ,NIL})
        aAdd(aItens,{"D1_UM"       ,oItemNF:getERPUnMed()      ,Nil}) //oItemNF:getXMLUnMed()
        aAdd(aItens,{"D1_QUANT"    ,oItemNF:getXMLQuant()    ,Nil})
        aAdd(aItens,{"D1_VUNIT"    ,oItemNF:getXMLVlrUnit()  ,Nil})
        //aAdd(aItens,{"D1_TOTAL"    ,oItemNF:getXMLVlrTotal() ,Nil})
        aAdd(aItens,{"D1_TOTAL"    ,nValorTotal ,Nil})
        aAdd(aItens,{"D1_VALDESC",0                        ,".T."})
        aAdd(aItens,{"D1_VALFRE",0                            ,".T."})
        aAdd(aItens,{"D1_RATEIO" ,"2"                      ,Nil})    //Rateio: 1=Sim ;2=Nao.
        aAdd(aItens,{"D1_FCICOD",oItemNF:getXMLFci()        ,Nil})
        aAdd(aItens,{"D1_CC"    ,""                            ,".T."})
        aAdd(aItens,{"D1_CONTA"    ,""                          ,".T."})
        aAdd(aItens,{"D1_ITEMCTA",""                      ,".T."})
        aAdd(aItens,{"D1_CLVL"    ,""                          ,".T."})
        aAdd(aItens,{"D1_LOCAL"    ,"01"                      ,".T."})
        aAdd(aItens,{"D1_NFORI"    ,""                            ,".T."})
        aAdd(aItens,{"D1_SERIORI",""                      ,".T."})
        aAdd(aItens,{"D1_ITEMORI",""                      ,".T."})

        if oPedido <> Nil
            aAdd(aItens,{"D1_PEDIDO"    ,oPedido:getPedido() ,Nil})
            aAdd(aItens,{"D1_ITEMPC"    ,oPedido:getItem()     ,Nil}) 
        EndIf

        if oLote <> Nil
            //aAdd(aItens,{"D1_LOTEFOR",oLote:getLote_Fornecedor() ,Nil}) // Quebra de Lote
            aAdd(aItens,{"D1_LOTECTL",oLote:getLote_Interno()  ,Nil}) // Quebra de Lote
            aAdd(aItens,{"D1_DTVALID",oLote:getData_Validade() ,Nil}) // Quebra de Lote
        EndIf
        aAdd(aLinha,aItens)

    Next nX

    FwMsgRun(,{||MSExecAuto({|x,y,z|  MATA140(x,y,z)} , aCab , aLinha , nOpc) }, "Processando", "Aguarde, Pré-Nota de Entrada (MATA140) ")

    If lMsErroAuto
        mostraerro()
        lRet := .F.
    Else
        FWAlertSuccess("Executado com sucesso!", "Pré-Nota de Entrada lançada: " + oNfeEntity:getNumDoc())
    EndIf
Return(lRet)
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl execauto ou faça a sua própria pergunta.