Importante
La siguiente respuesta es generada por nuestro Robot de Consultoria-SAP.com 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 podrían verificar la información. Muchos consultores leen nuestros foros de Ayuda SAP y lamentablemente pocos ayudan respondiendo y confirmando la información.
Si deseas aportar tus ideas para mejorar nuestros sistemas, te esperamos en este debate.
¡Hola! Gracias por detallar tu escenario técnico tan claramente, eso ayuda muchísimo para poder darte una respuesta precisa.
Estás utilizando SAP Business One (SAP B1) y el Service Layer (API RESTful) para realizar una entrada de inventario (InventoryGenEntries) con artículos gestionados por números de serie, pero estás teniendo errores relacionados con el campo SysNumber y la creación del número de serie.
Análisis del error
El error que estás recibiendo:
"value": "10001172 - Blank strings are not allowed in row 1 (in unique field). [OSRN.SysNumber][line: 0]"
es un mensaje generado por SAP B1 cuando:
- El campo
SysNumberestá siendo enviado vacío o mal definido en el contexto de la operación. - Estás tratando de usar un
SysNumberya existente o aún no generado, y el sistema no lo puede validar correctamente.
Esto indica que estás mezclando dos flujos distintos para el manejo de series:
Importante: Diferencia clave entre crear vs. usar números de serie
- Si el documento creará el número de serie (como una entrada de inventario desde producción), NO debes enviar
SysNumber, ya que SAP lo asigna automáticamente. - El campo
SysNumbersolo se utiliza cuando estás referenciando un número de serie ya existente (por ejemplo, en una salida de inventario o devolución).
Forma correcta para crear nuevos números de serie en un InventoryGenEntries
Dado que estás haciendo una entrada de inventario desde producción, y los productos se gestionan por números de serie, el cuerpo del request debe verse así:
{
"DocDate": "2025-03-22",
"DocDueDate": "2025-03-22",
"Comments": "Entrada automática por API - lote 1526",
"DocumentLines": [
{
"ItemCode": "410224",
"Quantity": 1,
"WarehouseCode": "001",
"AccountCode": "1.01.004.01.002",
"SerialNumbers": [
{
"ManufacturerSerialNumber": "1526",
"InternalSerialNumber": "1526",
"LotNumber": "1526",
"AdmissionDate": "2025-03-21T00:00:00Z"
}
]
}
]
}
Notas clave:
- NO INCLUIR
SysNumber. Ese campo es solo para transacciones con series ya creadas. - LotNumber, ManufacturerSerialNumber, e InternalSerialNumber deben estar presentes. Si el sistema usa todos, deben tener valores coherentes.
- La AdmissionDate debe tener formato válido ISO-8601.
- Si usas ubicaciones, podrías agregar
BinAbsEntry, pero verifica que esté activa la gestión por ubicaciones en el almacén.
Verificación
Asegúrate que:
- El artículo tiene gestión por números de serie y no por lotes. Si fuera por lotes, el campo sería
BatchNumbersy noSerialNumbers. - El almacén
001tiene configuraciones compatibles (por ejemplo, si usa ubicaciones, se requiere elBinAbsEntry). - No estás usando
SysNumberpara crear una serie nueva.
Extra tip desde Consultoria-SAP.com
Muchos usuarios que integran SAP B1 vía API cometen errores al suponer que deben generar el SysNumber por su cuenta. ¡Y no! Ese número lo maneja SAP internamente. Si quieres validar la numeración creada, puedes luego hacer un GET a /SerialNumbers?$orderby=SysNumber desc para ver los últimos números creados.
Resumen Consultoria-SAP
El error que estás enfrentando en SAP B1 al registrar entradas de inventario con número de serie es causado por un mal uso del campo SysNumber. Cuando estás creando nuevas series (como en entradas de producción), no debes incluirlo. Usa correctamente los campos LotNumber, ManufacturerSerialNumber, e InternalSerialNumber. Esta funcionalidad corresponde al módulo de Inventario (INV) en SAP Business One con API Service Layer.
¡Estamos aquí para ayudarte en los Foros SAP de Consultoria-SAP!