Tabela OITW no SAP Business One (Estoque do item por depósito)
OITW é a tabela do SAP Business One que guarda o estoque de cada item em cada depósito: em estoque, confirmado em pedidos de venda e pedido a fornecedores. A chave é ItemCode mais WhsCode, e ela se relaciona com a OITM por ItemCode e com a OWHS por WhsCode.
Campos-chave da OITW
| Campo | O que contém |
|---|---|
ItemCode | Item. Relaciona com OITM.ItemCode. |
WhsCode | Depósito. Relaciona com OWHS.WhsCode. |
OnHand | Estoque físico neste depósito. |
IsCommited | Quantidade confirmada em pedidos de venda em aberto neste depósito. |
OnOrder | Quantidade em pedidos de compra em aberto para este depósito. |
MinStock | Estoque mínimo deste item neste depósito. |
AvgPrice | Custo do item neste depósito quando os custos são controlados por depósito. |
Locked | Y se o item está bloqueado neste depósito. |
Como a OITW se relaciona com outras tabelas
A OITW é filha da OITM: um item tem uma linha na OITW para cada depósito ao qual está vinculado, mesmo com estoque zero. Ela não é uma tabela de linhas de documento, então não existe DocEntry; o par ItemCode + WhsCode identifica uma linha. As posições de depósito, quando ativas, acrescentam mais um nível na OIBQ e na OBIN.O depósito em si (nome, indicador de depósito considerado no MRP, posições) fica natabela OWHS.
Joins mais comuns
OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode (descrição do item, grupo)OITW T0 INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode (nome do depósito)
Quando usar a tabela OITW
Leia a OITW sempre que a pergunta for “quanto há deste item naquele depósito”: disponibilidade para vendas, listas de estoque por filial, reposição por depósito e avaliação do estoque por depósito. O estoque disponível costuma ser OnHand - IsCommited + OnOrder, ou OnHand - IsCommited se você não conta os pedidos de compra em aberto.
Consulta de exemplo: estoque disponível por item e depósito
SQL Server
SELECT T0.ItemCode, T1.ItemName, T0.WhsCode, T2.WhsName, T0.OnHand, T0.IsCommited, T0.OnOrder, T0.OnHand - T0.IsCommited + T0.OnOrder AS Available FROM OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode WHERE T0.OnHand <> 0 OR T0.IsCommited <> 0 ORDER BY T0.ItemCode, T0.WhsCode
SAP HANA (nomes de colunas entre aspas duplas)
SELECT T0."ItemCode", T1."ItemName", T0."WhsCode", T2."WhsName", T0."OnHand", T0."IsCommited", T0."OnOrder", T0."OnHand" - T0."IsCommited" + T0."OnOrder" AS "Available" FROM OITW T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" INNER JOIN OWHS T2 ON T0."WhsCode" = T2."WhsCode" WHERE T0."OnHand" <> 0 OR T0."IsCommited" <> 0 ORDER BY T0."ItemCode", T0."WhsCode"
Cole qualquer uma das duas versões em Ferramentas → Consultas → Gerador de consultas. Precisa do outro dialeto para a sua própria consulta? Use o conversor de SQL para HANA.
Estoque total entre depósitos (apenas os considerados no MRP)
Para obter um único número de estoque por item somando vários depósitos, some as linhas da OITW por item. Faça join com a OWHS por WhsCode e mantenha apenas os depósitos com OWHS.Nettable = 'Y' (os depósitos que o MRP considera); assim, depósitos de devolução ou de qualidade marcados como não considerados ficam de fora. O estoque menos o confirmado é o que ainda pode ser prometido; some OnOrder para obter o disponível que conta os pedidos de compra em aberto.
SQL Server
SELECT T0.ItemCode, T1.ItemName, SUM(T0.OnHand) AS InStock, SUM(T0.IsCommited) AS Committed, SUM(T0.OnHand - T0.IsCommited) AS FreeStock, SUM(T0.OnHand - T0.IsCommited + T0.OnOrder) AS Available FROM OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode WHERE T2.Nettable = 'Y' GROUP BY T0.ItemCode, T1.ItemName ORDER BY T0.ItemCode
SAP HANA
SELECT T0."ItemCode", T1."ItemName", SUM(T0."OnHand") AS "InStock", SUM(T0."IsCommited") AS "Committed", SUM(T0."OnHand" - T0."IsCommited") AS "FreeStock", SUM(T0."OnHand" - T0."IsCommited" + T0."OnOrder") AS "Available" FROM OITW T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" INNER JOIN OWHS T2 ON T0."WhsCode" = T2."WhsCode" WHERE T2."Nettable" = 'Y' GROUP BY T0."ItemCode", T1."ItemName" ORDER BY T0."ItemCode"
Erro comum: IsCommited, com um t só, e linhas com estoque zero
A coluna de confirmado se escreve IsCommited, então IsCommitted gera um erro de “invalid column” (coluna inválida). A OITW também guarda uma linha para cada depósito vinculado mesmo com estoque zero, então filtre OnHand <> 0 (ou OnHand, IsCommited e OnOrder) para manter a lista curta. Veja Consulta de estoque por depósito com variantes.
Consultas prontas que usam a OITW (em inglês)
- Stock by warehouse: On hand, committed, ordered and available quantity per item and warehouse.
- Inventory value by warehouse: Stock quantity multiplied by the item average cost, totalled per warehouse.
Perguntas sobre a tabela OITW
Por que o total da OITW é diferente do OnHand do item na OITM?
OITM.OnHand é o estoque do item em todos os seus depósitos, enquanto a OITW guarda uma linha por depósito. A soma de OITW.OnHand em todas as linhas do item dá o mesmo número, então uma diferença quase sempre vem da consulta: um filtro de depósitos (só os considerados no MRP, só os ativos, uma filial) ou um join que descarta linhas, por exemplo um INNER JOIN com a OWHS com uma condição a mais. Compare primeiro os dois números sem nenhum filtro de depósito e depois volte a aplicar os filtros um por um.
Tabelas relacionadas
OITM (Itens (cadastro de itens)) · OWHS (Depósitos) · OINM (Diário de estoque (auditoria de estoque)) · ORDR (Pedido de venda (cabeçalho)) · INV1 (Nota fiscal de saída (linhas)) · pesquisar todas as tabelas do SAP Business One
Pronto para começar?
Diga do que você precisa. Você recebe uma resposta técnica clara, um escopo fechado e um preço, normalmente em até 24 horas.
