ExplicaçãoEsse erro acontece quando é feito alguma operação com variáveis (subtração, adição, multiplicação, divisão, potenciação) de tipos diferentes (caractere, numérico, data, nula), sejam as possíveis causas: - Gatilhos/customizações/parâmetros injetando informações nos campos com natureza diferente do tipo do campo
- Alteração da estrutura padrão do campo/parâmetro
- Customizações
Tópicos de Análise (com tickets de exemplo) Deck of Cards |
---|
startHidden | false |
---|
effectDuration | 0.5 |
---|
id | Custo Médio |
---|
effectType | horizontal |
---|
loopCards | true |
---|
| Card |
---|
default | true |
---|
id | #17743817 |
---|
label | #17743817 |
---|
| Erro Expandir |
---|
title | Ver erro (cabeçalho) |
---|
| Para ver o erro completo, abra o ticket: link aqui: https://totvssuporte.zendesk.com/agent/tickets/17743817 Bloco de código |
---|
firstline | 1 |
---|
title | Trecho |
---|
linenumbers | true |
---|
| THREAD ERROR ([9556], wander.silva, SPON010117778) 07/08/2023 14:40:28
type mismatch on + on A410TUDOK(MATV410A.PRW) 05/05/2023 11:20:05 line : 172 |
Ao ver o cabeçalho, podemos extrair que o erro está acontecendo na função A410TUDOK, no fonte MATV410.PRW na operação de adição entre : Image Added
Entre variáveis. |
Tópicos de Análise Expandir |
---|
title | 1 - Avaliar o retorno dentro da primeira função |
---|
| Note que na linha 172 do fonte, linha 2 abaixo, procuramos a somatória com variáveis que está gerando o erro: Bloco de código |
---|
firstline | 1 |
---|
title | Trecho |
---|
linenumbers | true |
---|
| SED->(DBSetOrder(1))
If SED->(DBSeek(xFilial("SED")+cPVNaturez) .And. !RegistroOk("SED",.F.))
Help(" ",1,"A410NATBLK",,STR0406,1,0) //##"Natureza utilizada encontra-se bloqueada para uso"
lRetorna := .F.
EndIf
EndIf |
Trecho exato: Bloco de código |
---|
firstline | 1 |
---|
title | Trecho |
---|
linenumbers | true |
---|
| If SED->(DBSeek(xFilial("SED")+cPVNaturez) .And. !RegistroOk("SED",.F.)) |
Sabemos então, que na seleção do índice da tabela "SED", onde há "adição" de caracteres, o erro está ocorrendo.
|
Expandir |
---|
title | 2 - Procurar qual variável está recebendo um valor incorreto diferente da outra |
---|
| A - No trecho do fonte separado, podemos isolar, como visto na linha abaixo, a operação onde o problema ocorre: Bloco de código |
---|
firstline | 1 |
---|
title | Trecho |
---|
linenumbers | true |
---|
| xFilial("SED") + cPVNaturez |
B - Temos que verificar o que leva valor ao campo "filial da tabela SED" e valor a variável "cPVNaturez" Por ser uma busca de índice, sabemos que o que leva valar ao: xFilial("SED") é justamente a filial do sistema no cadastro de natureza, conhecido como o campo "ED_FILIAL". Para sabermos o valor colocado no campo cPVNaturez, podemos varrer o fonte analisando as atribuições: Bloco de código |
---|
firstline | 1 |
---|
title | Trecho |
---|
linenumbers | true |
---|
| Local cPVNaturez := ""
If "C5_NATUREZ" $ cMV1DupNat
cPVNaturez := M->C5_NATUREZ
ElseIf "A1_NATUREZ" $ cMV1DupNat
cPVNaturez := Posicione("SA1",1,xFilial("SA1")+M->C5_CLIENTE+M->C5_LOJACLI,"A1_NATUREZ")
Else
cPVNaturez := &(cMV1DupNat)
EndIf
If "C5_NATUREZ" $ cMV2DupNat
cPVNaturez := M->C5_NATUREZ
ElseIf "A2_NATUREZ" $ cMV2DupNat
cPVNaturez := Posicione("SA2",1,xFilial("SA2")+M->C5_CLIENTE+M->C5_LOJACLI,"A2_NATUREZ")
Else
cPVNaturez := &(cMV2DupNat)
EndIf
|
Podemos extrair que: - O valor da variável pode vir dos campos "A2_NATUREZ" (linha 15 acima), "A1_NATUREZ" (linha 6 acima), "MV_1DUPNAT" (linha 3 acima) e "C5_NATUREZ" (linha 4 acima)
- O erro pode vir tanto do conteúdo natural dos campos ou gatilhos acima, quanto de customizações/gatilhos que atribuam valor a esses campos.
- É importante verificar se o campo ED_FILIAL tem a mesma estrutura dos campos e parâmetros acima.
|
Resultado pós análise/interação:"Boa tarde e grato pelo retorno. Pode encerrar o chamado, pois já descobri o motivo, era o parâmetro mesmo."
|
|
|