Árvore de páginas

Versões comparadas

Chave

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

...

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."



Expandir
titleTime-out occurred while waiting for buffer latch type 4 for page

Explicação

Este erro ocorre quando o sistema aguarda por muito tempo na tentativa de executar alguma ação no banco de dados, devido ao tempo de espera o sistema derruba a conexão. Pontos de análise:

  • Verifique se os artefatos (Binário, Lib, DBAccess) do cliente estão atualizados;
  • Verifique se houve alguma alteração no fonte que gera o erro (Na linha ou função que gera o erro);
  • Verifique com o cliente se o erro ocorre exclusivamente em uma rotina ou se ocorre em várias.  
Dica
titleComplemento

Ticket de exemplo: #17701851

Expandir
titleVer erro
Bloco de código
firstline1
titleTrecho
linenumberstrue
THREAD ERROR ([7656], FATURAMENTO, DESKTOP-U30GRFJ)   02/08/2023 13:11:56
[FWCustomMetrics:InsertMetric] TCSQLError(): Error : 845 (37000) (RC=-1) - [Microsoft][SQL Server Native Client 11.0][SQL Server]Time-out occurred while waiting for buffer latch type 4 for page (1:11814786), database ID 5.( From tDBServer::ROP_SQLEXEC )

Thread ID [6120]              User [FATURAMENTO] IO [4611]             Tables [139]       MaxTables [140]              Comment [MATA460A - TCPIP - ThreadID(7656)]   SP [ ]     Traced [No]        SQLReplay [No] InTran [Yes]       DBEnv [MSSQL/BT9QI1]             DBThread [(SPID 73,74)]               Started [02/08/2023 13:06:05]   IP [127.0.0.1:55612]        IDLE [ ]                InTransact [306 s.]          Memory [0]       Running [ROP_SQLEXEC for 300 s.]          RCV [492780]     SND [1513639]                TCBuild [20191119-20200706]    TCVersion [19.2.1.1]       ARCH [64]           OS [WINDOWS] BUILD [RELEASE]             

INSERT INTO MP_CUSTOM_METRICS_EXP (MP_FEDERID, MP_MODULO, MP_ROTINA, MP_USER, MP_SUBROT, MP_IDMETRI, MP_VALUE, MP_LAPTIME, MP_DTCREAT, MP_DTSEND, MP_TPMETRI) VALUES ('61468401000165', 5, 'MATA461', '000190', 'MATA461', 'faturamento-protheus_media-itens-nota-saida_average', '3', 0, '20230802', '20230831', 'AVG') on INSERTMETRIC(FWCUSTOMMETRICS.TLPP) 30/09/2021 11:46:45 line : 472

