Pular para o conteúdo principal

Análises de Problema de Preço

Existem dois fluxos possíveis para capturar preços de produtos no Sankhya, definidos pelo parâmetro global IDPRIN.

Fluxo quando IDPRIN = 1

  1. Captura mudanças no preço via TGLATS
  2. Utiliza a view LDX_PRECOS_API para capturar os preços
  3. Armazena a informação na tabela TMVSPRECOS
  4. A TMVOLIVRO é montada na carga com base na TMVSPRECOS

Fluxo quando IDPRIN = 0

  1. Captura mudanças no preço via TGLATS
  2. Captura os preços pela TGFEXC
  3. Armazena a informação na tabela TGFEXC no banco cloud
  4. A TMVOLIVRO é montada na carga com base na TGFEXC

Como consultar o valor do IDPRIN

O IDPRIN, é um parâmetro global que não tem seu valor declarado na tela Parâmetros Globais do Station Web. Para consultar, rode a seguinte consulta SQL no banco de dados do cliente

Consulta SQL:

SELECT DSVAL FROM TPARAMGL WHERE CHPAR = 'IDPRIN'

Procedimento de análise com IDPRIN = 0

Passo 1: Verificar a regra de tabela de preço utilizada pelo cliente

Consulta SQL:

SELECT INTEIRO FROM TSIPAR WHERE CHAVE = 'TIPTABPRECOS'

Possíveis valores e significados:

  • "0" -> Tabela ÚNICA (utiliza sempre a tabela "0" (zero))
  • "1" -> Tabela por região do vendedor (conforme a região do vendedor e campo CODTAB da tabela TSIREG)
  • "2" -> Tabela por região do cliente/parceiro (conforme região do cliente/parceiro e campo CODTAB da tabela TSIREG)
  • "3" -> Tabela por perfil do parceiro (conforme campo CODTAB da tabela TGFTPP)
  • "4" -> Tabela por cliente/parceiro (conforme campo CODTAB da tabela TGFPAR)
  • "5" -> Tabela por condição de pagamento (conforme campo CODTAB da tabela TGFTPV)
  • "7" -> Tabela por vendedor e condição de pagamento (conforme tabela TGFNPV)
  • "8" -> Tabela por cliente/parceiro ou Tabela por vendedor e condição de pagamento (conforme campo CODTAB da TGFPAR ou conforme tabela TGFNPV)
  • "9" -> Tabela por cliente/parceiro e empresa (conforme campo CODTAB da tabela TGFPAEM)

Passo 2: Identificar a tabela de preço do produto

Após descobrir a regra da tabela (Passo 1), localize o código da tabela de preço no banco de dados conforme a regra identificada.

Exemplo: TIPTABPRECOS = 4 (Tabela por cliente/parceiro)

Consulta SQL para obter a tabela do cliente:

SELECT CODTAB FROM TGFPAR WHERE CODPARC = <Código do Parceiro>

Passo 3: Verificar o preço mais recente do produto no ERP

Para verificar o preço mais recente do produto no ERP:

  1. Abra o Insomnia na sua máquina.
  2. Procure pela requisição da tabela TGFEXC.
  3. Utilize o body correspondente.
    {
"serviceName":"CRUDServiceProvider.loadRecords",
"requestBody":{
"dataSet":{
"rootEntity":"Excecao",
"orderByExpression":"this.NUTAB",
"offsetPage":1,
"criteria": {
"expression": {
"$": "this.CODPROD = '<Código do Produto>' "
}
},
"entity":{
"fieldset":{
"list":"NUTAB,CODPROD,VLRVENDA"
}
}
}
}
}

Observações importantes:

  • A requisição retorna registros em ordem crescente de NUTAB.
  • Como o NUTAB é crescente, o maior NUTAB estará no final da página ou em páginas posteriores da resposta.

Exemplo de retorno:

