Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Expandir
titleCOUNT field incorrect or syntax error | Campo COUNT incorreto ou erro de sintaxe

Explicação

Esse erro acontece quando é realizado Querys em SQL a comando do sistema e, algum campo utilizado na contagem, exemplo "Count(C6_QTDVEN)" possui algum símbolo de operação em SQL, desordenando o que o sistema entende como começo e fim dos comandos SQL, sejam as possíveis causas:

  • Algum campo utilizado na Query possuir os símbolos: < > ! ' = | + - * / %
  • O campo da Query não existir
  • Customizações de filtro


Há abaixo dois exemplos, o primeiro onde o sistema não exibe a Query no cabeçalho e o outro, onde a Query com erro já é exibida no cabeçalho facilitando a análise.

Tópicos de Análise (com tickets de exemplo)

Deck of Cards
startHiddenfalse
effectDuration0.5
idCusto Médio
effectTypehorizontal
loopCardstrue
Card
defaulttrue
id#18537428
label#18537428

Erro

Expandir
titleVer erro

Para ver o erro completo, abra o ticket: https://totvssuporte.zendesk.com/agent/tickets/18537428

Bloco de código
firstline1
titleTrecho
linenumberstrue
THREAD ERROR ([26024], systh, VLUP-ARKO-APP)   14/11/2023 09:42:08
: Error : 0 (07001) (RC=-1) - [Microsoft][ODBC Driver 17 for SQL Server]Campo COUNT incorreto ou erro de sintaxe
Error : 0 (00000) (RC=-1) - 
 ( From tODBCStatement::SqlBind )
Thread ID [16116]	User [Administrador]	IO [8429]	Tables [142]	MaxTables [143]	Comment [MATA410 - TCPIP - ThreadID(26024)]	SP [ ]	Traced [No]	SQLReplay [No]	InTran [Yes]	DBEnv [MSSQL/PROTHEUS_PRODUCAO_ARKO]	DBThread [(SPID 644,81,1229)]	Started [14/11/2023 09:35:52]	IP [127.0.0.1:1234]	IDLE [ ]	InTransact [89 s.]	Memory [0]	Running [ROP_QUERY2 for 0 s.]	RCV [719983]	SND [3180458]	TCBuild [20220303-20230623]	TCVersion [22.1.1.5]	ARCH [64]	OS [WINDOWS]	BUILD [RELEASE]	
 on MPSYSOPENQUERY(MPSYSOPENTABLES.PRW) 11/08/2023 16:29:12 line : 715


Tópicos de Análise

Expandir
title1 - Encontrar QUERY do erro

Quando ocorre esse erro, por trás há uma Query, vamos procurar pelas chamadas até encontrá-la, podemos dar "Ctrl + F" e buscar por "Query" ou "CQUERY".


Ao encontrar essa "CQUERY"

Bloco de código
firstline1
titleTrecho
linenumberstrue
Local 128:

CQUERY(C) :

SELECT DISTINCT D2_FILIAL,D2_DOC,D2_SERIE,D2_PEDIDO,F2_FRETE,F2_FRETAUT,F2_SEGURO,F2_DESPESA,F2_DESCCAB,F2_VLR_FRT
FROM SF2010 SF2, SD2010 SD2
WHERE  SD2.D2_FILIAL='0101'
AND SD2.D2_PEDIDO = '006023'
AND SD2.D_E_L_E_T_=' '
AND SF2.F2_FILIAL='0101'
AND SF2.F2_DOC = SD2.D2_DOC
AND SF2.F2_SERIE = SD2.D2_SERIE
AND SF2.F2_CLIENTE = SD2.D2_CLIENTE
AND SF2.F2_LOJA = SF2.F2_LOJA
AND SF2.D_E_L_E_T_= ' ' 

Sabemos que não é ela pois os filtros dela estão bem determinados, então o sistema conseguiu concluir a Query, por exemplo "SD2.D2_PEDIDO = '006023'" está bem determinístico, o sistema tentou achar o pedido "006023". Então continuemos.


Trecho exato:

Buscando pela última chamada pré-erro (MPSYSOPENQUERY(MPSYSOPENTABLES.PRW)) conseguimos ver essa CQUERY montada a seguir, note que ela possui falhas, retornando no valor da consulta "?"

Bloco de código
firstline1
titleTrecho
linenumberstrue
STACK MPSYSOPENQUERY(MPSYSOPENTABLES.PRW) 11/08/2023 16:29:12

Param 1: CQUERY(C) :

