1. Introdução
Esta página é uma documentação complementar ao dicionário automático da API do ERP Spalla. Ela descreve como consumir, via API, as duas procedures que respondem pela análise de faturamento e vendas do ERP — a mesma base que alimenta a tela Avaliação de Venda Líquida. São a fonte natural para painéis de faturamento, ranking de produtos, margem por cliente, desempenho de vendedor e séries temporais de receita.
| Objeto | Tipo | Para que serve |
|---|---|---|
PRC_RES_ANALISEVENDAS2 | PROCEDURE RESULT | Analítica parametrizada. 23 parâmetros: você escolhe o agrupamento, o período, a empresa e os filtros. É a procedure que a tela do ERP executa. |
PRC_RES_BIANALISEVENDAS | PROCEDURE RESULT | Série pronta para BI. 3 parâmetros. Varre todas as empresas ativas, no grão de item de nota fiscal, e acrescenta dimensões de tempo já calculadas. |
As duas são de leitura: aceitam apenas o método GET. Nenhuma delas grava, altera ou recalcula nada no ERP.
O ponto que mais gera dúvida. Nenhuma das duas lê a nota fiscal diretamente. Ambas leem uma base de análise já apurada, que é gravada por um processamento executado na retaguarda do ERP. Período não processado devolve resultado vazio, sem mensagem de erro. Leia a seção 4. Pré-requisito antes de qualquer coisa.
Esta página não substitui o dicionário oficial da sua instância. A lista completa de parâmetros, colunas de retorno, tipos de dados e verbos liberados está no dicionário e deve ser consultada lá.
2. Onde encontrar o dicionário oficial da sua API
Cada empresa que opera o ERP Spalla expõe o seu próprio dicionário automático em um endereço próprio. Para acessá-lo, abra no navegador a URL no formato abaixo, substituindo os placeholders pelos valores da sua instância:
https://<host>:<porta>/root/dicionario?userToken=<token>
<host>— endereço do servidor que hospeda a API.<porta>— porta de comunicação configurada no servidor.<token>— token de identificação (userToken) fornecido pela equipe responsável pela API.
O dicionário oficial é a fonte autoritativa para a lista completa de parâmetros e colunas das duas procedures, seus tipos e a lista de objetos e verbos liberados para a sua API. As colunas de retorno são numerosas — mais de 90 em PRC_RES_ANALISEVENDAS2 — e esta página não as replica.
3. Como a API funciona
A API do Spalla utiliza um conceito diferente do REST tradicional. Todas as requisições são enviadas para um único endpoint, e a operação real no banco de dados não é determinada pelo verbo HTTP, e sim por um campo "method" dentro do corpo JSON.
| Item | Valor |
|---|---|
| Endpoint único | /root/integrador |
| Verbo HTTP | PATCH (padrão). POST/GET são alternativas para leitura. |
| Autenticação | Header ou query param userToken. |
| Operação real | Campo "method" dentro do corpo JSON. |
Nesta página o corpo usa sempre o mesmo par:
| method (no corpo) | objectType | Operação |
|---|---|---|
GET | PROCEDURE RESULT | Executa a procedure e devolve o conjunto de linhas produzido por ela. |
Não confunda os dois níveis. O verbo HTTP da requisição é PATCH; o "verbo" que define a operação no banco é o campo "method" do JSON. Uma consulta à análise de vendas é uma requisição HTTP PATCH cujo corpo contém "method": "GET".
PROCEDURE e PROCEDURE RESULT são o mesmo objeto físico. O que muda é a interpretação do retorno: PROCEDURE é execução pura (method: PATCH) e PROCEDURE RESULT é retorno estruturado de dados (method: GET). As duas procedures desta página são consumidas somente como PROCEDURE RESULT.
Além de params, a consulta GET aceita as cláusulas fields, fieldsIgnore, calculatedFields, where, groupBy, having, orderBy, limit e offset — e elas se aplicam sobre o resultado da procedure. É o que permite pedir ao servidor um retorno já reduzido em vez de trazer todas as linhas para o cliente. O formato exato de cada cláusula está no dicionário oficial.
4. Pré-requisito: o período precisa estar processado
As duas procedures leem a tabela de análise MOVEQ2ANALISEVENDA. Ela guarda, por item de nota fiscal, os valores já apurados: custo, impostos, comissões, fretes, o resultado e o percentual de resultado. Esses valores não são calculados na hora da consulta — são gravados antes, por um processamento executado na retaguarda.
Quem dispara esse processamento é a operação do ERP, pelo botão Processar Período da tela Avaliação de Venda Líquida (rotina PRC_PROCESSANALISEVENDAS). O processamento recebe empresa, tipo de empresa, período e a ação desejada — processar ou excluir o período — e é limitado a 90 dias por execução.
Atenção — esse processamento não está disponível na API. A rotina de processamento não é um objeto liberado para chamada externa. O integrador consulta a análise; não a produz. Consequências práticas:
- Um período nunca processado devolve zero linhas, com
200e sem mensagem — é indistinguível, no protocolo, de "não houve venda no período". - Notas emitidas depois do último processamento não aparecem, ainda que o período consultado as inclua.
- Correções de custo, comissão ou tributação feitas depois do processamento só se refletem na análise quando o período é reprocessado.
Combine com o gestor do ERP Spalla da sua empresa a rotina de processamento (quais empresas, com que frequência, até que data) antes de colocar um painel em produção. Um painel que atualiza de hora em hora sobre uma base processada uma vez por mês exibe dados velhos com aparência de dados novos.
5. Diagrama de execução
Convenção visual: azul (Retaguarda do ERP) · verde (Via API).
6. Aviso sobre liberação na retaguarda
Atenção — liberações necessárias na retaguarda.
- Verbo
GETnos objetos. As procedures precisam estar habilitadas comGET, comoPROCEDURE RESULT, na chave de API que você utiliza. Sem isso a requisição é recusada. - Empresas acessíveis ao usuário do token. A seleção de empresas respeita a configuração de acesso Empresas × Usuário. Um token cujo usuário não enxerga determinada empresa não recebe as vendas dela, mesmo informando o código da empresa no parâmetro.
- Sensibilidade dos dados. O retorno traz custo, margem e comissão. Na tela do ERP essas colunas podem ser ocultadas por nível de acesso (
InibirColunaCMVResultadoAnaliseVenda); na API o controle disponível é a liberação do objeto por chave. Avalie com o gestor do ERP Spalla se estas procedures devem ser liberadas para tokens que não podem ver custo e resultado.
A lista de verbos efetivamente liberados aparece no próprio dicionário oficial da sua instância.
7. Qual das duas procedures usar
| Critério | PRC_RES_ANALISEVENDAS2 | PRC_RES_BIANALISEVENDAS |
|---|---|---|
| Parâmetros | 23 (5 obrigatórios) | 3, todos com valor padrão |
| Empresa | Você escolhe, com expansão por matriz ou grupo | Todas as empresas ativas, sempre |
| Período | Data inicial e final livres | Últimos P_QTDDIAS dias até hoje |
| Agrupamento | 18 opções, do dia ao item de nota | Fixo no grão de item de nota fiscal |
| Dimensões de tempo | Mês/ano da movimentação | Acrescenta mês, nome do mês, ano corrente e distância em meses |
| Filtros de cliente, produto, vendedor… | Sim, por parâmetro | Não — filtre no where da consulta ou no seu cliente |
| Custo de execução | Proporcional ao período e aos filtros | Alto — uma execução por empresa ativa |
| Melhor para | Relatório específico, drill-down, KPI com filtro | Carga periódica de um painel multiempresa |
Regra prática. Se o painel precisa de recorte (uma empresa, um vendedor, um grupo de produto, um intervalo específico), use PRC_RES_ANALISEVENDAS2 com o agrupamento adequado — ela devolve menos linhas e responde mais rápido. Use PRC_RES_BIANALISEVENDAS quando você quiser uma carga só, ampla, para montar o cubo do seu lado.
Antes da primeira consulta, confirme com o responsável pelo ERP que o período que você pretende exibir já foi processado para as empresas que interessam ao painel. O processamento é feito na tela Avaliação de Venda Líquida, pelo botão Processar Período.
| Parâmetro da tela | Efeito |
|---|---|
| Empresa | Empresa base do processamento. |
| Tipo de Empresa | Expande a empresa base: específica, matriz, grupo SPED ou grupo econômico. |
| Período | Intervalo de datas a processar. Máximo de 90 dias por execução — períodos maiores são recusados com mensagem. |
| Ação | Processar o período (recalcula e regrava) ou Excluir o período (remove a apuração daquele intervalo). |
O reprocessamento de um intervalo substitui o que havia para aquele intervalo. É a operação correta depois de qualquer acerto retroativo de custo, comissão, frete ou tributação.
Como saber se está atualizado. A própria tela exibe a data do último processamento. Do lado da API, o teste mais direto é consultar um dia que você sabe ter tido faturamento: se voltar vazio, o período não está processado.
O parâmetro P_TIPOANALISE é o mais importante de PRC_RES_ANALISEVENDAS2. Ele decide duas coisas ao mesmo tempo:
- O grão do retorno — o que vira uma linha. Nos tipos agregados, os valores voltam somados por grupo; nos tipos analíticos, cada linha é um item de nota fiscal.
- Quais colunas vêm preenchidas — as dimensões que não pertencem ao tipo escolhido são devolvidas como
null. A estrutura do retorno é sempre a mesma; o conteúdo é que muda.
| Valor | Tipo de análise | Grão | Dimensões preenchidas |
|---|---|---|---|
1 | Dia | Agregado | ME_ENT |
2 | Nota Fiscal | Agregado | Empresa, CF_TIPO, FT_COD, série, número, datas, modelo, condição de pagamento e tipo de operação |
3 | Item Nota Fiscal | Analítico | Todas — uma linha por item, sem soma |
4 | Processo de Importação | Agregado | PIM_COD, PIM_CODINTERNO, PIM_DES, DIM_NUMERODI |
5 | Empresa | Agregado | FL_COD, FL_DES |
6 | Cliente | Agregado | CF_COD, CF_RSOCIAL |
7 | Vendedor | Agregado | VD_COD, VD_NOM |
8 | Produto | Agregado | PD_COD, PD_DES, PD_CUSTOAP |
9 | Grupo de Produto | Agregado | GP_COD, GP_DES |
10 | Sub-Grupo de Produto | Agregado | GP_COD, GP_DES, SG_COD, SG_DES |
11 | Tipo de Produto | Agregado | TP_COD, TP_DES |
12 | Linha do Produto | Agregado | LP_COD, LP_DES |
13 | Países | Agregado | PS_COD, PS_NOME |
14 | Estados | Agregado | CF_ESTADO, UF_REGIAO |
15 | Região de Vendas | Agregado | REG_COD, REG_DES — considera apenas clientes com região definida |
16 | Grupo Empresarial | Agregado | CLI_CF_COD, CF_RSOCIALGRP — considera apenas clientes vinculados a um grupo |
17 | Grupo Econômico | Agregado | FL_GRUPO, FL_DESGRP — considera apenas empresas vinculadas a um grupo |
18 | Cubo de Vendas | Analítico | Todas — mesma estrutura do tipo 3 |
3 e 18 devolvem exatamente o mesmo conjunto de colunas e o mesmo grão. A diferença é a ordenação: o tipo 3 volta ordenado por data de movimentação, documento e item; o tipo 18 volta sem ordenação, porque na tela do ERP ele alimenta o cubo (tabela dinâmica), que reordena sozinho. Para consumo em BI, prefira 18 e ordene do seu lado — ou peça a ordenação que interessa em orderBy.
Colunas null não são erro. Se você pedir o tipo 7 (Vendedor) e ler PD_DES, virá null — produto não é dimensão desse agrupamento. Monte o painel a partir das colunas que o tipo escolhido preenche. Duas colunas merecem destaque: ME_CUSTOUNIT (custo unitário) só é calculada nos tipos 3 e 18; e ME_PCTRESULTADO, nos tipos agregados, é o resultado do grupo dividido pelo valor de produto do grupo — não a média dos percentuais das linhas.
Parâmetros obrigatórios
Estes cinco não têm valor padrão e precisam vir em params:
| Parâmetro | Descrição |
|---|---|
P_TIPOANALISE | Tipo de análise, de 1 a 18 (Passo 2). |
P_FL_COD | Código da empresa base. |
P_TIPOEMPRESA | Como expandir a empresa base — ver quadro abaixo. |
P_ME_ENT1 | Data inicial do período. |
P_ME_ENT2 | Data final do período. |
Expansão da empresa (P_TIPOEMPRESA)
| Valor | Empresas consideradas |
|---|---|
0 | Somente a empresa informada em P_FL_COD. |
1 | A matriz e suas filiais. |
2 | O grupo SPED da empresa informada. |
3 | O grupo econômico da empresa informada. |
Em qualquer valor, a lista resultante ainda é filtrada pela configuração de acesso Empresas × Usuário do usuário vinculado ao token.
Período
- O filtro incide sobre a data de movimentação da nota (
ME_ENT), não sobre a data de emissão. - Use ISO-8601 (
"2026-07-01"ou"2026-07-01 00:00:00.000"). O parâmetro é do tipo data: a hora informada é ignorada, então00:00:00.000e23:59:59.999são equivalentes. - Os dois extremos são inclusivos.
- Períodos longos custam caro. Evite intervalos amplos em horário comercial e prefira várias janelas menores, com filtros, a uma janela única sem filtro.
Filtros opcionais
Todos aceitam ausência de valor. Os numéricos só entram na consulta quando maiores que zero; os textuais, quando não vazios. Ou seja: enviar 0, null ou "" equivale a não filtrar — não existe filtro pelo código zero.
| Parâmetro | Filtra por |
|---|---|
P_CF_COD | Cliente da nota. |
P_CLI_CF_COD | Grupo empresarial do cliente. |
P_REG_COD | Região de vendas do cliente. |
P_CF_ESTADO | Estado (UF) do cliente. Texto de 2 caracteres. |
P_VD_COD | Vendedor da nota. |
P_GV_COD | Supervisor do vendedor. |
P_PD_COD | Produto. |
P_GP_COD / P_SG_COD | Grupo e subgrupo de produto. |
P_TP_COD / P_LP_COD | Tipo e linha de produto. |
P_FT_COD | Um documento específico. |
P_NP_COD | CFOP (natureza da operação). Texto. |
P_PIM_COD | Processo de importação. Só é considerado nos tipos de análise 3, 4 e 18. |
Parâmetros que mudam o que entra na conta
Estes três não são recortes: eles alteram o universo somado. São a origem mais comum de divergência entre um painel e o relatório do ERP.
| Parâmetro | Valor | Comportamento |
|---|---|---|
P_BONIFICACAO | 0 | Padrão. Exclui as operações marcadas como bonificação. |
1 | Inclui as bonificações no resultado. | |
P_ABATEDEVOLUCAO | 0 | Padrão. Considera apenas as saídas; devoluções ficam de fora. |
1 | Abate as devoluções ocorridas no período consultado. | |
2 | Abate a devolução no mês da venda de origem — a devolução só entra quando a nota de saída correspondente é do mesmo mês e ano. | |
P_TIPORESULTADO | 0 | Padrão. Todos os resultados. |
1 | Somente resultado zero ou positivo. | |
2 | Somente resultado negativo — atalho para achar venda com margem negativa. |
Há ainda P_PAIS, que separa mercado interno de externo: 1 traz apenas clientes do Brasil, 2 apenas do exterior, e a ausência traz os dois. Esse parâmetro não existe na tela do ERP — só é alcançável pela API.
Compare sempre com os mesmos três valores. Ao conferir um número do painel contra a tela do ERP, garanta que bonificação, abatimento de devolução e tipo de resultado estão iguais nos dois lados. Diferença nesses três explica a maioria dos "o painel não bate com o sistema".
Com o tipo e os filtros definidos, monte o corpo com "method": "GET", "objectType": "PROCEDURE RESULT" e os valores em params.
Exemplo — faturamento por produto no mês
{
"method": "GET",
"objectType": "PROCEDURE RESULT",
"objectName": "PRC_RES_ANALISEVENDAS2",
"params": [
{ "name": "P_TIPOANALISE", "value": 8 },
{ "name": "P_FL_COD", "value": 1 },
{ "name": "P_TIPOEMPRESA", "value": 0 },
{ "name": "P_ME_ENT1", "value": "2026-07-01" },
{ "name": "P_ME_ENT2", "value": "2026-07-31" }
],
"fields": [
"PD_COD", "PD_DES", "ME_QTDEST", "ME_VLRPRODUTO", "ME_VLRESULTADO", "ME_PCTRESULTADO"
],
"orderBy": [ "ME_VLRPRODUTO DESC" ],
"limit": 20
}
Valores ilustrativos. Os códigos de empresa, produto e período acima são exemplos. Use os cadastros da sua instância. A lista completa e autoritativa de parâmetros e colunas está no dicionário oficial.
Exemplo — margem negativa por cliente, com devoluções abatidas
{
"method": "GET",
"objectType": "PROCEDURE RESULT",
"objectName": "PRC_RES_ANALISEVENDAS2",
"params": [
{ "name": "P_TIPOANALISE", "value": 6 } // Cliente
,{ "name": "P_FL_COD", "value": 1 }
,{ "name": "P_TIPOEMPRESA", "value": 1 } // matriz e filiais
,{ "name": "P_ME_ENT1", "value": "2026-01-01" }
,{ "name": "P_ME_ENT2", "value": "2026-06-30" }
,{ "name": "P_ABATEDEVOLUCAO", "value": 1 } // abate devoluções do período
,{ "name": "P_TIPORESULTADO", "value": 2 } // somente resultado negativo
],
"fields": [ "CF_COD", "CF_RSOCIAL", "ME_VLRPRODUTO", "ME_CUSTO", "ME_VLRESULTADO" ],
"orderBy": [ "ME_VLRESULTADO ASC" ]
}
Boas práticas de consulta
- Peça só o que vai usar. São mais de 90 colunas;
fields(oufieldsIgnore) reduz a resposta e o tempo de transferência de forma expressiva. - Informe
limitexplicitamente e pagine comoffset. Consulta sem limite declarado fica sujeita ao limite padrão do servidor, e um painel pode exibir uma amostra achando que é o total. - Deixe o corte no servidor.
where,groupBy,havingeorderByse aplicam sobre o resultado da procedure — use-os em vez de trazer tudo e reduzir no cliente. - Não use
%emcalculatedFields. A requisição falha com400. Para testar a presença de um trecho de texto, useLOCATE(CAMPO, 'texto'). Emwhere, oLIKEcom%funciona normalmente. - Prefira o agrupamento da procedure ao
groupByda consulta. Escolher oP_TIPOANALISEcerto faz a soma acontecer antes, sobre menos linhas.
PRC_RES_BIANALISEVENDAS é um atalho para carga de painel. Ela percorre todas as empresas ativas e, para cada uma, executa a análise no grão de item de nota fiscal (equivalente ao tipo 18), no período dos últimos P_QTDDIAS dias até hoje. Não recebe empresa, nem datas, nem filtros.
| Parâmetro | Padrão | Descrição |
|---|---|---|
P_BONIFICACAO | 0 | Mesmo significado do Passo 3: 0 exclui bonificações, 1 inclui. |
P_ABATEDEVOLUCAO | 0 | Mesmo significado do Passo 3. |
P_QTDDIAS | 365 | Quantos dias retroagir a partir de hoje. |
Dimensões de tempo que ela acrescenta
Além das colunas da análise, o retorno traz cinco campos calculados que poupam trabalho na montagem de séries:
| Coluna | Conteúdo |
|---|---|
MES_NUMERO | Mês com dois dígitos: 01 a 12. |
MES_NOME | Número e nome do mês, já ordenável como texto: 01-JANEIRO. |
TIPO_MES | Posição relativa ao mês corrente: mês atual, meses anteriores ou meses posteriores. |
TIPO_ANO | Posição relativa ao ano corrente: ano atual, anos anteriores ou anos posteriores. |
MESES | Distância em meses até hoje. É negativa para o passado: o mês anterior vale -1. Útil para eixo relativo (“últimos 12 meses”). |
Duas datas diferentes convivem no retorno. O recorte do período usa a data de movimentação (ME_ENT), mas as cinco dimensões de tempo acima são derivadas da data de emissão (ME_EMI). Na maioria das notas as duas coincidem; quando não coincidem, uma nota pode entrar no período e ser rotulada no mês vizinho. Se o seu painel exige um único critério, agrupe por ME_ENT em vez de usar MES_NOME.
Exemplo — carga dos últimos 12 meses
{
"method": "GET",
"objectType": "PROCEDURE RESULT",
"objectName": "PRC_RES_BIANALISEVENDAS",
"params": [
{ "name": "P_BONIFICACAO", "value": 0 }
,{ "name": "P_ABATEDEVOLUCAO", "value": 1 }
,{ "name": "P_QTDDIAS", "value": 365 }
]
}
Quando não há dados, a resposta não vem vazia. Se nenhuma empresa ativa tiver movimento processado no período, a procedure devolve uma linha com FL_COD = 0, FL_DES = "Sem dados para exibir" e todas as demais colunas nulas. Trate esse caso explicitamente: um painel que soma o retorno sem checar vai exibir uma categoria fantasma chamada “Sem dados para exibir”, e um contador de linhas vai informar 1 registro em vez de nenhum.
Custo. Esta procedure é a mais pesada das duas — ela roda uma análise completa por empresa ativa e monta o resultado inteiro antes de devolver. Use-a em carga agendada (fora do horário comercial), guardando o resultado do seu lado, e não a coloque atrás de um botão de atualizar do painel.
O retorno mistura três famílias de valores: faturamento, deduções (impostos, custos, comissões) e resultado. Confundi-las produz painel errado com número plausível.
| Coluna | Significado |
|---|---|
ME_TOT_BRUTO | Valor bruto do item, antes de desconto. |
ME_VDSC | Desconto concedido. |
ME_VLRPRODUTO | Valor do produto já com desconto. É o denominador do percentual de resultado e a base natural de um gráfico de faturamento. |
ME_VALOR | Valor do item na nota. |
ME_QTDCONV / ME_QTDEST | Quantidade na unidade de venda e na unidade de estoque. Para somar quantidade entre produtos, use a de estoque. |
ME_CUSTO | Custo do item vendido, na quantidade da linha. |
ME_CUSTOUNIT | Custo unitário. Preenchido apenas nos tipos 3 e 18. |
ME_VLRESULTADO | Resultado líquido do item — ver fórmula abaixo. |
ME_PCTRESULTADO | Resultado dividido pelo valor do produto, em percentual. |
Como o resultado é apurado
O resultado é o valor do produto menos todas as deduções apuradas no processamento:
ME_VLRESULTADO = ME_VLRPRODUTO
- custo do item
- ICMS - ICMS ST - PIS - COFINS - CSLL - IR - ISS
- frete
- comissões (representante, operacional, gerência, supervisão, terceiros)
- custo financeiro - custo fixo - contrato especial
- bonificação
ME_PCTRESULTADO = ME_VLRESULTADO / ME_VLRPRODUTO * 100
Cada parcela também vem como coluna própria (ME_TOTICMS, ME_VPIS, ME_VCOFINS, ME_FRETE, VD_VALCOM, ME_CUSTOFIN, ME_CUSTOFIXO, entre outras), o que permite montar um gráfico de composição da margem sem recalcular nada.
Não recalcule o resultado no cliente. Ele já vem apurado com o custo vigente na data da movimentação e com as regras de comissão daquela nota. Somar as colunas por conta própria produz um número diferente do que o ERP mostra.
Sinais e devoluções
- A coluna
CF_TIPOindica o sentido:Cé saída (venda),Fé devolução. - Nas devoluções os valores vêm com sinal negativo — valor, custo, impostos e resultado. Basta somar; não inverta o sinal por conta própria.
- Como devoluções só entram quando
P_ABATEDEVOLUCAOé1ou2, um painel de faturamento líquido precisa desse parâmetro explícito.
Formatação
- Datas e timestamps em ISO-8601.
- Números com ponto decimal, sem separador de milhar e sem símbolo de moeda.
- Colunas de valor com até 6 casas decimais — arredonde apenas na exibição, nunca antes de somar.
Paralelo com a tela do Spalla
A tela Avaliação de Venda Líquida é um cliente de PRC_RES_ANALISEVENDAS2 — ela monta a mesma chamada que você monta pela API. Conhecer o paralelo ajuda em duas horas: para conferir o painel contra o ERP e para descobrir a combinação de parâmetros que produz o número desejado, experimentando na tela antes de programar.
| Campo da tela | Parâmetro | Observação |
|---|---|---|
| Tipo de Análise | P_TIPOANALISE | Obrigatório na tela; sem ele a consulta não roda. |
| Empresa | P_FL_COD | Obrigatório na tela. |
| Tipo de Empresa | P_TIPOEMPRESA | Específica, matriz, grupo SPED ou grupo econômico. |
| Período (de / até) | P_ME_ENT1 / P_ME_ENT2 | Ambas obrigatórias na tela. |
| Resultado | P_TIPORESULTADO | Todos, positivos ou negativos. |
| Cliente | P_CF_COD | |
| Grupo Empresarial | P_CLI_CF_COD | |
| Região | P_REG_COD | |
| Estado | P_CF_ESTADO | |
| Vendedor | P_VD_COD | |
| Supervisor | P_GV_COD | |
| Produto | P_PD_COD | |
| Grupo / Subgrupo | P_GP_COD / P_SG_COD | |
| Tipo / Linha | P_TP_COD / P_LP_COD | |
| Documento | P_FT_COD | |
| CFOP | P_NP_COD | |
| Bonificação | P_BONIFICACAO | |
| Abate Devolução | P_ABATEDEVOLUCAO | |
| Processo de Importação | P_PIM_COD | Considerado apenas nos tipos 3, 4 e 18. |
| não existe na tela | P_PAIS | Separa mercado interno e externo. Exclusivo da API. |
Diferenças de comportamento
| Aspecto | Na tela do ERP | Via API |
|---|---|---|
| Apresentação | Tipos 1 a 17 abrem em grade; o tipo 18 troca a grade por um cubo (tabela dinâmica) com as dimensões já montadas. | Sempre a mesma estrutura de linhas — o cubo é responsabilidade do seu projeto. |
| Colunas exibidas | A grade mostra apenas as colunas do tipo escolhido e esconde as demais. | Todas as colunas vêm na resposta; as que não pertencem ao tipo vêm nulas. Use fields para enxugar. |
| Custo e margem | Podem ser ocultados por nível de acesso do usuário. | O controle é a liberação do objeto para a chave de API. |
| Processar período | Disponível como botão na própria tela. | Não disponível — depende da retaguarda. |
| Navegação | Duplo clique numa linha abre o documento de origem. | Com FL_COD, CF_TIPO e FT_COD você monta o próprio link ou consulta o documento. |
Roteiro de conferência. Reproduza na tela exatamente os parâmetros do seu painel — inclusive bonificação, abate de devolução e tipo de resultado — e compare o total do rodapé com a soma do seu gráfico. Se divergir, a causa quase sempre é um destes quatro: período em data de emissão em vez de movimentação, devolução considerada de um lado só, bonificação incluída de um lado só, ou empresa expandida por grupo em um dos lados.
Receitas de gráfico
Combinações que resolvem as perguntas mais comuns de um painel comercial. Todas usam method: GET sobre PRC_RES_ANALISEVENDAS2, salvo indicação em contrário.
| Pergunta de negócio | Tipo de análise | Colunas do gráfico |
|---|---|---|
| Curva diária de faturamento no mês | 1 — Dia | Eixo ME_ENT; valor ME_VLRPRODUTO. |
| Faturamento por empresa do grupo | 5 — Empresa (com P_TIPOEMPRESA 2 ou 3) | FL_DES × ME_VLRPRODUTO. |
| Top 20 produtos por receita | 8 — Produto | PD_DES × ME_VLRPRODUTO, com orderBy decrescente e limit. |
| Mix de receita por grupo de produto | 9 ou 10 | Pizza de GP_DES sobre ME_VLRPRODUTO. |
| Ranking de vendedores com comissão | 7 — Vendedor | VD_NOM, ME_VLRPRODUTO, VD_VALCOM. |
| Margem por cliente | 6 — Cliente | CF_RSOCIAL, ME_VLRESULTADO, ME_PCTRESULTADO. |
| Clientes com margem negativa | 6 com P_TIPORESULTADO = 2 | Lista ordenada por ME_VLRESULTADO crescente. |
| Mapa de vendas por estado ou região | 14 ou 15 | CF_ESTADO / REG_DES × ME_VLRPRODUTO. |
| Mercado interno × externo | 13 — Países, ou P_PAIS | PS_NOME × ME_VLRPRODUTO. |
| Composição da margem (cascata) | 3 ou 18 | ME_VLRPRODUTO menos custo, impostos, frete e comissões, coluna a coluna. |
| Série mensal multiempresa para carga noturna | PRC_RES_BIANALISEVENDAS | MES_NOME × ME_VLRPRODUTO, quebrado por FL_DES. |
| Cubo próprio (tabela dinâmica no seu projeto) | 18 — Cubo de Vendas | Todas as dimensões; agregue no cliente. |
Cuidado com o eixo de tempo em análise agregada. Fora dos tipos 1, 2, 3 e 18, o retorno não traz data — a soma cobre o período inteiro em uma linha por grupo. Para uma série temporal por produto ou por cliente, faça uma chamada por período (um mês por vez) e monte a série do seu lado, ou use o grão de item (18) e agregue no cliente.
Resultados inesperados e erros
As duas procedures são de leitura e raramente falham; o desafio é interpretar um retorno que não corresponde à expectativa. A tabela abaixo cobre as situações recorrentes.
| Sintoma | Causa provável | Ação |
|---|---|---|
| Resposta com zero linhas | Período não processado na retaguarda | Confirmar o processamento do período para as empresas envolvidas (Passo 1). |
| Notas recentes ausentes | Faturamento posterior ao último processamento | Solicitar o reprocessamento do intervalo. |
Uma única linha com FL_DES = "Sem dados para exibir" | Retorno de PRC_RES_BIANALISEVENDAS sem movimento no período | Tratar como conjunto vazio antes de somar ou plotar. |
| Colunas nulas que você esperava preenchidas | A dimensão não pertence ao P_TIPOANALISE escolhido | Trocar o tipo de análise (Passo 2). |
ME_CUSTOUNIT nulo | Só é calculado nos tipos 3 e 18 | Usar o grão de item, ou dividir ME_CUSTO pela quantidade. |
| Total menor que o do ERP | Devoluções ou bonificações fora da conta | Alinhar P_ABATEDEVOLUCAO e P_BONIFICACAO com o relatório de referência. |
| Total maior que o esperado | Empresa expandida por matriz ou grupo | Revisar P_TIPOEMPRESA. |
| Filtro por código ignorado | Valor 0, nulo ou vazio não filtra | Enviar o código real, sempre maior que zero. |
| Menos linhas do que deveria | Limite padrão de registros da consulta | Declarar limit e paginar com offset. |
| Empresa esperada não aparece | Usuário do token sem acesso àquela empresa | Solicitar a liberação de acesso ao gestor do ERP Spalla. |
400 com Format 'SELECT TOP 50...' invalid or incompatible with argument | % usado em calculatedFields | Substituir por LOCATE(CAMPO, 'texto'). |
| Resposta demorada ou interrompida | Período longo, sem filtros, em horário de pico | Reduzir o intervalo, aplicar filtros, escolher um agrupamento mais alto ou agendar a carga fora do horário comercial. |
Quando a requisição de fato falha, a mensagem original gerada no servidor é retornada no corpo da resposta — trate-a e registre-a; ela costuma nomear o parâmetro ou a cláusula que causou o problema.
Dica — identificar a tabela e o campo a partir da interface do ERP
Atalho para inspeção visual. Ao operar a tela Avaliação de Venda Líquida diretamente pela interface do ERP, pressione Ctrl + Alt + Shift + H. O sistema altera o título da janela indicando que o modo de identificação está ativo. A partir daí, ao parar o mouse sobre qualquer campo da tela, aparece um hintbox mostrando o nome da tabela e da coluna do banco às quais aquele campo está vinculado. É a forma mais rápida de descobrir qual coluna do retorno corresponde a cada coluna da grade — e de reproduzir na API o número que o usuário está vendo na tela.
Relação com os demais guias
A análise de vendas é o desfecho de uma cadeia documentada nas páginas irmãs. Quando um número do painel parece errado, a origem costuma estar num destes elos:
- Pedido de Venda — onde nasce a venda. Preço, desconto, vendedor e condição de pagamento definidos ali reaparecem aqui como faturamento, desconto e comissão.
- Cadastro de Produto — grupo, subgrupo, tipo e linha do produto são as dimensões dos tipos de análise
8a12. Produto sem classificação vira um grupo vazio no gráfico. - Cadastro de Pessoas — região, estado, país e grupo empresarial do cliente são as dimensões dos tipos
13a16. Cliente sem região não aparece na análise por região. - Contas a Pagar/Receber — a análise mede o resultado da venda, não o recebimento. Faturamento e caixa são perguntas diferentes, respondidas por objetos diferentes.
Onde aprofundar
Esta página é um guia operacional — descreve o que consultar, com quais parâmetros e como interpretar o retorno. Para como exatamente montar cada requisição (lista completa de parâmetros e colunas, tipos de dado, cláusulas do GET e formato de datas e números), a fonte autoritativa é o dicionário oficial da sua instância, em https://<host>:<porta>/root/dicionario?userToken=<token>.
O dicionário é gerado dinamicamente a partir do banco de dados da própria instalação, refletindo sempre o estado atual da API liberada para aquela chave.
Uma terceira opção para série mensal. A instalação pode ter liberado também PRC_RES_BIANALISEVENDASPORMES, da mesma família e com os mesmos três parâmetros de PRC_RES_BIANALISEVENDAS, porém com o retorno já agregado por mês — útil quando o painel precisa apenas da série mensal e não do grão de item. Verifique no dicionário oficial se ela está liberada para a sua chave.