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
- Captura mudanças no preço via TGLATS
- Utiliza a view
LDX_PRECOS_APIpara capturar os preços - Armazena a informação na tabela TMVSPRECOS
- A TMVOLIVRO é montada na carga com base na TMVSPRECOS
Fluxo quando IDPRIN = 0
- Captura mudanças no preço via TGLATS
- Captura os preços pela TGFEXC
- Armazena a informação na tabela TGFEXC no banco cloud
- 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
CODTABda tabelaTSIREG) - "2" -> Tabela por região do cliente/parceiro (conforme região do cliente/parceiro e campo
CODTABda tabelaTSIREG) - "3" -> Tabela por perfil do parceiro (conforme campo
CODTABda tabelaTGFTPP) - "4" -> Tabela por cliente/parceiro (conforme campo
CODTABda tabelaTGFPAR) - "5" -> Tabela por condição de pagamento (conforme campo
CODTABda tabelaTGFTPV) - "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
CODTABdaTGFPARou conforme tabelaTGFNPV) - "9" -> Tabela por cliente/parceiro e empresa (conforme campo
CODTABda tabelaTGFPAEM)
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:
- Abra o Insomnia na sua máquina.
- Procure pela requisição da tabela TGFEXC.
- 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 maiorNUTABestará 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
f2representa 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
NUTABmais 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)
- No Insomnia, procure a requisição da tabela TGLATS (LOGS).
- 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
dhAltercom a data correta do dia em que oNUTABfoi 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:
- Copie a resposta da requisição da TGLATS.
- Cole no Notepad++.
- 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:
- 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. - 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:
- Abra o Insomnia.
- Procure pela requisição VIEW.
- 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:
- Gere uma carga manual para o vendedor relacionado ao problema.
- 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:
- 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. - 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.