Execauto MATA265 - Erro na tabela SDA

Senhores Boa Tarde,

Criei o ponto de entrada abaixo, para no momento que a nota for classificada, já ser feito o endereçamento dos itens, porém está gerando o erro em anexo.

Alguém tem ideia do que seja para me ajudar?

Valeu.



User Function MT103FIM()

    Local _aItensSDB := {}
    Local aAreaDAS   := DAS->(FWGetArea())
    Local aAreaSB1   := SB1->(FWGetArea())
    Local aAreaSB2   := SB2->(FWGetArea())
    Local aAreaSB5   := SB5->(FWGetArea())
    Local aAreaSBD   := SDB->(FWGetArea())
    Local aAreaSBE   := SBE->(FWGetArea())
    Local aAreaSBF   := SBF->(FWGetArea())
    Local aAreaSD1   := SD1->(FWGetArea())
    Local aAreaSD8   := SD8->(FWGetArea())
    Local aAreaSDA   := SDA->(FWGetArea())
    Local aCabSDA    := {}
    Local aItSDB     := {}
    Local cTes       := 0
    Local nCols      := 0
    Local nConfirma  := PARAMIXB[2] // Se o usuario confirmou a operação de gravação da NFE
    Local nOpcao     := PARAMIXB[1] // Opção Escolhida pelo usuario no aRotina
    Local nPosCFOP   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_CF"})
    Local nPosData   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_DTDIGIT"})
    Local nPosDoc    := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_DOC"})
    Local nPosForn   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_FORNECE"})
    Local nPosLocal  := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_LOCAL"})
    Local nPosLote   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_LOTECTL"})
    Local nPosProd   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_COD"})
    Local nPosQtde   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_QUANT"})
    Local nPosSerie  := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_SERIE"})
    Local nPosTES    := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_TES"})
    Local nPosLoja   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_LOJA"})
    Local nPosItem   := aScan(aHeader, {|x| Alltrim(Upper(x[2])) == "D1_ITEM"})
    Local nTesEst    := ""
    Local lMsErroAuto := .F.




        if nConfirma == 1 .and. nOpcao == 4 // Usuário confirmou a operação e está classificando a pré-nota.

        For nCols := 1 To Len(acols)
            If !Acols[n,len(aHeader)+1]  //nao pega quando a linha esta deletada

                cTES      := aCols[n][nPosTES]
                nTesEst   := Posicione("SF4",1,FWxFilial("SF4")+cTes,"F4_ESTOQUE")
                cLocaliz  := Posicione("SB1",1,FwxFilial("SB1")+aCols[n,nPosProd],"B1_LOCALIZ")
                cNumSeq   := Posicione('SD1',1,FWxFilial('SD1')+aCols[n,nPosDoc]+aCols[n,nPosSerie]+aCols[n,nPosForn]+aCols[n,nPosLoja]+aCols[n,nPosProd]+aCols[n,nPosItem], 'D1_NUMSEQ' )

                If Alltrim(aCols[n][nPosCFOP]) != "6907" .AND. nTesEst == "S" .AND. cLocaliz == "S" .and. Alltrim(cFilAnt) == "10505010001"

                    cCodigo :=   PADR(ALLTRIM(aCols[n,nPosProd]),TamSx3("D1_COD")[1])
                    nQtde   :=   aCols[n,nPosQtde]
                    dData   :=   aCols[n,nPosData]
                    cLoteCtl :=  PADR(ALLTRIM(aCols[n,nPosLote]),TamSx3("D1_LOTECTL")[1])
                    cLocal :=    PADR(ALLTRIM(aCols[n,nPosLocal]),TamSx3("D1_LOCAL")[1])
                    cDoc   :=    PADR(ALLTRIM(aCols[n,nPosDoc]),TamSx3("D1_DOC")[1])
                    cSerie :=    PADR(ALLTRIM(aCols[n,nPosSerie]),TamSx3("D1_DOC")[1])

                    //Cabecalho com a informação que será endereçado.
                    aCabSDA := {{"DA_PRODUTO" ,cCodigo,Nil},;
                        {"DA_QTDORI"   ,nQtde,Nil},;
                        {"DA_SALDO"    ,nQtde,Nil},;
                        {"DA_DATA"     ,dData,Nil},;
                        {"DA_LOTECTL"  ,cLoteCtl,Nil},;
                        {"DA_LOCAL"    ,cLocal,Nil},;
                        {"DA_DOC"      ,cDoc,Nil},;
                        {"DA_SERIE"    ,cSerie,Nil},;
                        {"DA_NUMSEQ"   ,cNumSeq,Nil}}

                    //Dados do item que será endereçado
                    aItSDB := {{"DB_ITEM"  ,"0001"  ,Nil},;
                        {"DB_ESTORNO"     ," ", Nil},;
                        {"DB_LOCALIZ"  ,"LOTEPDR"   ,Nil},;
                        {"DB_DATA"     ,dData, Nil},;
                        {"DB_QUANT"    ,nQtde,Nil}}
                    aadd(_aItensSDB,aitSDB)

                    //Executa o endere?amento do item
                    MATA265( aCabSDA, _aItensSDB, 3)
                    If lMsErroAuto
                        MostraErro()
                    Else
                        MsgAlert("Processamento Ok!")
                        _aItensSDB := {}
                    Endif
                Endif



            Endif
        Next


    Endif

    FwRestArea(aAreaSD1)
    FwRestArea(aAreaSDA)
    FwRestArea(aAreaSBD)
    FwRestArea(aAreaSB1)
    FwRestArea(aAreaSB2)
    FwRestArea(aAreaSBE)
    FwRestArea(aAreaSBF)
    FwRestArea(aAreaDAS)
    FwRestArea(aAreaSB5)
    FwRestArea(aAreaSD8)

Return

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Olá bom dia,

Este ponto de entrada não é para utilizar acols porque a NF já foi gravada.

Tente percorrer o SD1 ao invés do Acols.

Segue exemplo anexo.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Josuel, Bom DIa.

Obrigado pela resposta, até uma dúvida que tenho se puder me esclarecer, então só consigo manipular o Acols no tempo de execução? Depois que foi gravado devo percorrer a tabela?

Muito Obrigado.