Boa tarde, pessoal.
Estou desenvolvendo um ExecAuto da MATA410 para pegar os pedidos criados de um serviço web.
Usei o mesmo exemplo que está disponível na documentação da TOTVS, entretanto o sistema retorna alguns erros que não tenho ideia de como resolver.
Ao criar o mesmo pedido com interface, este é salvo normalmente, sem erros. A única coisa que notei são alguns elementos visuais que terei de ajustar, tipo um condicional com alert ao invés de conout, por exemplo.
Abaixo, o fonte que estou usando (até o:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
User Function CAFIF004()
Local cDoc := "" // Número do Pedido de Vendas
Local cA1Cod := "C29368" // Código do Cliente
Local cA1Loja := "01" // Loja do Cliente
Local cB1Cod := "001508 " // Código do Produto
Local cF4TES := "556" // Código do TES
Local cE4Codigo := "001" // Código da Condição de Pagamento
Local cMsgLog := ""
Local cLogErro := ""
Local cFilSA1 := ""
Local cFilSB1 := ""
Local cFilSE4 := ""
Local cFilSF4 := ""
Local nOpcX := 0
Local nX := 0
Local nCount := 0
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local aErroAuto := {}
Local lOk := .T.
Private lMsErroAuto := .F.
Private lAutoErrNoFile := .t.
//****************************************************************
//* Abertura do ambiente
//****************************************************************
ConOut("Inicio: " + Time())
ConOut(Repl("-",80))
ConOut(PadC("Teste de inclusao / alteração / exclusão de 01 pedido de venda com 02 itens", 80))
SA1->(dbSetOrder(1))
SB1->(dbSetOrder(1))
SE4->(dbSetOrder(1))
SF4->(dbSetOrder(1))
cFilSA1 := xFilial("SA1")
cFilSB1 := xFilial("SB1")
cFilSE4 := xFilial("SE4")
cFilSF4 := xFilial("SF4")
//****************************************************************
//* Verificacao do ambiente para teste
//****************************************************************
If SB1->(! MsSeek(cFilSB1 + cB1Cod))
cMsgLog += "Cadastrar o Produto: " + cB1Cod + CRLF
lOk := .F.
EndIf
If SF4->(! MsSeek(cFilSF4 + cF4TES))
cMsgLog += "Cadastrar o TES: " + cF4TES + CRLF
lOk := .F.
EndIf
If SE4->(! MsSeek(cFilSE4 + cE4Codigo))
cMsgLog += "Cadastrar a Condição de Pagamento: " + cE4Codigo + CRLF
lOk := .F.
EndIf
If SA1->(! MsSeek(cFilSA1 + cA1Cod + cA1Loja))
cMsgLog += "Cadastrar o Cliente: " + cA1Cod + " Loja: " + cA1Loja + CRLF
lOk := .F.
EndIf
If lOk
// Neste RDMAKE (Exemplo), o mesmo número do Pedido de Venda é utilizado para a Rotina Automática (Modelos INCLUSÃO / ALTERAÇÃO e EXCLUSÃO).
cDoc := GetSxeNum("SC5", "C5_NUM")
//****************************************************************
//* Inclusao - INÍCIO
//****************************************************************
aCabec := {}
aItens := {}
aLinha := {}
aadd(aCabec, {"C5_NUM", "150000", Nil})
aadd(aCabec, {"C5_TIPO", "N", Nil})
aadd(aCabec, {"C5_CLIENTE", cA1Cod, Nil})
aadd(aCabec, {"C5_LOJACLI", cA1Loja, Nil})
aadd(aCabec, {"C5_LOJAENT", cA1Loja, Nil})
aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
aadd(aCabec, {"C5_VEND1", "94 ", Nil})
aadd(aCabec, {"C5_NATUREZ", "01CX003 ", Nil})
For nX := 1 To 01
//--- Informando os dados do item do Pedido de Venda
aLinha := {}
aadd(aLinha,{"C6_ITEM", StrZero(nX,2), Nil})
aadd(aLinha,{"C6_PRODUTO", cB1Cod, Nil})
aadd(aLinha,{"C6_QTDVEN", 1, Nil})
aadd(aLinha,{"C6_PRCVEN", 1000, Nil})
aadd(aLinha,{"C6_PRUNIT", 1000, Nil})
aadd(aLinha,{"C6_VALOR", 1000, Nil})
aadd(aLinha,{"C6_TES", cF4TES, Nil})
aadd(aLinha,{"C6_OPER","01", Nil})
aadd(aItens, aLinha)
Next nX
nOpcX := 3
MSExecAuto({|a, b, c, d| MATA410(a, b, c, d)}, aCabec, aItens, nOpcX, .F.)
If !lMsErroAuto
ConOut("Incluido com sucesso! " + cDoc)
Else
ConOut("Erro na inclusao!")
aErroAuto := GetAutoGRLog()
For nCount := 1 To Len(aErroAuto)
cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
ConOut(cLogErro)
Next nCount
EndIf
Else
ConOut(cMsgLog)
EndIf
ConOut("Fim: " + Time())
Return(.T.)
Retorno do sistema:
aErroAuto[1]:"Erro no Gatilho : C5_CLIENTE
variable is not an object "
aErroAuto[2]:"AJUDA:A410TOTAL
O valor total informado não confere com o valor calculado.
"
aErroAuto[3]:"Tabela SC5 29/01/2021 17:47:32"
aErroAuto[4]:"Numero - C5_NUM := 150000"
aErroAuto[5]:"Tipo Pedido - C5_TIPO := N"
aErroAuto[6]:"Cliente - C5_CLIENTE := C29368"
aErroAuto[7]:"Loja - C5_LOJACLI := 01"
aErroAuto[8]:"Loja Entrega - C5_LOJAENT := 01"
aErroAuto[9]:"Cond. Pagto - C5_CONDPAG := 001"
aErroAuto[10]:"Vendedor 1 - C5_VEND1 := 94 "
aErroAuto[11]:"Natureza - C5_NATUREZ := 01CX003 "
aErroAuto[12]:"--------------------------------------------------------------------------------"
aErroAuto[13]:"Tabela SC6 29/01/2021 17:47:32"
aErroAuto[14]:"Erro no Item 1"
aErroAuto[15]:"--------------------------------------------------------------------------------"
aErroAuto[16]:"Item - C6_ITEM := 01"
aErroAuto[17]:"Produto - C6_PRODUTO := 001508 "
aErroAuto[18]:"Quantidade - C6_QTDVEN := 1"
aErroAuto[19]:"Prc Unitario - C6_PRCVEN := 1000"
aErroAuto[20]:"Prc Lista - C6_PRUNIT := 1000"
aErroAuto[21]:"Vlr.Total - C6_VALOR := 1000"
aErroAuto[22]:"Tipo Saida - C6_TES := 556"
aErroAuto[23]:"Tp. Operacao - C6_OPER := 01"
aErroAuto[24]:"Erro --> Inconsistencia na Linha de Itens"
aErroAuto[25]:"--------------------------------------------------------------------------------"
Como eu consegui faturar o pedido o gerando com interface, queria saber se alguém tem alguma ideia de como forçar a execução dos gatilhos ou mesmo obter um erro mais detalhado, pois é apresentado que o C5_CLIENTE não é um objeto, mas eu não sei qual dos gatilhos do sistema está criando esse problema.
Desde já, agradeço as respostas.
Qualquer dúvida, podem perguntar.