{
"serviceName": "CRUDServiceProvider.loadRecords",
"status": "1",
"pendingPrinting": "false",
"transactionId": "6CBBB98784A3E44F28BDA75E41EB8D00",
"responseBody": {
"entities": {
"total": "50",
"hasMoreResult": "true",
"offsetPage": "0",
"offset": "0",
"metadata": {
"fields": {
"field": [
{
"name": "NUTAB"
},
{
"name": "CODPROD"
},
{
"name": "VLRVENDA"
},
{
"name": "CODLOCAL"
},
{
"name": "CONTROLE"
}
]
}
},
"entity": [
{
"_rmd": {
"CODPROD": {
"$": "{\"decVlr\":2,\"decQtd\":2,\"controle\":{\"tipoContEst\":\"L\",\"labelContEst\":\"Lote\",\"listaContEst\":[\"\"],\"usaMascara\":false}}",
"provider": "PRODUTORMP"
}
},
"f0": {
"$": "2"
},
"f1": {
"$": "142"
},
"f2": {
"$": "11.31"
},
"f3": {
"$": "0"
},
"f4": {}
}
}
}
}

⚠️ Atenção

O valor exibido em f2 representa o preço mais recente do produto no ERP.


Passo 4: Verificar o preço mais recente do produto no Banco Cloud

Para verificar o preço mais recente no banco cloud, execute a consulta SQL:

SELECT CODPROD, VLRVENDA
FROM TGFEXC
WHERE CODPROD = <Código do Produto>
AND CODTAB = <Código do Parceiro>
ORDER BY NUTAB DESC.

Se o valor de venda não estiver idêntico ao retornado no Insomnia (ERP), isso indica que o Banco Cloud está desatualizado em relação ao ERP.


Passo 5: Verificar logs para entender a divergência de preços

Para investigar a divergência, consulte os logs no banco cloud com a consulta SQL:

SELECT *
FROM TGLATS
WHERE PRIMARY_KEY LIKE '%<Código do Produto>%'
AND ENTIDADE = 'Excecao'
ORDER BY DTALTER DESC

Deverão ser retornadas várias linhas. A linha relevante é aquela em que PRIMARY_KEY.TGLATS aparece neste formato:

[
{"nomeColumnPk": "CONTROLE", "valorPk": "<Código do controle> "},
{"nomeColumnPk": "CODLOCAL", "valorPk": "<Código do local de estoque>"},
{"nomeColumnPk": "CODPROD", "valorPk": "<Código do produto>"},
{"nomeColumnPk": "NUTAB", "valorPk": "<Código do NUTAB>"}
]

Nesta etapa, valide:

  • O código do produto correto.
  • O NUTAB mais recente, conforme encontrado no Passo 3.

Se o NUTAB mais recente não aparecer em nenhuma linha do banco cloud, significa que:

  • A Landix não conseguiu capturar o log dessa mudança de preço;
    ou
  • O Sankhya do cliente está com problemas na geração de logs.

Verificar a geração de logs no Sankhya (via Insomnia)

  1. No Insomnia, procure a requisição da tabela TGLATS (LOGS).
  2. Utilize o body correspondente.
{
"serviceName":"GatewayServiceProviderSP.logAlteracoesTabelas",
"status":"2",
"requestBody":{
"size":100,
"page":0,
"dhAlter":"2026-02-27T00:00:00",
"entidades":[
{
"nome":"Estoque"
}
]
}
}

⚠️ Atenção

Preencha o campo dhAlter com a data correta do dia em que o NUTAB foi gerado.

Para identificar o dia, execute a consulta SQL:

SELECT DTALTER FROM TGFTAB WHERE NUTAB = <Código do NUTAB>;

Se o NUTAB.TGFTAB não existir no banco cloud, faça uma requisição no Insomnia utilizando o seguinte body para achar a data do NUTAB.

{
"serviceName":"CRUDServiceProvider.loadRecords",
"requestBody":{
"dataSet":{
"rootEntity":"TabelaPreco",
"offsetPage":0,
"orderByExpression":"this.NUTAB",
"criteria": {
"expression": {
"$": "this.NUTAB = '<Código do NUTAB>'"
}
},
"entity":{
"fieldset":{
"list":"NUTAB, CODTAB, DTALTER, PERCENTUAL, CODTABORIG "
}
}
}
}
}

Em seguida:

  1. Copie a resposta da requisição da TGLATS.
  2. Cole no Notepad++.
  3. Pesquise (CTRL + F) pelo código do produto.

Observações:

  • Os logs podem ter diversas páginas. Verifique o código do produto em todas as páginas do dia da alteração.
  • Pode acontecer da requisição retornar "-1", indicando que não há logs gravados.

Para verificar se os logs estão habilitados, execute a seguinte requisição no insomnia:

{
"serviceName":"CRUDServiceProvider.loadRecords",
"requestBody":{
"dataSet":{
"rootEntity":"ParametroSistema",
"offsetPage":0,
"entity":{
"fieldset":{
"list":"CHAVE,DESCRICAO,TEXTO,INTEIRO,LOGICO"
}
},
"criteria": {
"expression": {
"$": "this.CHAVE = 'LOGTABOPER'"
}
}
}
}
}

Interpretação:

  • Se retornar 'N', os logs estão desligados no ERP.

⚠️ Atenção

Se os logs estiverem desligados, solicite imediatamente que o cliente habilite a geração de logs. Eles são fundamentais para o funcionamento correto do Landix.

Se não existir log para o código do produto, significa que os logs do Sankhya, por algum motivo, não registraram essa movimentação.


Passo 6: Solução

Para solucionar o caso, existem duas opções:

  1. Abrir um N3 e solicitar para a equipe de DEV que importe as tabelas relacionadas a preço desde o dia em que houve a criação do NUTAB.
  2. Solicitar ao cliente que faça uma alteração no preço do produto apenas para gravar log (por exemplo, adicionar 1 centavo e depois remover).
    • Se os logs forem gravados com sucesso, basta gerar uma sincronização para o preço atualizar.
    • Se não gravar logs, solicite que o cliente abra ticket na Sankhya para entender por que a gravação de logs da tabela TGFEXC não está funcionando.

Procedimento de análise com IDPRIN = 1

Passo 1: Seguir os mesmos passos do fluxo IDPRIN = 0

Execute os mesmos passos da análise com IDPRIN = 0.

A diferença é que também é necessário conferir como o preço está sendo retornado na view LDX_PRECOS_API.

Para consultar a view:

  1. Abra o Insomnia.
  2. Procure pela requisição VIEW.
  3. Utilize o body correspondente.
{
"serviceName": "CRUDServiceProvider.loadView",
"requestBody": {
"query": {
"viewName": "LDX_PRECOS_API",
"where": {
"$": "CODPROD = '<Código do Produto>'"
},
"fields": {
"field": {
"$": "*"
}
}
}
}
}

Valide se o preço retornado é o mesmo que a requisição na TGFEXC.


Passo 2: Comparar preços na TMVSPRECOS

Confira o preço na tabela TMVSPRECOS com a consulta SQL:

SELECT *
FROM TMVSPRECOS
WHERE NUTAB = <Código do NUTAB>
AND CDPR = <Código do Produto>

Para conferir o NUTAB da tabela de preço que está sendo enviado na carga:

  1. Gere uma carga manual para o vendedor relacionado ao problema.
  2. Execute a consulta SQL:
SELECT *
FROM TMVSVT_TMP_<Versão do vendedor>;
WHERE CDTAB = <Código de tabela de preço>

Se a consulta na TMVSPRECOS não retornar nada, significa que o NUTAB não existe no banco cloud.

Para confirmar, procure a requisição VIEW no Insomnia e utilize o body correspondente.

{
"serviceName": "CRUDServiceProvider.loadView",
"requestBody": {
"query": {
"viewName": "LDX_PRECOS_API",
"where": {
"$": "CODPROD = '<Código do Produto>' AND NUTAB = '<Código do NUTAB>'"
},
"fields": {
"field": {
"$": "*"
}
}
}
}
}

Se o Insomnia retornar preço normalmente, ou se houver divergência entre TMVSPRECOS e TGFEXC, é necessário executar as mesmas verificações de logs da TGLATS (a partir do Passo 5 do fluxo IDPRIN = 0).


Passo 3: Solução

Para solucionar o caso, existem duas opções:

  1. Abrir um N3 e solicitar para a equipe de DEV que importe as tabelas relacionadas a preço desde o dia em que houve a criação do NUTAB.
  2. Solicitar ao cliente que faça uma alteração no preço do produto apenas para gravar log (por exemplo, adicionar 1 centavo e depois remover).
    • Se os logs forem gravados com sucesso, basta gerar uma sincronização para o preço atualizar.
    • Se não gravar logs, solicite que o cliente abra ticket na Sankhya para entender por que a gravação de logs da tabela TGFEXC não está funcionando.

Material de apoio

Documento: Manual de análise de problema de preços