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.
— Jose de Aguiar Ferreira Real Neto 10 de Mar de 2021Segundo 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.
— Everton Alves 10 de Mar de 2021