[TOTVS build: 7.00.191205P-20200903]
Called from FWCUSTOMMETRICS:SETAVERAGEMETRIC(FWCUSTOMMETRICS.TLPP) 30/09/2021 11:46:45 line : 129
Called from MAPVLNFS2(MATA461.PRX) 19/10/2021 18:21:02 line : 4268
Called from MAPVLNFS(MATA461.PRX) 19/10/2021 18:21:02 line : 1807
Called from MA460PROC(MATA461.PRX) 19/10/2021 18:21:02 line : 1468
Called from {|LEND| MA460PROC(CALIAS, CSERIE, MV_PAR01==1, MV_PAR02==1, MV_PAR03==1, MV_PAR04==1, MV_PAR05==1, MV_PAR07, MV_PAR08, MV_PAR09, MV_PAR10, MV_PAR11==1, MV_PAR12, MV_PAR13, MV_PAR14, MV_PAR15==1, MV_PAR16==2, C460COND,@LEND,DDATAMOE)}(MATA461.PRX) 19/10/2021 18:21:02 line : 741
Called from { || FWSETSHOWKEYS( .F. ), EVAL( BACTION, @LEND ),LEND := .T. , FWSETSHOWKEYS( .T. ), ODLGMODAL:DEACTIVATE() }(MSPROCES.PRW) 30/09/2021 11:46:48 line : 104
Called from {|SELF|(EVAL(OSELF:BINIT))}(FWDIALOGMODAL.PRW) 30/09/2021 11:46:45 line : 462
Called from ::MSDIALOG:ACTIVATE
Called from FWDIALOGMODAL:ACTIVATE(FWDIALOGMODAL.PRW) 30/09/2021 11:46:45 line : 462
Called from PROCESSA(MSPROCES.PRW) 30/09/2021 11:46:48 line : 105
Called from MA460NOTA(MATA461.PRX) 19/10/2021 18:21:02 line : 741
Called from FWFORMBROWSE:EXECUTE(FWFORMBROWSE.PRW) 30/09/2021 11:46:48 line : 1144
Called from { || OSELF:EXECUTE("MA460NOTA",              4,             0,"PREP. DOC'S",              3,"","PREP. DOC'S","",               3) }(FWFORMBROWSE.PRW) 30/09/2021 11:46:48 line : 578
Called from ::MSDIALOG:ACTIVATE
Called from FWMBROWSE:ACTIVATE(FWMBROWSE.PRW) 30/09/2021 11:46:48 line : 697
Called from FWMARKBROWSE:ACTIVATE(FWMARKBROWSE.PRW) 30/09/2021 11:46:48 line : 267
Called from FWMARKBROWSE(MSLIB.PRW) 30/09/2021 11:46:48 line : 11097
Called from MARKBROWSE(MSLIB.PRW) 30/09/2021 11:46:48 line : 6123
Called from MARKBROW(MSLIB.PRW) 30/09/2021 11:46:48 line : 6103
Called from MATA460A(MATA461.PRX) 19/10/2021 18:21:02 line : 478
Called from __EXECUTE(APLIB090.PRW) 30/09/2021 11:46:45 line : 721
Called from MDIEXECUTE(APLIB260.PRW) 30/09/2021 11:46:45 line : 924
Expandir
titleAnálise realizada

1. Na pilha de chamadas, a última função executada é do MATA461, o que indica que o processo gerador do erro foi no módulo de faturamento:

Bloco de código
firstline1
titleTrecho
linenumberstrue
Called from MAPVLNFS2(MATA461.PRX) 19/10/2021 18:21:02 line : 4268

Sendo assim, a primeira análise é do módulo de Faturamento.


2. Verifique qual tabela o sistema está tentando acessar, pode ser verificado pela Query apresentada no cabeçalho do erro:

Bloco de código
firstline1
titleTrecho
linenumberstrue
INSERT INTO MP_CUSTOM_METRICS_EXP (MP_FEDERID, MP_MODULO, MP_ROTINA, MP_USER, MP_SUBROT, MP_IDMETRI, MP_VALUE, MP_LAPTIME, MP_DTCREAT, MP_DTSEND, MP_TPMETRI) VALUES ('61468401000165', 5, 'MATA461', '000190', 'MATA461', 'faturamento-protheus_media-itens-nota-saida_average', '3', 0, '20230802', '20230831', 'AVG')

Neste caso, o sistema tenta realizar o Insert na tabela "MP" e como não consegue, excede o limite de tempo e derruba o sistema.


3. Validamos que o banco de dados do cliente estava em Cloud.

Expandir
titleConclusão do caso

O time de Framework nos informou que este erro está relacionado ao banco de dados do cliente, indicando a documentação: A time-out occurred while waiting for buffer latch -- type 4

Como o cliente era Cloud, o banco de dados dele estava aqui na TOTVS, então acionamos a equipe: SQUAD CLOUD DBA PROTHEUS

Eles realizaram o ajuste do banco de dados do cliente e o erro deixou de ser apresentado.



Expandir
titleErros específicos

Página: https://tdn.totvs.com/x/7hszJg




Expandir
titleArgument_error_in_function_Len()_on_CRIAVAR

Causa

O retorno do erro ocorre quando inserido no inicializador padrão de um determinado campo, um conteúdo não válido com relação a tipagem do campo. 

A maioria dos casos onde ocorre este erro estão relacionados a campos do tipo caractere que recebe um inicializador padrão numérico.

Solução

