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.
Lucas, consegue informar aqui quais são os gatilhos que existem no campo C5_CLIENTE?
— Gabriel Landeira 29 de Jan de 2021