API REST Post - Erro msexecauto (fina050)

Prezados,

Olá a todos, iniciei a pouco tempo minha trajetória com o Protheus. Estou com o seguinte erro ao tentar passar dados para uma api que utiliza msexecauto na rotina fina050. P

THREAD ERROR ([2639702], TP|HTTPREST|HTTPURI@10|TRUE, 419264B1E0C44BCCA22CB25EF475C5DE) 04/07/2025 18:34:12
type mismatch on compare on ENCHAUTO(MSAUTOPR.PRW) 22/05/2025 09:29:17 line : 361

[TOTVS build: 7.00.240223P-20250326]
Called from FA050INCLU(FINA050.PRX) 30/04/2025 13:36:04 line : 1085
Called from MBROWSEAUTO(MSAUTOPR.PRW) 22/05/2025 09:29:17 line : 86
Called from FINA050(FINA050.PRX) 30/04/2025 13:36:04 line : 652
Called from {|X,Y| FINA050(X,Y)}(XSC3_API.PRW) 04/07/2025 18:22:04 line : 124

Poderiam me ajudar a entender o erro?

Segue trecho do código da API e o Json que estou tentando passar:

Já tentei 3 formas:

  1.   Tirando toda as formas de conversão e passando o json já com os dados formatados
    
         Aadd(aCab, {'E2_FILIAL', oJson['E2_FILIAL'], Nil})
         Aadd(aCab, {'E2_EMISSAO', oJson['E2_EMISSAO'], Nil})
         Aadd(aCab, {'E2_NUM', oJson['E2_NUM'], Nil})
         Aadd(aCab, {'E2_TIPO', oJson['E2_TIPO'], Nil})
         Aadd(aCab, {'E2_NATUREZ', oJson['E2_NATUREZ'], Nil})
         Aadd(aCab, {'E2_FORNECE', oJson['E2_FORNECE'], Nil})
         Aadd(aCab, {'E2_LOJA', oJson['E2_LOJA'], Nil})
         Aadd(aCab, {'E2_VENCTO', oJson['E2_VENCTO'], Nil})
         Aadd(aCab, {'E2_VENCREA', oJson['E2_VENCREA'], Nil})
         Aadd(aCab, {'E2_VALOR', oJson['E2_VALOR'], Nil})  
         Aadd(aCab, {'E2_VLCRUZ', oJson['E2_VLCRUZ'], Nil})           
         Aadd(aCab, {'E2_MOEDA', oJson['E2_MOEDA'], Nil})        
    
        MsExecAuto({|x,y| FINA050(x,y)}, aCab, 3) 
    

Json:
{
“E2_FILIAL”: “011023”,
“E2_EMISSAO”: “20241031”,
“E2_NUM”: “900000002”,
“E2_TIPO”: “NDF”,
“E2_NATUREZ”: "2.29.001 ",
“E2_FORNECE”: “97447494”,
“E2_LOJA”: “0199”,
“E2_VENCTO”: “20241031”,
“E2_VENCREA”: “20241031”,
“E2_VALOR”: 100,
“E2_VLCRUZ”: 100,
“E2_MOEDA”: 1
}

  1. Colocando parametros para conversão dos campos:

         Aadd(aCab, {'E2_FILIAL', oJson['E2_FILIAL'], Nil})
         Aadd(aCab, {'E2_EMISSAO', oJson['E2_EMISSAO'], Nil})
         Aadd(aCab, {'E2_NUM', oJson['E2_NUM'], Nil})
         Aadd(aCab, {'E2_TIPO', oJson['E2_TIPO'], Nil})
         Aadd(aCab, {'E2_NATUREZ', oJson['E2_NATUREZ'], Nil})
         Aadd(aCab, {'E2_FORNECE', oJson['E2_FORNECE'], Nil})
         Aadd(aCab, {'E2_LOJA', oJson['E2_LOJA'], Nil})
    
         /* Datas convertidas para yyyymmdd */
         Aadd(aCab, {'E2_VENCTO', Dtos(CtoD(oJson['E2_VENCTO'])), Nil})
         Aadd(aCab, {'E2_VENCREA', Dtos(CtoD(oJson['E2_VENCREA'])), Nil})
         /* Valores convertidos para inteiro */
         Aadd(aCab, {'E2_VALOR', Int(Val(oJson['E2_VALOR'])), Nil})  
         Aadd(aCab, {'E2_VLCRUZ', Int(Val(oJson['E2_VLCRUZ'])), Nil})           
         Aadd(aCab, {'E2_MOEDA', Int(Val(oJson['E2_MOEDA'])), Nil})  
    

