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, muy buenas tardes. Gracias por compartir tu consulta.
Tu objetivo está claro: relacionar facturas de ventas (OINV) con los pedidos de compra (OPOR) por artículo, pero estás obteniendo valores duplicados o repetidos, lo cual es muy común si se cruzan varias líneas sin una relación directa entre documentos.
Problema principal
La causa de las repeticiones es que estás relacionando la información solo por el campo ItemCode, lo que puede mezclar múltiples líneas de pedidos y facturas del mismo artículo, aunque no estén relacionadas entre sí.
Esto genera una combinación cruzada (cross join parcial), repitiendo las facturas para cada línea del artículo sin respetar si están realmente vinculadas.
¿Cómo se debería vincular correctamente?
En SAP Business One, los documentos relacionados se pueden rastrear a través de:
-
BaseType, BaseEntry, BaseLine en líneas de factura (INV1)
-
DocEntry, LineNum en pedidos de venta (ORDR), compras (OPOR) u otros documentos base
En tu caso, si lo que buscas es ver facturas de ventas (OINV) relacionadas con pedidos de compra (OPOR) por artículo, debes validar si realmente esos documentos están vinculados mediante alguna trazabilidad directa. Pero normalmente, una factura de venta no está ligada directamente a un pedido de compra (salvo en operaciones triangulares o dropshipping).
Alternativa según lo que parece que buscas
Si lo que necesitas es facturas de venta por cliente, mostrando el mercado (U_Mercado_) y el artículo, podrías reformular así:
SELECT
T4."DocNum" AS "Factura",
T4."CardCode" AS "CodCliente",
T4."CardName" AS "Nombre Cliente",
T3."ItemCode",
T3."Dscription" AS "Descripción Artículo",
T3."Quantity",
T3."Price",
T4."DocDate",
T2."U_Mercado_"
FROM INV1 T3
INNER JOIN OINV T4 ON T3."DocEntry" = T4."DocEntry"
LEFT JOIN OITM T0 ON T3."ItemCode" = T0."ItemCode"
LEFT JOIN OCRD T2 ON T4."CardCode" = T2."CardCode"
WHERE T4."DocDate" BETWEEN '2025-01-01' AND CURRENT_DATE
Esto te da:
Si realmente necesitas vincular con OPOR (pedidos de compra)
Si tu empresa tiene lógica donde una factura de venta está vinculada a una compra (por ejemplo, back-to-back o dropshipping), deberías usar el mapeo desde:
Entonces, puedes probar algo así:
SELECT
T4."DocNum" AS "Factura",
T4."CardName" AS "Cliente",
T3."ItemCode",
T3."Dscription",
T3."Quantity",
T2."DocNum" AS "PedidoCompra",
T2."U_Mercado_"
FROM INV1 T3
INNER JOIN OINV T4 ON T3."DocEntry" = T4."DocEntry"
LEFT JOIN OPOR T2 ON T3."BaseEntry" = T2."DocEntry" AND T3."BaseType" = 22
WHERE T4."DocDate" BETWEEN '2025-01-01' AND CURRENT_DATE
Esto garantiza que solo se unan facturas que provienen realmente de un pedido de compra.
Resumen Consultoria-SAP
-
Tu problema actual viene de unir múltiples tablas solo por ItemCode, sin tener en cuenta la trazabilidad real entre documentos.
-
Para evitar repeticiones, necesitas usar los campos BaseEntry, BaseType, LineNum, etc., que vinculan documentos en SAP B1.
-
Si las facturas de venta no vienen de un pedido de compra, no debes forzar esa unión.
-
Este análisis aplica a los módulos de Ventas (SD), Compras (MM) y Logística (INV) de SAP Business One.
¡Estamos aquí para ayudarte en los Foros SAP de Consultoria-SAP!