SELECT B8_FILIAL,B8_QTDORI,B8_PRODUTO,B8_LOCAL,B8_DATA,B8_DTVALID,B8_SALDO,B8_EMPENHO,B8_ORIGLAN,B8_LOTEFOR,B8_CHAVE,B8_LOTECTL,B8_NUMLOTE,B8_QEMPPRE,B8_QACLASS,B8_SALDO2,B8_QTDORI2,B8_EMPENH2,B8_QEPRE2,B8_QACLAS2,B8_DOC,B8_SERIE,B8_CLIFOR,B8_POTENCI,B8_PRCLOT,B8_ITEM,B8_NUMDESP,B8_DFABRIC,B8_ORIGEM,B8_SDOC,B8_LOJA,SB8.R_E_C_N_O_ SB8RECNO
FROM SB8010 SB8
WHERE  SB8.B8_FILIAL= ?
AND SB8.B8_PRODUTO= ?
AND SB8.B8_LOCAL= ?
AND SB8.B8_LOTECTL= ?
AND SB8.B8_SALDO > 0
AND SB8.D_E_L_E_T_=' '
ORDER BY  B8_FILIAL,B8_PRODUTO,B8_LOCAL,B8_LOTECTL,B8_NUMLOTE,B8_DTVALID


Sabemos então, que o campo do erro é algum dos campos acima.


Expandir
title2 - Avaliar se algum campo utilizado na Query possui os símbolos: < > ! ' = | + - * / %

Agora precisamos checar todos os campos acima pelo error.log se algum está com os símbolos indevidos ou se existem.


Começando a procurar pelos campos da expressão "WHERE", ou seja (B8_FILIAL, B8_PRODUTO, B8_LOCAL, B8_LOTECTL e B8_SALDO):

Bloco de código
firstline1
titleTrecho
linenumberstrue
WHERE  SB8.B8_FILIAL= ?
AND SB8.B8_PRODUTO= ?
AND SB8.B8_LOCAL= ?
AND SB8.B8_LOTECTL= ?
AND SB8.B8_SALDO > 0
AND SB8.D_E_L_E_T_=' '


Ao procurar no arquivo aberto da tabela SB8 os campos:


O retorno:


Todos os campos existem porém, o campo B8_LOTECTL está com valores de carácteres indevidos que bagunçam o entendimento do SQL na leitura das chamadas de Query.

O campo com esse valor é a causa do erro. Como o campo já está com o valor gravado, indicamos que o cliente teste com outro lote informado e que, contate seu DBA/Analista In Loco para tratar dentre todas as tabelas, o nome indevido contendo aspas.



Resultado pós análise/interação

Cliente não retornou sobre o erro crucial para a operação, logo, problema resolvido.



Card
defaulttrue
id#18573677
label#18573677

Erro

Expandir
titleVer erro

Para ver o erro completo, abra o ticket: https://totvssuporte.zendesk.com/agent/tickets/18573677

