Erro ao gerar mais de um documento de entrada via execauto AJUDA:FA050NUM

Bom dia, estou tentando gerar mais de um documento de entrada via execauto e estou recebendo o erro a seguir quando gero o segundo documento:


--------------------------------------------------------------------------------
AJUDA:FA050NUM  
Número título já existe para este forne-cedor.

Tabela SF1 10/03/2021 10:24:05
                    - cTipo       :=N
                    - cFormul     :=N
                    - cNFiscal    :=010032021
                    - cSerie      :=1
                    - dDEmissao   :=10/03/2021
                    - cLoja       :=01
                    - cA100For    :=002453 < -- Invalido
                    - cEspecie    :=REC
--------------------------------------------------------------------------------

O primeiro documento é gerado corretamente, porém ao gerar o segundo, aparentemente a numeração que está tentando gerar o título é do primeiro documento.

Por exemplo, gerei o documento "1" e gerou o título para esse documento, então pego a próxima numeração para gerar o próximo documento, no caso "2", e quando gero ocorre que está referenciando ao documento "1".

Já tentei formulário próprio = Sim e Não. Já tentei enviar com F1_FORMUL = Sim e sem numero de documento. Inclusive gerando duas notas para fornecedores diferentes, gera o mesmo erro.

Segue trecho do código.


Begin Transaction

    // reinicia variáveis
    lMsErroAuto := .F.

    _cDoc := GetSxeNum("SF1", "F1_DOC")
    // confirma a sequencia
    ConfirmSX8()

    // dados do cabecalho da NF
    aAdd(_aCabAuto,{"F1_FILIAL" , xFilial("SF1") ,Nil})
    aAdd(_aCabAuto,{"F1_TIPO"   , _cTipoNota      ,Nil})
    aAdd(_aCabAuto,{"F1_FORMUL" , "N"             ,Nil})
    aAdd(_aCabAuto,{"F1_DOC"    , _cDoc          ,Nil})
    aAdd(_aCabAuto,{"F1_SERIE"  , _cSer          ,Nil})
    aAdd(_aCabAuto,{"F1_EMISSAO", dDataBase       ,Nil})
    aAdd(_aCabAuto,{"F1_FORNECE", _cCliente      ,Nil})
    aAdd(_aCabAuto,{"F1_LOJA"   , _cLoja         ,Nil})
    aAdd(_aCabAuto,{"F1_ESPECIE", "REC"          ,Nil})
    aAdd(_aCabAuto,{"F1_CONDPAG", _cCondPag      ,Nil})
    aAdd(_aCabAuto,{"F1_NATUREZ", _cNaturez      ,Nil})
    aAdd(_aCabAuto,{"F1_VEXIDRE", _cReportID     ,Nil})

    // ordena dados conforme dicionário
    _aCabAuto := FWVetByDic(_aCabAuto,'SF1',.F.)

    DbSelectArea("SF1")
    DbSelectArea("SD1")
    MsExecAuto({|x,y,z| MATA103(x,y,z)}, _aCabAuto, _aIteAuto, 3) // 3-inclusao

    // ocorreu erro
    If lMsErroAuto
        RollBackSX8()
        DisarmTransaction()
        MostraErro()
        _lRet := .F.
    Else
        _lRet := .T.
    EndIf
End Transaction

Grato!

Bom dia. Não entendi bem pq desse processo, pois se vc esta usando para importar uma nota para o seu banco de dados o teu campo F1_FORMUL, tem que ser obrigatoriamente N. Por favor explique melhor o pq dessa rotina. Pergunto pq até alguns meses atras era uma rotina minha que efetuava as importações de xml para o P12 e usava como base o que vc esta fazendo.

Segundo essa documentação da Totvs, vc não deve utilizar o controle de transações em rotinas automáticas.
https://centraldeatendimento.totvs.com/hc/pt-br/articles/360020775851-MP-ADVPL-BEGIN-TRANSACTION.

Daniel, verifique se não é sua transação que está fazendo isso, pode ser que ele não esta gravando no confirmSX8 a sequencia, já que vc está incluindo elas em uma transação só, inicie e finalize a transação a cada nota.

Abraço,

Grato pela resposta Felipe. Sim, estou fazendo para cada nota uma transação. Complementei o código, pois faltou essa parte

Eu costumo gerar o número da nota usando a função NxtSx5Nota. Segue abaixo um trecho de exemplo:


cNumero := NxtSx5Nota(cSerie, .T., GetNewPar("MV_TPNRNFS", "1"))  // Gera o número da nota fiscal

AAdd(aCabec, {"F1_FILIAL", xFilial("SF1"), NIL})
AAdd(aCabec, {"F1_TIPO", "N", NIL})
AAdd(aCabec, {"F1_FORMUL", "S", NIL})
AAdd(aCabec, {"F1_EMISSAO", dDataBase, NIL}) // Data de Emissão
AAdd(aCabec, {"F1_ESPECIE", "SPED", NIL})
AAdd(aCabec, {"F1_DOC", cNumero, NIL})
AAdd(aCabec, {"F1_SERIE", cSerie, NIL})
AAdd(aCabec, {"F1_LOJA", ZLB->ZLB_LOJFOR, NIL}) // Loja
AAdd(aCabec, {"F1_FORNECE", ZLB->ZLB_CODFOR, NIL}) // Fornecedor
AAd(aCabec, {"F1_FRETE", nVlrFrete, NIL}) // Frete

Obrigado Everton, sua solução funcionou!!
Complementando a informação, a função NxtSx5Nota() já reserva a numeração quando executada. Impede que a mesma numeração seja utilizada por outra operação durante a execução.
Grato!