Tutoriales

5 casos prácticos con el Service Layer

Situaciones habituales del día a día con SAP Business One resueltas sin DTW, sin macros y sin tocar cada ficha una a una. Cada ejemplo incluye el objeto de SAP implicado, los campos relevantes y la petición HTTP completa.

Objeto: BusinessPartners Nivel: básico Sin DTW

🚚 Cambiar la agencia de transporte de todos los clientes de una provincia

Un caso muy típico: la empresa cambia de transportista en una zona concreta (por ejemplo, toda la provincia de Valencia) y hay que actualizar la agencia asignada en decenas o cientos de fichas de cliente. Hacerlo a mano ficha por ficha es lento y propenso a errores; con DTW hay que preparar un fichero cada vez.

1

Localiza los clientes de la provincia

Filtramos BusinessPartners por la dirección asociada, usando el código de provincia (campo State en las direcciones del cliente):

GET /b1s/v2/BusinessPartners
    ?$select=CardCode,CardName,ShippingType
    &$filter=BPAddresses/any(a:a/State eq 'V')
    &$filter=CardType eq 'cCustomer'
2

Actualiza el transportista de cada cliente

El campo ShippingType apunta al código de la tabla de tipos de transporte de SAP (agencias configuradas en Administración → Definiciones → Ventas/Compras → Tipos de envío). Con el código de la nueva agencia, se actualiza cada cliente encontrado:

PATCH /b1s/v2/BusinessPartners('C20045')
{
  "ShippingType": 4
}

// Repite la llamada para cada CardCode obtenido en el paso 1
3

(Opcional) Aplica también al documento por defecto

Si el transportista se fija también a nivel de pedido/albarán mediante el campo TransportationCode, el mismo patrón de filtro + PATCH se aplica sobre Orders o DeliveryNotes abiertos de esos clientes.

Resultado: lo que antes era "preparar un Excel, exportarlo, revisar el DTW y ejecutarlo" pasa a ser una consulta filtrada y un bucle de actualizaciones — repetible, con registro de qué se cambió y reversible si algo no encaja.
Objeto: PriceLists / SpecialPrices Nivel: intermedio Sin DTW

💶 Actualizar precios y descuentos sin abrir el asistente de precios

Subidas de tarifa, promociones puntuales o descuentos por cliente son de las tareas más repetitivas en cualquier ERP. El Service Layer permite tanto actualizar una lista de precios completa como aplicar precios especiales a clientes concretos.

1

Sube un % a toda una lista de precios

Cada línea de PriceLists contiene los artículos con su precio. Se puede leer la lista, calcular el nuevo precio en tu script y hacer PATCH de las líneas:

PATCH /b1s/v2/PriceLists(2)
{
  "PriceListsLines": [
    { "ItemCode": "A00001", "Price": 128.50 },
    { "ItemCode": "A00002", "Price": 64.90 }
  ]
}
2

Aplica un descuento especial a un cliente concreto

Para descuentos por cliente/artículo (lo que en SAP se ve como "Precios especiales para socios de negocio"), se usa el objeto SpecialPrices:

POST /b1s/v2/SpecialPrices
{
  "CardCode": "C20045",
  "SpecialPrices": [
    { "ItemNo": "A00001", "Discount": 12.5 }
  ]
}
3

Verifica el resultado antes de propagarlo

Una simple GET tras la actualización confirma que el precio ha quedado como se espera, algo mucho más rápido que navegar por pantallas del cliente SAP para revisar artículo a artículo.

Recomendación: para subidas grandes de tarifa, prueba primero en un entorno de test o sobre 2-3 artículos antes de lanzar la actualización sobre toda la lista.
Objeto: StockTransfers / Items Nivel: intermedio

📦 Consultar y mover stock entre almacenes

Saber en tiempo real cuánto stock hay en cada almacén, y traspasar cantidades entre ellos, es otra tarea que muchas empresas siguen haciendo desde la pantalla de traspasos de SAP, artículo por artículo.

1

Consulta el stock de un artículo por almacén

GET /b1s/v2/Items('A00001')
    ?$select=ItemName,ItemWarehouseInfoCollection

La colección ItemWarehouseInfoCollection devuelve el stock disponible en cada almacén configurado.

2

Genera un traspaso entre almacenes

POST /b1s/v2/StockTransfers
{
  "DocDate": "2026-08-01",
  "FromWarehouse": "ALM-CEN",
  "ToWarehouse": "ALM-VLC",
  "StockTransferLines": [
    { "ItemCode": "A00001", "Quantity": 40,
      "WarehouseCode": "ALM-VLC", "FromWarehouseCode": "ALM-CEN" }
  ]
}
3

Automatiza reglas de reposición

Combinando la consulta de stock mínimo con esta creación de traspasos, es posible programar un proceso que detecte roturas de stock en un almacén y genere el traspaso automáticamente desde el almacén central.

Objeto: BusinessPartners Nivel: básico

🧾 Dar de alta o actualizar clientes desde tu web o CRM

Cuando un cliente se registra en tu web, en un formulario de captación o en un CRM externo, esperar a que alguien lo introduzca manualmente en SAP retrasa el proceso comercial. El Service Layer permite crear la ficha en el momento.

1

Comprueba si el cliente ya existe

GET /b1s/v2/BusinessPartners
    ?$filter=FederalTaxID eq 'B12345678'
2

Crea la ficha si no existe

POST /b1s/v2/BusinessPartners
{
  "CardCode": "C20099",
  "CardName": "Nueva Empresa S.L.",
  "CardType": "cCustomer",
  "FederalTaxID": "B12345678",
  "EmailAddress": "contacto@nuevaempresa.com",
  "BPAddresses": [
    { "AddressName": "Principal", "State": "V", "AddressType": "bo_ShipTo" }
  ]
}
3

Actualiza campos si ya existía

Si el filtro del paso 1 devuelve un resultado, en lugar de crear se hace PATCH sobre el CardCode existente — evitando duplicados, uno de los problemas más habituales al integrar SAP con webs y CRMs externos.

Objeto: Orders Nivel: intermedio

🔁 Automatizar la creación de pedidos desde otros sistemas

Tiendas online, marketplaces, EDI de clientes grandes o apps de pedido de comerciales: en todos estos casos el pedido "nace" fuera de SAP y hay que introducirlo dentro. Repetirlo a mano cada vez es la principal fuente de errores de fecha, precio o dirección de envío.

1

Recibe el pedido en tu sistema externo

Ya sea desde una web, un marketplace o un fichero EDI, tu integración traduce ese pedido al formato que espera SAP.

2

Crea el pedido de venta directamente en SAP

POST /b1s/v2/Orders
{
  "CardCode": "C20045",
  "DocDate": "2026-08-01",
  "DocDueDate": "2026-08-05",
  "DocumentLines": [
    { "ItemCode": "A00001", "Quantity": 5, "UnitPrice": 128.50 },
    { "ItemCode": "A00007", "Quantity": 2 }
  ]
}
3

Confirma y notifica

La respuesta de SAP incluye el DocEntry del pedido creado, que se puede devolver al sistema de origen (por ejemplo, para mostrar "Pedido confirmado nº 10452" al cliente) o registrar en tu propio log de integración.

Este mismo patrón sirve para automatizar facturas, entregas o cualquier otro documento de SAP: recibir el evento fuera, traducirlo y crearlo por API — sin intervención manual y sin esperar a que alguien lo teclee.

¿Alguno de estos casos se parece al tuyo?

Cuéntanos qué proceso te gustaría simplificar en tu SAP B1 y vemos juntos si el Service Layer es la solución adecuada.

Escríbenos