Bloco de código
firstline1
titleTrecho
linenumberstrue
THREAD ERROR ([11320], cpereira, DELTA-NT-HP-001)   17/11/2023 12:25:34
: Error : 0 (07001) (RC=-1) - [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error
Error : 0 (00000) (RC=-1) - 
 ( From tMSSQLConnection::GetQueryFile )
Thread ID [18100]	User [ofiorentino]	IO [4137]	Tables [58]	MaxTables [60]	Comment [MATR690 - TCPIP - ThreadID(11320)]	SP [ ]	Traced [No]	SQLReplay [No]	InTran [No]	DBEnv [MSSQL/HARDY_HOMOLOG]	DBThread [(SPID 213,247)]	Started [17/11/2023 12:24:25]	IP [192.168.1.148:7953]	IDLE [ ]	InTransact [ ]	Memory [0]	Running [ROP_QUERY for 0 s.]	RCV [220515]	SND [723162]	TCBuild [20210202-20220802]	TCVersion [21.1.1.8]	ARCH [64]	OS [WINDOWS]	BUILD [RELEASE]	
SELECT SUM(SB2.B2_QATU) B2_QATU,SUM(SB2.B2_QEMP) B2_QEMP,SUM(SB2.B2_RESERVA) B2_RESERVA,SUM(SB2.B2_SALPEDI) B2_SALPEDI FROM SB2010 SB2 WHERE  B2_FILIAL = '01' AND SB2.B2_COD = ''  'HM001J59F               ' AND B2_LOCAL >= 'ZZ' AND B2_LOCAL <= ? AND SB2.D_E_L_E_T_= ' ' on __EXECSQL(APLIB300.PRW) 23/05/2023 15:13:31 line : 147
  


Tópicos de Análise

Expandir
title1 - Encontrar QUERY do erro

Quando ocorre esse erro, por trás há uma Query com erro e ela foi demonstrada no cabeçalho:

Bloco de código
firstline1
titleTrecho
linenumberstrue
SELECT SUM(SB2.B2_QATU) B2_QATU,SUM(SB2.B2_QEMP) B2_QEMP,SUM(SB2.B2_RESERVA) B2_RESERVA,SUM(SB2.B2_SALPEDI) B2_SALPEDI FROM SB2010 SB2 WHERE  B2_FILIAL = '01' AND SB2.B2_COD = ''  'HM001J59F               ' AND B2_LOCAL >= 'ZZ' AND B2_LOCAL <= ? AND SB2.D_E_L_E_T_= ' '


Sabemos então, que o campo do erro é algum dos campos acima.


Expandir
title2 - Avaliar se algum campo utilizado na Query possui os símbolos: < > ! ' = | + - * / %

Agora precisamos checar todos os campos acima pelo error.log se algum está com os símbolos indevidos ou se existem.


Analisando já podemos ver que o campo B2_COD está com aspas indevidas: B2_COD = ' '    ' HM001J59F            '


Ao procurar no arquivo aberto da tabela SB2 os campos da Query (B2_FILIAL, B2_COD, B2_LOCAL, B2_SALPEDI, B2_RESERVA, B2_QEMP, B2_QATU):

Image Added


O retorno:

Image Added

Image Added

Image Added

Image Added

Image Added

Image Added

Image Added


Podemos ver que todos existem e nenhum está indevido, contudo, na Query foi apontado que o código produto era aproximadamente "HM001J59F" e não "MMR0220025000820CAK25F".


Ao procurar no arquivo do erro inteiro por "MMR0220025000820CAK25F" só há apenas essa ocorrência que menciona esse código, ou seja, indica que o sistema realmente se perdeu no campo de produto indevido com aspas.


Procurando pela tabela que dá o código do produto no sistema (SB1), pelo campo de código (B1_COD), encontramos:

Image Added

Outro produto não visto anteriormente, comprovando ainda mais a tese.


Procurando pelo código aproximado do produto com erro "HM001J59F" chegamos 

Image Added


Ou seja, dentro da Query está sendo encontrado esse produto (B1_COD) com o valor indevido, no caso, com aspas.


Todos os campos existem porém, o campo B1_COD/B2_COD estão com valores de carácteres indevidos que bagunçam o entendimento do SQL na leitura das chamadas de Query.

Os campos com esse tipo de valor é a causa do erro. Como os campos já estão com o valor gravado, indicamos que o cliente teste restringindo o filtro e tratando todos os valores indevidos dos campos B1_COD e B2_COD, para isso, ele deve contatar seu DBA/Analista In Loco para tratar dentre todas as tabelas, os valores indevidos contendo aspas.



Resultado pós análise/interação

Cliente não retornou sobre o erro crucial para a operação, logo, problema resolvido.



...

Expandir
titleInvalid macro source (_____: Error token failed, no valid token)

Explicação

Esse erro acontece qual é alterado a estrutura de dicionário padrão do Protheus, ou foi realizado um filtro de rotina invalido, sejam as possíveis causas:

  • Ordem de campos (X3_ORDEM)
  • Estrutura de campos (Dados da tabela SX3)
  • Estrutura de gatilhos (Dados da tabela SX6)
  • Estrutura de perguntes (Dados da tabela SX1)
  • Filtros com sintaxe errada (nas telas na pesquisa)


Tópicos de Análise (com tickets de exemplo)

Deck of Cards
startHiddenfalse
effectDuration0.5
idCusto Médio
effectTypehorizontal
loopCardstrue
Card
defaulttrue
id#17597701
label#17597701

Erro

Expandir
titleVer erro

Para ver o erro completo, abra o ticket: https://totvssuporte.zendesk.com/agent/tickets/17597701

Bloco de código
firstline1
titleTrecho
linenumberstrue
THREAD ERROR ([22385], Robson, LAPTOP-IOFSC6N4)   02/08/2023 18:23:20
invalid macro source (SSYacc0105e: Error token failed, no valid token):({|a,b,c| FWInitCpo(a,b,c),xRet:=(@!),FWCloseCpo(a,b,c,.T.),xRet }) on FWBUILDFEATURE(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10 line : 5520 


Tópicos de Análise

Expandir
title1 - Avaliar o retorno dentro da primeira função

Note que na linha 2, no valor do atributo "xRet" há o retorno "@!" indicando que isso foi o que o sistema recebeu e, depois houve o erro:

Bloco de código
firstline1
titleTrecho
linenumberstrue
THREAD ERROR ([22385], Robson, LAPTOP-IOFSC6N4)   02/08/2023 18:23:20
invalid macro source (SSYacc0105e: Error token failed, no valid token):({|a,b,c| FWInitCpo(a,b,c),xRet:=(@!),FWCloseCpo(a,b,c,.T.),xRet }) on FWBUILDFEATURE(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10 line : 5520


Trecho exato:

Sabemos então, que o conteúdo (variável/pergunte/campo/filtro) que gerou o erro possui o formato "@!".


Expandir
title2 - Procurar em cada função da pilha, indícios do que gerou o erro (pergunte/campo/tabela/filtro)
Bloco de código
firstline1
titleTrecho
linenumberstrue
Called from FORMVIEWFIELD(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10 line : 1004
Called from FORMSTRUTABLE(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10 line : 433
Called from FWFORMSTRUCT(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10 line : 3985
Called from FWMBROWSE:LOADCOLUMNS(FWMBROWSE.PRW) 04/04/2023 15:05:10 line : 1796
Called from FWMBROWSE:ACTIVATE(FWMBROWSE.PRW) 04/04/2023 15:05:10 line : 562
Called from FWMARKBROWSE:ACTIVATE(FWMARKBROWSE.PRW) 04/04/2023 15:05:10 line : 267
Called from FWMARKBROWSE(MSLIB.PRW) 04/04/2023 15:05:10 line : 10784
Called from MARKBROWSEF(MSLIB.PRW) 04/04/2023 15:05:10 line : 5783
Called from MARKBROW(MSLIB.PRW) 04/04/2023 15:05:10 line : 5763
Called from MATA500(MATA500.PRX) 17/03/2022 18:01:27 line : 129
Called from __EXECUTE(APLIB090.PRW) 04/04/2023 15:05:08 line : 721
Called from MDIEXECUTE(APLIB260.PRW) 04/04/2023 15:05:08 line : 924  


A - Buscando pela função da primeira pilha "FORMVIEWFIELD(PROTHEUSFUNCTIONMVC.PRX)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
STACK FWFORMSTRUCT(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10

  Param 1: NTYPE(N) : 3
  Param 2: CALIASSX2(C) : SC6
  Param 3: BSX3(U) : NIL
  Param 4: LVIEWUSADO(L) : .F.
  Param 5: LVIRTUAL(L) : .T.
  Param 6: LFILONVIEW(L) : .F.
  Param 7: CPROGRAM(C) : MATA500
  Local 1: NTYPE(N) :3
  Local 2: CALIASSX2(C) :SC6
  Local 3: BSX3(U) :NIL
  Local 4: LVIEWUSADO(L) :.F.
  Local 5: LVIRTUAL(L) :.T.
  Local 6: LFILONVIEW(L) :.F.
  Local 7: CPROGRAM(C) :MATA500
  Local 8: AAUX(A) :
  Local 9: OSTRUCT(U) :NIL

Conseguimos extrair:

  • O programa onde deu o erro é o MATA500 pelo parâmetro 7.
  • A tabela do erro posicionada é a tabela SC6 pelo parâmetro 2.


B - Buscando pela segunda função da pilha "FORMVIEWFIELD(PROTHEUSFUNCTIONMVC.PRX)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
STACK FORMSTRUTABLE(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10

  Param 1: CALIASSX2(C) : SC6
  Param 2: BSX3(U) : NIL
  Param 3: LVIEWUSADO(L) : .F.
  Param 4: LVIRTUAL(L) : .T.
  Param 5: LFILONVIEW(L) : .F.
  Param 6: NTYPE(N) : 3
  Local 1: CALIASSX2(C) :SC6
  Local 2: BSX3(U) :NIL
  Local 3: LVIEWUSADO(L) :.F.
  Local 4: LVIRTUAL(L) :.T.
  Local 5: LFILONVIEW(L) :.F.
  Local 6: NTYPE(N) :3
  Local 7: AAREA(A) :
  Local 8: AAUX(A) :
  Local 9: AGROUPS(A) :
  Local 10: ARETORNO(A) :
  Local 11: CAUX(C) :
  Local 12: LHASXXA(L) :.F.
  Local 13: LOLDSET(L) :.F.
  Local 14: LUSADO(L) :.T.
  Local 15: LUSADOMODEL(L) :.T.
  Local 16: NPOS(N) :0
  Local 17: NX(N) :0
  Local 18: NY(N) :0
  Local 19: CQUERY(C) :INSERT INTO dbo.##TMPSC00_122 (X3_CAMPO) SELECT XAM_FIELD FROM XAM010 XAM WHERE  XAM.XAM_FIELD IN (SELECT SX3.X3_CAMPO FROM SX3010 SX3 WHERE  SX3.X3_ARQUIVO = 'SC6' AND SX3.D_E_L_E_T_ = ' ' ) AND XAM.XAM_ANONIM = '1' AND XAM.D_E_L_E_T_=' ' AND NOT EXISTS (SELECT XAMSUB.R_E_C_N_O_ FROM XAM010 XAMSUB WHERE  XAMSUB.XAM_FIELD = XAM.XAM_FIELD AND XAMSUB.XAM_ANONIM = '2' AND XAMSUB.D_E_L_E_T_=' ')   ORDER BY  XAM_FIELD
  Local 20: CALIASQ(C) :SCGN0000ED
  Local 21: LINDB(L) :.T.
  Local 22: LEMPTYBSX3(L) :.T.
  Local 23: LRETCACHE(L) :.F.
  Local 24: LLOCSX2(L) :.F.
  Local 25: AMDLFIELDS(A) :
  Local 26: AVIEWFIELDS(A) :
  Local 27: ARETURN(U) :NIL
  Local 28: NLENX3(N) :10
  Local 29: CX3CBOXANONYM(C) :SELECT XAM_FIELD FROM XAM010 XAM WHERE  XAM.XAM_FIELD IN (SELECT SX3.X3_CAMPO FROM SX3010 SX3 WHERE  SX3.X3_ARQUIVO = 'SC6' AND SX3.D_E_L_E_T_ = ' ' ) AND XAM.XAM_ANONIM = '1' AND XAM.D_E_L_E_T_=' ' AND NOT EXISTS (SELECT XAMSUB.R_E_C_N_O_ FROM XAM010 XAMSUB WHERE  XAMSUB.XAM_FIELD = XAM.XAM_FIELD AND XAMSUB.XAM_ANONIM = '2' AND XAMSUB.D_E_L_E_T_=' ')   ORDER BY  XAM_FIELD
  Local 30: BSEEKANONYM(B) :{|CFIELD| (CANONYMALIAS)->(DBSEEK(CFIELD))}
  Local 31: LTEMPTABLE(L) :.T.
  Local 32: CANONYMALIAS(C) :SCGN0000EF

Conseguimos extrair:

  • A tabela do erro posicionada é a tabela SC6 pelo parâmetro 1.


C - Buscando pela terceira função da pilha "FORMVIEWFIELD(PROTHEUSFUNCTIONMVC.PRX)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
STACK FORMVIEWFIELD(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10

  Param 1: CALIASALT(C) : SCGN0000ED
  Local 1: CALIASALT(C) :SCGN0000ED
  Local 2: ARETORNO(A) :
  Local 3: NMAXLENCOMBO(N) :0
  Local 4: NINITCBOX(N) :0
  Local 5: NX(N) :0
  Local 6: ACOMBO(A) :
  Local 7: ATMP(A) :
  Local 8: BPICTVAR(U) :NIL
  Local 9: CX3CBOX(C) :      

Conseguimos extrair:

  • Nenhuma pista.


D - Buscando pela quarta função da pilha "FWBUILDFEATURE(PROTHEUSFUNCTIONMVC.PRX)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
STACK FWBUILDFEATURE(PROTHEUSFUNCTIONMVC.PRX) 04/04/2023 15:05:10

  Param 1: NTIPO(N) : 4
  Param 2: CEXPRADVPL(C) : @!                  
  Local 1: NTIPO(N) :4
  Local 2: CEXPRADVPL(C) :@!                  
  Local 3: CAUX(C) :FWInitCpo(a,b,c),xRet:=(@!),FWCloseCpo(a,b,c,.T.),xRet
  Local 4: XRET(U) :NIL 

OBSERVAÇÃO: De longe, a pilha mais clara até agora, mostra o cabeçalho do erro e o formato do retorno do erro "@!", o erro está aqui, mas não foi clareado para nós onde exatamente.

Conseguimos extrair:

  • A validação do erro
  • O formato do retorno do erro ("xRet")


E - Buscando pela quinta função da pilha "STACK { | E | ERRORDIALOG( E )}", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
 Param 1: E(O) : O
  Local CodeBlock 1: E(O) :O

Conseguimos extrair:

  • Nenhuma pista


F - Buscando pela sexta função da pilha "STACK { | E | ERRORDIALOG( E ) }(APLIB240.PRW)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
  Param 1: E(O) : O
  Local 1: E(O) :O
  Local 2: LINSIGA(L) :.T.
  Local 3: CMSG(U) :NIL
  Local 4: NI(U) :NIL
  Local 5: CX(U) :NIL
  Local 6: CERROR(U) :NIL
  Local 7: LSKIPERROR(L) :.F.
  Local 8: AOBJLOG(A) :
  Local 9: NX(U) :NIL
  Local 10: URETURN(U) :NIL

Conseguimos extrair:

  • Nenhuma pista


E - Buscando pela sétima função da pilha "ERRORDLG(APLIB240.PRW)", obtemos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
 Param 1: E(O) : O
  Local CodeBlock 1: E(O) :O

Conseguimos extrair:

  • Nenhuma pista


OBSERVAÇÃO: Nesse caso, a análise das pilhas foi importante para nos certificar que o erro estava no formato (@!) e na tabela (SC6) no processo da rotina (MATA500), mas o erro específico não foi localizado ainda.


Expandir
title3 - Localizar a última tabela olhada pelo sistema antes do erro

No error.log digite " **", ou seja, espaço-asterisco-asterisco e procure. Irá aparecer onde o documento levar, a ultima parada do sistema, importante para localizar o que ele foi gravar e não conseguiu. Obtemos esse resultado:

Bloco de código
firstline1
titleTrecho
linenumberstrue
 _SC00; Rdd:TOPCONN; Alias:SCGN0000EF; Filter :; Recno:5000; Total Recs:0; Order:1
     Index (0) :**SC0001  X3_CAMPO
    Field 1: X3_CAMPO(C) :      


OBSERVAÇÃO: Nesse caso, não foi útil para nós, pois a última parada foi em uma tabela temporária "**SC0001", seguimos analisando.

Expandir
title4 - Localizar campo na tabela SX3

Simboliza o último campo visto pelo sistema antes do erro, ao procurar no error.log por "SX3" temos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
SX3010; Rdd:TOPCONN; Alias:SX3; Filter :; Recno:112953; Total Recs:166831; Order:1
     Index (0) :**SX30101  X3_ARQUIVO+X3_ORDEM
     Index (1) :SX30102  X3_CAMPO
     Index (2) :SX30103  X3_GRPSXG+X3_ARQUIVO+X3_ORDEM
     Index (3) :SX30104  X3_ARQUIVO+X3_FOLDER+X3_ORDEM
     Index (4) :SX30105  X3_ARQUIVO+X3_IDXFLD+X3_CAMPO
    Field 1: X3_ARQUIVO(C) :SC6
    Field 2: X3_ORDEM(C) :AC
    Field 3: X3_CAMPO(C) :C6_SOLCOM 
    Field 4: X3_TIPO(C) :C
    Field 5: X3_TAMANHO(N) :6
    Field 6: X3_DECIMAL(N) :0
    Field 7: X3_TITULO(C) :Num. Solicit
    Field 8: X3_TITSPA(C) :Num. Solicit
    Field 9: X3_TITENG(C) :Req.No.     
    Field 10: X3_DESCRIC(C) :Número da Solicitação de 
    Field 11: X3_DESCSPA(C) :Numero de Solicitud de   
    Field 12: X3_DESCENG(C) :Number of Request of     
    Field 13: X3_PICTURE(C) :@!                                           
    Field 14: X3_VALID(C) :                                                                                                                                
    Field 15: X3_USADO(C) :x       x       x       x       x       x       x       x       x       x       x       x       x       x       x x     
    Field 16: X3_RELACAO(C) :                                                                                                                                
    Field 17: X3_F3(C) :      
    Field 18: X3_NIVEL(N) :1
    Field 19: X3_RESERV(C) :    x           
    Field 20: X3_CHECK(C) F : 
    Field 21: X3_TRIGGER(C) : 
    Field 22: X3_PROPRI(C) : 
    Field 23: X3_BROWSE(C) : 
    Field 24: X3_VISUAL(C) : 
    Field 25: X3_CONTEXT(C) : 
    Field 26: X3_OBRIGAT(C) :        
    Field 27: X3_VLDUSER(C) :                                                                                                                                
    Field 28: X3_CBOX(C) :                                                                                                                                
    Field 29: X3_CBOXSPA(C) :                                                                                                                                
    Field 30: X3_CBOXENG(C) :                                                                                                                                
    Field 31: X3_PICTVAR(C) :                    
    Field 32: X3_WHEN(C) :                                                            
    Field 33: X3_INIBRW(C) :                                                                                
    Field 34: X3_GRPSXG(C) :   
    Field 35: X3_FOLDER(C) : 
    Field 36: X3_PYME(C) :S
    Field 37: X3_CONDSQL(C) :                                                                                                                                                                                                                                                          
    Field 38: X3_CHKSQL(C) :                                                                                                                                                                                                                                                          
    Field 39: X3_IDXSRV(C) :N
    Field 40: X3_ORTOGRA(C) : 
    Field 41: X3_IDXFLD(C) :N
    Field 42: X3_TELA(C) :               
    Field 43: X3_PICBRV(C) :                                                  
    Field 44: X3_AGRUP(C) :   
    Field 45: X3_POSLGT(C) :1
    Field 46: X3_MODAL(C) :2

Conseguimos extrair:

  • O campo possui o formato do erro "@!"
  • O campo é padrão e tem suas informações (campos da SX3) no padrão.
  • O campo que antecede erro está na SC6.
  • O campo está com a ordem errada (X3_ORDEM = AC)


Pela natureza do campo, o pedido de venda proveniente veio de uma solicitação de compras, podemos ver qual valor ele carregava no sistema procurando por "C6_SOLCOM", temos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
    Field 137: C6_SOLCOM(C) :        

Nesse caso do erro, então, ele estava vazio no momento.


Após visualizar o campo, temos de verificar pois já podem ser a causa do erro:

  • É padrão?
  • Os campos da SX3 estão no padrão?
  • O campo está na ordenação (X3_ORDEM) certa?

Nessa etapa pode ser comparado o seu ambiente com o do cliente.




Expandir
title5 - Localizar parâmetro na tabela SX6

Simboliza o último parâmetro visto pelo sistema antes do erro, ao procurar no error.log por "SX6" temos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
SX6010; Rdd:TOPCONN; Alias:SX6; Filter :; Recno:9266; Total Recs:10702; Order:1
     Index (0) :**SX60101  X6_FIL+X6_VAR
    Field 1: X6_FIL(C) :        
    Field 2: X6_VAR(C) :MV_USAX3BR
    Field 3: X6_TIPO(C) :C
    Field 4: X6_DESCRIC(C) :Se "S" indica que nao será validado o X3_USADO do 
    Field 5: X6_DSCSPA(C) :"S" indica que no se validara el X3_USADO del     
    Field 6: X6_DSCENG(C) :When "S", the X3_USADO assigned to the field will 
    Field 7: X6_DESC1(C) :campo para exibicao no browse.                    
    Field 8: X6_DSCSPA1(C) :campo para exhibicion en el browse.               
    Field 9: X6_DSCENG1(C) :not be validated for displaying in the browser.   
    Field 10: X6_DESC2(C) :                                                  
    Field 11: X6_DSCSPA2(C) :                                                  
    Field 12: X6_DSCENG2(C) :                                                  
    Field 13: X6_CONTEUD(C) :S                                                                                                                                                                                                                                                         
    Field 14: X6_CONTSPA(C) :S                                                                                                                                                                                                                                                         
    Field 15: X6_CONTENG(C) :S                                                                                                                                                                                                                                                         
    Field 16: X6_PROPRI(C) :S
    Field 17: X6_PYME(C) :S
    Field 18: X6_VALID(C) :                                                                                                                                
    Field 19: X6_INIT(C) :                                                                                                                                
    Field 20: X6_DEFPOR(C) :S                                                                                                                                                                                                                                                         
    Field 21: X6_DEFSPA(C) :S                                                                                                                                                                                                                                                         
    Field 22: X6_DEFENG(C) :S                                                                                                                                                                                                                                                         
    Field 23: X6_EXPDEST(C) :1

Conseguimos extrair:

  • O último parâmetro olhado pelo sistema foi o MV_USAX3BR
  • Está no padrão
  • Os campos do parâmetro estão no padrão
  • O valor do parâmetro está "Default" no padrão


OBSERVAÇÃO: Logo, a provável causa do erro não é esse parâmetro.

Expandir
title6 - Localizar pergunte na tabela SX1

Simboliza o último pergunte visto pelo sistema antes do erro, ao procurar no error.log por "SX1" temos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
  SX1010; Rdd:TOPCONN; Alias:SX1; Filter :; Recno:32746; Total Recs:55784; Order:1
     Index (0) :**SX10101  X1_GRUPO+X1_ORDEM
     Index (1) :SX10102  X1_IDFIL+X1_ORDEM
    Field 1: X1_GRUPO(C) :MTA510    
    Field 2: X1_ORDEM(C) :01
    Field 3: X1_PERGUNT(C) :Taxa deflacao ICMS ?          
    Field 4: X1_PERSPA(C) :¿Tasa Deflac. ICMS ?          
    Field 5: X1_PERENG(C) :ICMS Deflation Rate ?         
    Field 6: X1_VARIAVL(C) :mv_ch5
    Field 7: X1_TIPO(C) :N
    Field 8: X1_TAMANHO(N) :5
    Field 9: X1_DECIMAL(N) :2
    Field 10: X1_PRESEL(N) :0
    Field 11: X1_GSC(C) :G
    Field 12: X1_VALID(C) :                                                            
    Field 13: X1_VAR01(C) :mv_par01       
    Field 14: X1_DEF01(C) :               
    Field 15: X1_DEFSPA1(C) :               
    Field 16: X1_DEFENG1(C) :               
    Field 17: X1_CNT01(C) : 0.00                                                       
    Field 18: X1_VAR02(C) :               
    Field 19: X1_DEF02(C) :               
    Field 20: X1_DEFSPA2(C) :               
    Field 21: X1_DEFENG2(C) :               
    Field 22: X1_CNT02(C) :                                                            
    Field 23: X1_VAR03(C) :               
    Field 24: X1_DEF03(C) :               
    Field 25: X1_DEFSPA3(C) :               
    Field 26: X1_DEFENG3(C) :               
    Field 27: X1_CNT03(C) :                                                            
    Field 28: X1_VAR04(C) :               
    Field 29: X1_DEF04(C) :               
    Field 30: X1_DEFSPA4(C) :               
    Field 31: X1_DEFENG4(C) :               
    Field 32: X1_CNT04(C) :                                                            
    Field 33: X1_VAR05(C) :               
    Field 34: X1_DEF05(C) :               
    Field 35: X1_DEFSPA5(C) :               
    Field 36: X1_DEFENG5(C) :          
    Field 37: X1_CNT05(C) :                                                            
    Field 38: X1_F3(C) :      
    Field 39: X1_PYME(C) :S
    Field 40: X1_GRPSXG(C) :   
    Field 41: X1_HELP(C) :              
    Field 42: X1_PICTURE(C) :                                        
    Field 43: X1_IDFIL(C) :      
  SXK010; Rdd:TOPCONN; Alias:SXK; Filter :; Recno:5000; Total Recs:0; Order:2
     Index (0) :SXK0101  XK_GRUPO+XK_SEQ+XK_IDUSER
     Index (1) :**SXK0102  XK_IDUSER+XK_GRUPO+XK_SEQ
    Field 1: XK_GRUPO(C) :          
    Field 2: XK_SEQ(C) :  
    Field 3: XK_IDUSER(C) :       
    Field 4: XK_CONTEUD(C) :                                                                                                                                                                                                                                                          
    Field 5: XK_FORM(C) :                     

Conseguimos extrair:

  • O último parâmetro olhado pelo sistema foi do grupo "MTA510", de ordenação 1.
  • Está no padrão
  • Os campos do parâmetro estão no padrão
  • O valor do parâmetro está "Default" no padrão


OBSERVAÇÃO: Logo, a provável causa do erro não é esse pergunte.

Expandir
title7 - Localizar pontos de entrada influentes

Simboliza as customizações ativadas pelo sistema antes do erro ocorrer, basta procuramos pelos valores "XX6_CODFUN" e "XX7_CODFUN", fazendo isso temos:

Bloco de código
firstline1
titleTrecho
linenumberstrue
 XX6010; Rdd:TOPCONN; Alias:XX6; Filter :; Recno:15; Total Recs:23; Order:1
     Index (0) :**XX60101  XX6_CODFUN+XX6_TYPE
     Index (1) :XX60102  XX6_DESC+XX6_CODFUN
    Field 1: XX6_CODFUN(C) :A097APRF
    Field 2: XX6_TYPE(C) :1
    Field 3: XX6_DESC(C) :Automaticamente adicionado pelo sistema.-29/08/2022         
  XX7010; Rdd:TOPCONN; Alias:XX7; Filter :; Recno:15; Total Recs:23; Order:1
     Index (0) :**XX70101  XX7_CODFUN+XX7_TYPE+XX7_FILIAL
     Index (1) :XX70102  XX7_TYPE+XX7_CODFUN+XX7_FILIAL
    Field 1: XX7_CODFUN(C) :A097APRF
    Field 2: XX7_TYPE(C) :1
    Field 3: XX7_FILIAL(C) :        
    Field 4: XX7_STATUS(C) :1
    Field 5: XX7_DEFRET(C) :                                        

Conseguimos extrair:

  • A customização não tem a ver com os fontes do erro.


OBSERVAÇÃO: Logo, a provável causa do erro não é esse ponto de entrada "A097APRF".


Resultado pós análise/interação



Card
defaulttrue
id#
label#



Expandir
titletype mismatch on _ on _____(_____.PR_)

Explicação

Esse 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
startHiddenfalse
effectDuration0.5
idCusto Médio
effectTypehorizontal
loopCardstrue
Card
defaulttrue
id#17743817
label#17743817

Erro

Expandir
titleVer erro (cabeçalho)

Para ver o erro completo, abra o ticket: link aqui: https://totvssuporte.zendesk.com/agent/tickets/17743817

Bloco de código
firstline1
titleTrecho
linenumberstrue
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 variáveis.


Tópicos de Análise

Expandir
title1 - 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
firstline1
titleTrecho
linenumberstrue
	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
firstline1
titleTrecho
linenumberstrue
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
title2 - 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
firstline1
titleTrecho
linenumberstrue
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
firstline1
titleTrecho
linenumberstrue
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."



...