Para solucionar o problema, retire a opção do inicializador padrão, uma vez  que no dicionário padrão não há validação ou coloque a informação entre aspas (" ")

Processo:

  • Acessar o ambiente Configurador - SIGACFG;
  • Atualizações - Base de Dados - Dicionário - Base de Dados - Dicionário de Dados;
  • Localize a tabela correspondente, editar;
  • Localize o campo, editar;
  • Folder Opções - Inicializador Padrão;
  • Retire o conteúdo ou insira a tratativa necessária para para sanar o retorno. 
  • Salve o campo, salve a alteração da tabela, atualize o dicionário de dados, reinicie o Smartclient e realize novamente o processo.

(aviso) Importante: A ocorrência "argument_error_in_function_Len()_on_CRIAVAR" pode ocorrer em qualquer processo do Protheus em que o conteúdo do inicializador padrão divergir do conteúdo que o campo foi configurado para receber.

Expandir
titleNão foi possível resolver o conflito de agrupamento entre "Latin1_General_BIN" e "Latin1_General_CI_AS" na operação equal to.

Causa

Error : 468 (37000) (RC=-1) - [Microsoft][ODBC SQL Server Driver][SQL Server]Não foi possível resolver o conflito de agrupamento entre "Latin1_General_BIN" e "Latin1_General_CI_AS" na operação equal to. ( From tMSSQLConnection::GetQueryFile )

Este não é um erro relacionado ao Protheus e suas rotinas e sim, um problema que ocorre devido a um conflito de collation* entre dois databases (database onde esta os dados do Protheus x database de sistema "TempDB").

*Collation - É o mapa de caracteres utilizados em seu database. 

O database criado para armazenar as tabelas do Microsiga Protheus possui o mapa de caracteres "Latin_General_BIN" e o database de sistema "TempDB" possui o collation "Latin_General_CI_AS".

Solução

  • Opção 1) Alterar o Tipo do Agrupamento configurado no Banco de Dados.

Realizar a conversão do banco de dados de sistema "TEMPDB - Ex. SQL Server" para a collation "Latin_General_BIN (Padrão Protheus)

  • Opção 2) Atualize o ambiente com o último DBAccess , Build e LIB disponibilizados no Portal do Cliente (Havendo dificuldade, contate nosso Suporte Framework).

As novas atualizações de tecnologia do Protheus já contemplam tratamento para converter os caracteres e evitar as diferenças entre as Collations.

Expandir
titleIncorrect syntax near "X"

Causa

O erro ocorre ,por que, ao tentar executar uma query do lançamento padrão para a contabilização, o Banco de Dados está recebendo conteúdo de gravação com caractere especial (' " # @ $ % ¨! & *).

A informação a ser gravada contendo caracteres especiais na sua composição, interfere na codificação e na gravação de banco de dados, no caso de uso de apostrofo (') por exemplo,  o banco entenderá que a query finalizou seu bloco de instruções, sendo que o que vier após isso, fica caracterizado como erro de sintaxe.

Solução

1) Identifique o campo que está trazendo o caractere especial.

2) Retire o caractere especial da informação, assim não terá problemas para a gravação no Banco de Dados.

3) Em último caso, utilizar um execblock no lançamento padrão, para poder tratar caracteres especiais. Em caso de dúvidas sobre esse processo, contate nossa equipe de Atendimento Advpl para melhor orientação.

Expandir
titleErro No Inicializador Padrão do Campo A1_VM_MARC

Causa

O erro ocorre ao excluir um cliente (MATA030),onde, o sistema apresenta três mensagens de erro informando que:

  1. INITTER - Erro no conteúdo do Inicializador Padrão: Campo. (Marcação)
  2. INITTER - Erro no conteúdo do Inicializador Padrão: Campo: A1_VM_MARC
  3. MA030TEMPV - Cliente não poderá ser excluído. Flial "x".

A mensagem relacionada a inconsistência no inicializador padrão do campo A1_VM_MARC ocorre ,por que, o campo A1_COD_MARC, possui a chamada do A1_VM_MARC.

Solução

1) Identifique o campo que está trazendo o caractere especial.

