Crear factura con Service Layer

Buenas estimados,

Tengo un service layer para crear la factura y el pago, lo tuve que hacer por separado ya que no me permite crear la factura y el pago me sale un error, ahora bien me di cuenta que cuando el cliente esta configurado como al contado este pide que se cargue el pago inmediatamente es mas en el sap antes de crear la factura ya me pide que cargue el pago, esto quisiera hacerlo en service layer para no tener que desactivar esa opción y me deje generar la factura y el pago es posible?

:heavy_heart_exclamation: Importante :exclamation: La siguiente respuesta es generada por nuestro Robot AI de Consultoria-SAP denominado “CSAPBOT” usando tecnología de IA -inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales y usuarios del sistema podrían verificar la información. ¿Te animas a hacerlo? ¿Aceptas el reto? Puedes responder este debate si sigue abierto!

Si quieres aprender más sobre nuestros sistemas con AI, te esperamos en este artículo.


Hola estimado/a, gracias por tu consulta.

Este es un tema bastante común al trabajar con el Service Layer de SAP Business One (SAP B1) y la lógica de negocios cuando los clientes están configurados con condición de “Pago Contado” (Cash-Based Customers).


Comportamiento en SAP B1 estándar

Cuando configuras un cliente como “al contado” (GroupNum con Cash activo o definido sin crédito), SAP requiere que se registre el pago al momento de crear la factura. En la interfaz gráfica, esto es automático: al dar OK en la factura, te obliga a ingresar un pago.

Este comportamiento no se replica de forma automática en el Service Layer, lo cual genera errores como los que estás viendo si intentas crear la factura sin el pago en un solo paso.


¿Qué pasa en Service Layer?

En el Service Layer (SL), los objetos se crean de forma independiente:

  • POST a /Invoices → crea la factura.

  • POST a /IncomingPayments → crea el pago.

Pero SAP espera que si el cliente es de contado, el pago venga vinculado directamente al momento de la factura. Si no lo haces así, puede lanzar errores como:

"Error: Payment is required for cash-based customer"


Soluciones posibles

:white_check_mark: Opción 1: Crear primero la factura y luego el pago (lo que ya haces)

Esto funciona si temporalmente desactivas el check de “Contado” o cambias la condición de pago del cliente (lo que quieres evitar).

:white_check_mark: Opción 2: Crear el pago enlazado a la factura inmediatamente después

Una vez que generas la factura (y obtienes el DocEntry), puedes crear el pago apuntando al documento recién creado:

POST /IncomingPayments

{
  "CardCode": "C0001",
  "DocDate": "2025-11-04",
  "CashSum": 1000,
  "DocType": "rCustomer",
  "InvoicePayments": [
    {
      "DocEntry": 12345,
      "SumApplied": 1000
    }
  ]
}

Esto debe hacerse justo después de recibir la respuesta del POST /Invoices.

:warning: Advertencia: Si hay un chequeo de pago contado activo, debes asegurarte de que el pago sea generado en la misma sesión lógica de integración. Algunos desarrollos hacen esto como un “workflow” donde primero crean la factura y en el mismo flujo crean el pago con el ID de factura recibido.


¿Se puede enviar el pago directamente al crear la factura (como en UI)?

No directamente desde POST /Invoices, ya que el objeto de factura no tiene una estructura para anidar un pago en Service Layer. Esta integración automática (estilo GUI) no está soportada por la API de SL hasta la fecha de corte de esta respuesta.


Alternativa avanzada

Si necesitas forzar la creación conjunta por Service Layer sin cambiar configuración del cliente, una opción avanzada sería:

  • Crear una Factura de anticipo (tipo DownPaymentInvoice)

  • Luego generar la factura final y reconciliar los pagos

  • Esto requiere un flujo más complejo pero evita el chequeo del “pago inmediato”


Sugerencia adicional

En varios debates de los Foros SAP de Consultoria-SAP, se ha comentado que para clientes al contado lo más estable es:

  • Crear factura

  • Obtener DocEntry

  • Crear pago inmediatamente después

Y si hay lógica de negocio crítica, manejarlo desde un servicio intermedio (middleware) que controle errores y flujos.


Resumen Consultoria-SAP

  • SAP B1 obliga a ingresar el pago en clientes “al contado” al momento de crear la factura.

  • En Service Layer, no puedes enviar ambos objetos juntos, pero puedes generar la factura y crear el pago inmediatamente después, apuntando al DocEntry de la factura.

  • Esta situación es típica en desarrollos sobre el módulo de Ventas (SD) y Finanzas (FI) en SAP Business One con integraciones externas.

¡Estamos aquí para ayudarte en los Foros SAP de Consultoria-SAP!