Perguntas CadastroGeral/Produtos

Mais
1 mês 3 horas atrás - 1 mês 3 horas atrás #164 por Emerson
CadastroGeral/Produtos foi criado por Emerson
API WSG1/SFI — Carga de Produtos e Insumos
Documentação técnica dos endpoints Datasnap REST para importar o catálogo de produtos e insumos do ERP SFI (WSG1).




1. Visão geral

A integração é feita via Datasnap REST, exposto pelo próprio servidor SFI de cada empresa (multi-tenant: cada empresa tem seu host próprio, campo empresa.sfi, ex.: 192.168.0.10:8080).
  • Base URL:
    http://{empresa.sfi}/Datasnap/rest/
  • Autenticação: HTTP Basic Auth
  • Header:
    Accept: application/json
  • Formato: JSON (response)

As credenciais Basic Auth são globais para todas as empresas (não são por tenant), configuradas via variáveis de ambiente:
EXTERNAL_API_USER=...
EXTERNAL_API_PASS=...




2. Endpoint de Produtos

GET
/Datasnap/rest/TCadastroGeral/Produtos/{vendedor}/{cliente}/{tabela_preco}/{cod_produto}/{cod_barra}/{descricao}/{cod_secao}/{referencia}/{cod_grupo}/{cod_subgrupo}/{pagina}/{tipo_consulta}/{filial}/

Autenticação: Basic Auth (obrigatório)

2.1. Parâmetros
#ParâmetroTipoObrigatórioValor usado pelo Painel OSDescrição
1vendedorintegersim0Código do vendedor. Não filtrado (sempre 0 = todos).
2clienteintegersim0Código do cliente, para preços/tabelas específicas. Não usado (sempre 0).
3tabela_precointegersimempresa.tabela_preco (padrão 1)ID da tabela de preço a aplicar no retorno.
4cod_produtointegernãovazioFiltro por produto específico.
5cod_barrastringnãovazioFiltro por código de barras.
6descricaostringnãovazioFiltro textual por descrição.
7cod_secaostringnãovazioFiltro por seção.
8referenciastringnãovazioFiltro por referência.
9cod_grupointegernão0Filtro por grupo (0 = todos).
10cod_subgrupointegernão0Filtro por subgrupo (0 = todos).
11paginaintegersimincrementa a partir de 1Página da consulta (paginação server-side no ERP).
12tipo_consultaenumnãovazioTTipoConsultaProdutos — não usado pelo Painel OS.
13filialstringnãovazioFilial de origem. Não usado pelo Painel OS.

2.2. Exemplo de chamada
GET http://192.168.0.10:8080/Datasnap/rest/TCadastroGeral/Produtos/0/0/1/0/////0/0/1//

(tabela_preco = 1, página = 1, demais filtros vazios)




3. Exemplo de resposta (response)

A resposta é um array JSON puro na raiz, uma linha por produto:
[
  {
    "idpro": 10,
    "xdesc": "FILTRO DE OLEO XPTO",
    "prc_sug": 45.90,
    "xunid": "UN",
    "marca": "TECFIL",
    "ref": "PSL-123",
    "idsec": 2,
    "idgrp": 5,
    "idsgp": 12,
    "saldo": 8
  },
  {
    "idpro": 11,
    "xdesc": "PASTILHA DE FREIO DIANTEIRA",
    "prc_sug": 189.00,
    "xunid": "PC",
    "marca": "BOSCH",
    "ref": "PF-998",
    "idsec": 2,
    "idgrp": 6,
    "idsgp": 14,
    "saldo": 3
  }
]

O client também aceita variações onde a lista vem envelopada em vez de estar na raiz:
{
  "data": [
    { "IDPRO": 10, "XDESC": "FILTRO DE OLEO XPTO", "PRC_SUG": 45.90, "XUNID": "UN", "MARCA": "TECFIL", "REF": "PSL-123", "IDSEC": 2, "IDGRP": 5, "IDSGP": 12, "SALDO": 8 }
  ]
}

Chaves de envelope aceitas (testadas nesta ordem): data, Data, result, Result, value, Value. Se nenhuma existir e o payload não for uma lista, o objeto único é tratado como 1 registro.




4. Schema dos campos do produto

