Importação de Produtos (Items) do SAP B1
📌 Descrição do Processo
A importação de produtos representa o fluxo de sincronização de itens cadastrados no SAP B1 para o WMS. O SAP B1 mantém o cadastro master de produtos (Items), enquanto o WMS recebe esses dados para controle de estoque e operações de armazém.
A integração garante que os produtos cadastrados no SAP B1 sejam automaticamente sincronizados com o WMS, incluindo atualizações de dados existentes.
Importante
Este processo utiliza cursor para paginação e suporta atualização de dados de produtos já existentes no WMS.
🔄 Fluxo de Importação
-
Consulta no SAP B1 (GET)
- O WMS consome a API
Itemspara buscar produtos. - Utiliza cursor para paginação, buscando apenas registros novos ou alterados.
- Suporta atualização de produtos já existentes.
- O WMS consome a API
-
Processamento no WMS
- Os produtos são convertidos para o modelo interno do WMS.
- Produtos novos são criados, existentes são atualizados.
- Dados como descrição, preço, dimensões são sincronizados.
-
Persistência no WMS
- Produtos são salvos/atualizados no banco de dados do WMS.
- Cursor de integração é atualizado para próxima execução.
- Log de auditoria é registrado para cada operação.
🖥️ APIs Envolvidas
-
SAP B1 → WMS (GET)
/Items→ retorna produtos cadastrados no B1.- Suporte a paginação via cursor.
- Filtros por data de modificação para atualizações.
- Filtro de prefixos: Apenas produtos com códigos iniciados em:
MA(Matérias-primas)MP(Materiais de produção)PA(Produtos acabados)PI(Produtos intermediários)UC(Unidades de consumo)
📦 Exemplo de Importação (Objeto Fictício)
Cenário:
- Produto: PA-789 – Bateria 60Ah
- Categoria: Baterias Automotivas
- Dimensões: 30x20x20 cm
- Peso: 15 kg
1. Produto no SAP B1
{
"ItemCode": "PA-789",
"ItemName": "Bateria 60Ah",
"ItemType": "itItems",
"Valid": "Y",
"SalesItem": "Y",
"PurchaseItem": "Y",
"InventoryItem": "Y",
"ItemProperties": [
{
"PropertyCode": "DIMENSIONS",
"PropertyValue": "30x20x20"
},
{
"PropertyCode": "WEIGHT",
"PropertyValue": "15"
}
]
}
2. Importação no WMS
- Produto importado/atualizado com sucesso
- Dados sincronizados com o B1
- Produto disponível para operações de armazém
✅ Regras de Negócio
- Apenas produtos com
Valid = "Y"são importados. - Filtro por prefixo: Apenas produtos com códigos iniciados em
MA,MP,PA,PIouUC. - Produtos podem ser atualizados se já existirem no WMS.
- A importação é incremental, utilizando cursor para paginação.
- Em caso de falha, o sistema registra log de erro para análise.
- Produtos com
InventoryItem = "Y"têm prioridade na sincronização. - Remoção de dígito verificador: Aplicada automaticamente após importação.
- Operações logísticas: Configuradas por integração (ex: operação
116).
Resumo
Esse fluxo garante que os produtos cadastrados no SAP B1 sejam automaticamente importados e atualizados no WMS, mantendo a sincronização de dados master.
⚙️ Especificações Técnicas
Fluxo de execução
- Query: Consulta os dados no B1, utilizando o
B1QueryCursorpara buscar apenas registros novos ou alterados desde a última execução, com suporte a paginação. - Parse: Converte os dados retornados do B1 para os modelos internos do sistema, identificando produtos novos e existentes.
- Send: Salva/atualiza os registros convertidos no banco de dados do sistema, atualiza cursor da integração e registra cada operação na tabela de auditoria
IntegrationTracking.
Detalhamento das Etapas
Query
B1ProductImportService.ImportProductsAsync()
└── B1ProductImportService.GetErpIntegrationProductsAsync()
└── B1ItemConnector.GetAllItemsAsync()
- B1ProductImportService.ImportProductsAsync(): Inicia o processo de consulta dos produtos a serem integrados para todas as integrações B1 ativas.
- B1ProductImportService.GetErpIntegrationProductsAsync(): Para cada integração ERP configurada, prepara a configuração B1 e o cursor, aplicando filtros de prefixo.
- B1ItemConnector.GetAllItemsAsync(): Executa a consulta no SAP B1, retornando apenas produtos válidos (
Valid = "Y") e filtrando incrementalmente pelo cursor (UpdateDate), com suporte a paginação e filtro de prefixos (MA,MP,PA,PI,UC).
Parse
B1ItemImportIntegrator.Parse()
└── B1ItemImportService.ParseB1IntegratedItems()
└── B1ItemImportService.ParseB1ItemsToWms()
- B1ItemImportIntegrator.Parse(): Converte os dados brutos dos produtos do B1 para o modelo interno do sistema.
- B1ItemImportService.ParseB1IntegratedItems(): Agrupa os produtos por integração e chama o parser.
- B1ItemImportService.ParseB1ItemsToWms(): Mapeia os dados do B1 para os modelos internos (
ProductImport,ProductUpdate), identificando se é criação ou atualização.
Send
B1ProductImportService.SaveProductsAsync()
├── RecordProductService.RecordProductsAsync()
├── DigitCalculator.RemoveProcedureDigit()
├── B1ProductImportService.SaveIntegrationTrackingsAsync()
└── B1ProductImportService.UpdateIntegrationCursorAsync()
- B1ProductImportService.SaveProductsAsync(): Persiste os dados convertidos no sistema.
- RecordProductService.RecordProductsAsync(): Salva/atualiza os produtos no banco de dados com validação.
- DigitCalculator.RemoveProcedureDigit(): Remove dígito verificador dos produtos após importação.
- SaveIntegrationTrackingsAsync(): Registra cada operação de integração na tabela de auditoria
IntegrationTracking. - UpdateIntegrationCursorAsync(): Atualiza o cursor de integração com o último produto processado, garantindo incrementalidade e paginação. Em caso de erro, usa o timestamp do último produto com falha.
Resumo do Funcionamento
- Consulta incremental com paginação: Apenas produtos válidos e não processados anteriormente são buscados, utilizando o cursor para filtrar por data e identificadores, com suporte a paginação para grandes volumes.
- Filtro por prefixo: Apenas produtos com códigos iniciados em
MA,MP,PA,PIouUCsão importados. - Conversão e identificação: Os dados do B1 são convertidos para os modelos internos, identificando produtos novos e existentes.
- Persistência e rastreabilidade: Todos os dados são salvos/atualizados no banco de dados do sistema, com remoção automática de dígito verificador e cada operação é registrada para auditoria e troubleshooting.
- Tratamento de erros: Em caso de falha, o cursor é atualizado com o timestamp do último produto com erro, permitindo reprocessamento.