json:
{
“E2_FILIAL”: “011023”,
“E2_EMISSAO”: “04/07/2025”,
“E2_NUM”: “900000002”,
“E2_TIPO”: “NDF”,
“E2_NATUREZ”: "2.29.00 ",
“E2_FORNECE”: “97447494”,
“E2_LOJA”: “0199”,
“E2_VENCTO”: “07/07/2025”,
“E2_VENCREA”: “07/07/2025”,
“E2_VALOR”: “100.00”,
“E2_VLCRUZ”: “100.00”,
“E2_MOEDA”: “1”
}

  1. Passando os valores diretamente no fonte:

         Aadd(aCab, {'E2_FILIAL', "011023", Nil})
         Aadd(aCab, {'E2_EMISSAO', "20250704", Nil})
         Aadd(aCab, {'E2_NUM', "777777779", Nil})
         Aadd(aCab, {'E2_TIPO', "BOL", Nil})
         Aadd(aCab, {'E2_NATUREZ', "2.05.001  ", Nil})
         Aadd(aCab, {'E2_FORNECE', "97447494", Nil})
         Aadd(aCab, {'E2_LOJA', "0199", Nil})
         Aadd(aCab, {'E2_VENCTO', "20250716", Nil})
         Aadd(aCab, {'E2_VENCREA', "20250716", Nil})
         Aadd(aCab, {'E2_VALOR', 150, Nil})  
         Aadd(aCab, {'E2_VLCRUZ', 150, Nil})           
         Aadd(aCab, {'E2_MOEDA', 1, Nil}) 
    

Chega ocorrer as validações de campo, quando por exemplo eu propositalmente altero a E2_NATUREZ para um código não cadastrado na BASE.

{
“errorCode”: 400,
“errorMessage”: “AJUDA:E2_NATUREZ\r\nCampo utilizado para indicar qual será a configuração dos tributos a ser aplicado no título através do cadastro de Naturezas.\r\n\r\nTabela SE2 04/07/2025 20:06:14\r\nNo. Titulo - E2_NUM := 900000002\r\nTipo - E2_TIPO := NDF\r\nNatureza - E2_NATUREZ := 2.29.00 < – Invalido\r\nFornecedor - E2_FORNECE := 97447494 \r\nLoja - E2_LOJA := 0199\r\nDT Emissao - E2_EMISSAO := 04/07/2025\r\nVencimento - E2_VENCTO := 20250707\r\nVencto Real - E2_VENCREA := 20250707\r\nVlr.Titulo - E2_VALOR := 100\r\nMoeda - E2_MOEDA := 1\r\nVlr R$ - E2_VLCRUZ := 100\r\n--------------------------------------------------------------------------------\r\nFalha na gravação automática do Titulo!\r\n”
}

Porém de forma alguma consigo passar os dados quando todos os campos estão validados.

Desde já grato ao tempo de cada um que responderá ao meu questionamento.

#juntossomosmaisfortes

1 curtida

Olá.

Os campos de data (E2_VENCTO, E2_VENCREA, etc) esperam o campo no formato de Date (DD/MM/AAAA), como está sendo enviado Caractere (seja no formato AAAAMMDD ou até mesmo DD/MM/AAAA mas em caractere), o sistema acusa esse erro de “type mismatch” que seria realmente um problema na comparação dos valores.

Acredito que o problema será corrigido preenchendo os campos da seguinte maneira:

Aadd(aCab, {'E2_EMISSAO', CtoD(oJson['E2_EMISSAO']), Nil})
Aadd(aCab, {'E2_VENCTO', CtoD(oJson['E2_VENCTO']), Nil})
Aadd(aCab, {'E2_VENCREA', CtoD(oJson['E2_VENCREA']), Nil})

Mais informações referente ao erro type mismatch: type mismatch on XXXX - TOTVSTEC - TDN

Para descobrir qual é o tipo de uma variável, utilize as funções ValType (para variáveis locais e estáticas: ValType - TOTVSTEC - TDN) ou função Type (para demais tipos de variáveis: Type - TOTVSTEC - TDN).

1 curtida

gtrabach, resolvido irmão!! Muitíssimo obrigado pela ajuda!!