Inventario Almacén y Ubicaciones

Buenas días estimados… estoy tratando de usar en sap service layer algun end point que me diga por cada BinAbsEntry la cantidad que tengo de un XXX producto, por ejemplo si uso https://endpoint/b1s/v1/Items(‘SEHP0001’)/ItemWarehouseInfoCollection me da el total de lo que tengo en cada almacén, pero como hago para saber de ese total cuanto es de cada ubicación… Ejemplo en mi almacén Prueba tengo 2 ubicaciones, ubica1 y ubica2 a ubica1 se le asigno 10 pelotas y a ubica2 5 pelotas, en ItemWarehouseInfoCollection veo es las 15 el total, pero como hago para saber de esas de esas 15 cuanto le pertenece a cada ubicación?

Para obtener la cantidad de un producto específico en cada ubicación (BinAbsEntry) en SAP Business One utilizando el Service Layer, necesitas consultar la tabla de “Inventory Gen Exit Bin Location Line” (OIBQ) a través de un endpoint adecuado que te permita obtener la cantidad detallada por ubicación dentro del almacén.

Pasos para Obtener la Cantidad por Ubicación (BinAbsEntry)

  1. Verificar la Tabla de Ubicaciones de Inventario (OIBQ):

    • La tabla OIBQ contiene la información del inventario por ubicaciones. Necesitarás realizar una consulta a esta tabla para obtener los datos por ubicación.
  2. Utilizar el Endpoint del Service Layer:

    • Usa el endpoint /InventoryGenExits para obtener la información de inventario por ubicaciones específicas.

Ejemplo de Consulta al Service Layer

Para obtener la cantidad de un producto específico en cada ubicación (BinAbsEntry), puedes usar una consulta con el Service Layer de SAP Business One.

Paso 1: Endpoint para Obtener la Cantidad por Ubicación

Puedes usar una consulta GET con filtros para obtener la cantidad de un producto específico en cada ubicación dentro de un almacén.

Ejemplo de Endpoint:

GET /b1s/v1/InventoryGenExits?$filter=ItemCode eq 'SEHP0001'

Esta consulta te dará la lista de entradas de inventario general (InventoryGenExits) para el producto con el código SEHP0001. A partir de aquí, puedes filtrar y obtener los datos específicos de las ubicaciones.

Ejemplo Completo de Petición:

Supongamos que deseas obtener la cantidad del producto SEHP0001 en cada ubicación del almacén WH1. Aquí está un ejemplo completo de cómo puedes estructurar tu petición al Service Layer.

Paso 2: Estructura de la Petición HTTP

GET /b1s/v1/InventoryGenExits?$filter=ItemCode eq 'SEHP0001' and WarehouseCode eq 'WH1'

Alternativa con $expand y $select

Para obtener directamente la cantidad por ubicación, puede ser más específico utilizando la entidad BinLocations y expandiendo la información.

Ejemplo con $expand:

GET /b1s/v1/Items('SEHP0001')/ItemWarehouseInfoCollection?$expand=BinLocations

Nota:

Asegúrate de que la configuración y los permisos en tu SAP Business One Service Layer permiten la expansión de entidades relacionadas. También, ten en cuenta que el nombre exacto de las entidades puede variar según la configuración específica de tu sistema.

Resumen

Para obtener la cantidad de un producto en cada ubicación dentro de un almacén específico, utiliza el Service Layer de SAP Business One y consulta la tabla de inventario por ubicaciones (OIBQ) o usa los endpoints adecuados para filtrar y expandir la información necesaria.

Código de Ejemplo en una Petición HTTP:

GET /b1s/v1/InventoryGenExits?$filter=ItemCode eq 'SEHP0001' and WarehouseCode eq 'WH1'
Host: your-sap-service-layer-endpoint
Authorization: Basic {base64-encoded-credentials}

Este ejemplo te permitirá obtener los datos necesarios de las cantidades en cada ubicación específica para un producto dentro de un almacén en SAP Business One utilizando el Service Layer. Ajusta el endpoint y los filtros según tu configuración y necesidades específicas.

Estimado primero que nada gracias por tu tiempo y por la ayuda… intente hacer lo que comentas, pero creo tener problemas o de permisos / configuración…

Te comento.

  1. Tengo un almacén llamado PRUEBA, la cual tiene 3 ubicaciones, A,B,C
  2. A modo de prueba se hizo un traslado del producto SEHP0001 (casco de seguridad) de la siguiente manera.
    • PRUEBA/A (5 unidades)
    • PRUEBA/B (3 unidades)
    • PRUEBA/C (2 unidades)

Si realizo una consulta por el endpoint GET /b1s/v1/Items(‘SEHP0001’)/ItemWarehouseInfoCollection?$expand=BinLocations y realizo el filter con el WarehouseCode eq ‘PRUEBA’ efectivamente me da el valor InStock: 10 , que es la sumatoria de mis ubicaciones, peron no tengo data en BinLocations para saber la cantidad que tiene cada ubicación.

También hice una prueba de lo que comenta en Paso 2 de la siguiente manera:

https://endpoint/b1s/v1/$crossjoin(InventoryGenExits,InventoryGenExits/DocumentLines)?$expand=InventoryGenExits/DocumentLines($select=ItemCode,ItemDescription,Quantity,WarehouseCode,InventoryQuantity)&$filter=InventoryGenExits/DocumentLines/ItemCode eq 'SEHP0001' and InventoryGenExits/DocumentLines/WarehouseCode eq 'PRUEBA'

Me devuelve un valor vacío.

Hola, pero tendrías que hablar primero con tu área de sistemas para analizar los permisos. Trata de tener permisos para lograr todo esto

con todo el respeto @SidV que usted se merece… no entiendo que tipo de comentarios intenta hacer en cada una de los post que he revisado y usted está presente, solo son post donde aclara la política del foro o solo opiniones vacías… respeto su actitud, más no la comparto!!

Gracias @csapBot ya funciono y está todo ok… se pudo configurar el Service Layer y ahora si podemos hacer consultar SQL y con la información que me diste de usar la tabla OIBQ ahora si podemos tener los stock que pertenecen a un almacén junto sus cantidades…

Adjunto la sentencia SQL que utilice para tener la información.
{
“SqlCode”: “sqlA03”,
“SqlName”: “queryBinWareItems”,
“SqlText”: “select WhsCode,BinAbs,OnHandQty,ItemCode from OIBQ where ItemCode=‘SEHP0001’”
}

Estimado muchas pero muchas gracias.

Que mal que no comprendas las normas :slight_smile:

Estaría bueno leerte más ayudando y no solo preguntando xD