As chaves podem vir em minúsculas ou maiúsculas (variação do driver Datasnap) — o mapeador do Painel OS aceita ambas.
Campo (minúsculo / MAIÚSCULO)TipoObrigatórioDescrição
idpro / IDPROintegersimIdentificador do produto no SFI. Se ausente ou vazio, o registro é rejeitado com erro.
xdesc / XDESCstringnão (default: "")Descrição/nome do produto.
prc_sug / PRC_SUGdecimalnão (default: 0)Preço sugerido de venda.
xunid / XUNIDstringnão (default: "")Unidade de medida (UN, CX, PC, LT, etc.).
marca / MARCAstringnão (default: "")Marca/fabricante.
ref / REFstringnão (default: "")Código de referência do fabricante.
idsec / IDSECintegernão (default: null)ID da seção do produto.
idgrp / IDGRPintegernão (default: null)ID do grupo do produto.
idsgp / IDSGPintegernão (default: null)ID do subgrupo do produto.
saldo / SALDOintegernão (default: 0)Saldo em estoque.




5. Paginação

Não existe campo de "total de páginas" ou "hasMore" retornado pela API. o segmento {pagina} a cada chamada, começando em 1, até que uma resposta venha vazia (lista com 0 itens) — esse é o sinal de fim.
  1. pagina = 1 → .../1//
  2. pagina = 2 → .../2//
  3. ... até a resposta vir (vazia)




6. Erros
SituaçãoComportamento
HTTP não 2xxExceção é lançada e a carga é interrompida (sem retry automático). Erro é logado com URL, status e corpo da resposta.
Produto sem idpro/IDPRORegistro rejeitado com erro de argumento inválido — carga da página inteira falha.
Resposta vazia ( ou objeto não reconhecido)Tratada como fim normal da paginação (não é erro).




7. Endpoint de Insumos (via consulta SQL genérica)

Insumos não usa o endpoint posicional TCadastroGeral/Produtos — usa o endpoint genérico de execução de SQL somente-leitura no ERP.

POST
/Datasnap/rest/TOnLine/%22RequisicaoSQL%22

(o path contém "RequisicaoSQL" com aspas duplas URL-encoded — %22)

Body:
{
  "sql": "select first 500 skip 0
    v.produtoid as idpro,
    v.descricao as xdesc,
    coalesce(nullif(v.preco_prz1, 0), nullif(v.preco_avista, 0), nullif(v.preco_base, 0), 0) as prc_sug,
    v.unidade as xunid,
    vw.marca_descricao as marca,
    v.referencia as ref,
    v.secaoid as idsec,
    v.grupoid as idgrp,
    v.subgrupoid as idsgp,
    coalesce(vw.saldo_estoque, 0) as saldo,
    p.tipo as tipo_sfi
  from view_produto v
  join produto p on p.produtoid = v.produtoid
  left join vw_produto vw on vw.produtoid = v.produtoid
  where v.tabelaid = 1
    and coalesce(p.suspenso, '') in ('', 'N')
    and coalesce(p.tipo, '') in ('2','7','9','11')
  order by v.produtoid"
}
Parâmetro (interpolado no SQL)TipoObrigatórioPadrãoDescrição
tabela_precointegersim1ID da tabela de preço da empresa no SFI.
tamanho_paginainteger500 (fixo)Quantidade de registros por página, via SELECT FIRST n.
offsetintegersim(pagina - 1) × 500Deslocamento da paginação, via SKIP m.

Filtro de tipo: apenas p.tipo em 2, 7, 9, 11 (tipos SFI que classificam insumos de produção). Servidor só aceita SQL iniciando com SELECT ou WITH (validação client-side).

Schema de resposta: igual ao de Produtos (seção 4), acrescido de:
CampoTipoDescrição
tipo_sfi / TIPO_SFIstringTipo do produto no SFI (2, 7, 9 ou 11).

Exemplo de item:
{
  "idpro": 55,
  "xdesc": "TINTA AUTOMOTIVA PRETA 900ML",
  "prc_sug": 78.20,
  "xunid": "LT",
  "marca": "SHERWIN",
  "ref": "TA-900",
  "idsec": 4,
  "idgrp": 9,
  "idsgp": 20,
  "saldo": 15,
  "tipo_sfi": "7"
}




 
Ultima edição: 1 mês 3 horas atrás por Emerson.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.037 segundos
Topo