Importante
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:
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
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).
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.
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:
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!