2) Retire o caractere especial da informação, assim não terá problemas para a gravação no Banco de Dados.

3) Em último caso, utilizar um execblock no lançamento padrão, para poder tratar caracteres especiais. Em caso de dúvidas sobre esse processo, contate nossa equipe de Atendimento Advpl para melhor orientação.

Ex: A1_COD_MARC = Ordem 20 / A1_VM_MARC = ordem 21

Expandir
titleType mismatch on compare on MAPVL2SF2(MATA461.PRX) 06/06/2017 13:55:06 line : 5218 com uso do mv_horarmt

Causa

O erro refere-se a um tipo incompatível que está sendo utilizado para comparação na função MAPVL2SF2.

A função em questão, tem uma variável do tipo caractere que recebe a informação passada pelo parâmetro MV_HORARMT, que também é do tipo caractere. Todavia, essa variável está recebendo uma informação do tipo numérica , conforme o trecho do erro:
 

STACK MAPVL2SF2(MATA461.PRX) 06/06/2017 13:55:06
Local 30: CHORARMT(N) :2

 Veja que a variável CHORARMT, é definida como caractere, devido a letra C no início de seu nome, mas a informação que chega para ela vem entre parênteses como numérico (N), gerando incompatibilidade para a comparação de informações que variável precisa receber e o que está recebendo.

Solução

Para solucionar a questão, coloque a informação do parâmetro MV_HORARMT entre aspas duplas ("), indicando que a informação em questão é do tipo caractere: MV_HORARMT="2"

 Ticket referência : #1065455

Expandir
titleArray out of bounds ( 0 of 112 ) on A410NFORIG(MATV410A.PRW)

O erro array out of bounds ( 0 of 112 ) on A410NFORIG(MATV410A.PRW) ocorre ao tentar realizar uma devolução de compra.

O erro de array ocorre sempre que os campos C6_NFORI e/ou C6_SERIORIG:

  • Não existem no SX3;
  • Não estão marcados como usados;
  • Estão com o nível alterado;
  • Não estão disponíveis para o módulo acessado.
Expandir
titleVariable Does Not Exist ADE_GRUPO

Ao tentar incluir, alterar ou visualizar um teleatendimento na rotina TMKA503A sistema apresenta o seguinte error.log: variable does not exist ADE_GRUPO

Essa ocorrência esta relacionada ao modelo de atendimento informado no cadastro do grupo de atendimento na aba Teleatendimento.

No modelo atual a tabela que esta sendo referenciada e diferente a tabela padrão do sistema ADE. Com isso ao tentar validar um campo na query do modelo de atendimento sistema não o encontra e gera a ocorrência acima.

Solução, alterar o modelo informado no grupo de atendimento e colocar as tabelas corretas ou criar um novo modelo de atendimento.

Segue link da Faq para auxiliar na configuração ideal para o teleatendimento: https://tdn.totvs.com/x/3dJoE

Expandir
titleThe field X do reference to folder: X, but It not exist on FWFORMFIELD:PREPAREFIELDS(FWFORMFIELD.PRW)

The field X do reference to folder: X, but It not exist / O campo X refira à pasta: X, mas não existe. on FWFORMFIELD:PREPAREFIELDS(FWFORMFIELD.PRW)

O arquivo error.log está indicando que o processamento faz referência ao campo em questão (Neste Exemplo, U5_FUNCAO), o qual não está sendo localizado em sua Base.

Isso porque, o Dicionário de Dados está fornecendo uma localização inválida para o campo. É necessário verificar no Dicionário de Dados SX3 a coluna X3_FOLDER (Pasta)

Para corrigir indique um Folder / Pasta válido para o campo (X3_FOLDER). Ou seja, um número de Aba que realmente existe no formulário em que essa Tabela é acionada.

Exemplo:

O campo pertence à Tabela SU5 - Contatos que é alimentada através da rotina TMKA070

O campo U5_FUNCAO está com X3_FOLDER indicando Aba 5; porém, no Cadastro de Contatos não há Aba 5 (existem apenas 4 Abas no cadastro)

Aviso
titleImportante
Dica
titleImportante


...