Último precio de compra por artículo
El precio, proveedor y fecha de la factura de proveedores más reciente para cada artículo.
Herramienta
SELECT X.ItemCode, X.Dscription, X.Price, X.Currency, X.CardName, X.DocDate
FROM (
SELECT T1.ItemCode, T1.Dscription, T1.Price, T1.Currency, T0.CardName, T0.DocDate,
ROW_NUMBER() OVER (PARTITION BY T1.ItemCode ORDER BY T0.DocDate DESC, T0.DocEntry DESC) AS RowNo
FROM OPCH T0
INNER JOIN PCH1 T1 ON T0.DocEntry = T1.DocEntry
WHERE T0.CANCELED = 'N'
) X
WHERE X.RowNo = 1
ORDER BY X.ItemCode SELECT X."ItemCode", X."Dscription", X."Price", X."Currency", X."CardName", X."DocDate"
FROM (
SELECT T1."ItemCode", T1."Dscription", T1."Price", T1."Currency", T0."CardName", T0."DocDate",
ROW_NUMBER() OVER (PARTITION BY T1."ItemCode" ORDER BY T0."DocDate" DESC, T0."DocEntry" DESC) AS "RowNo"
FROM OPCH T0
INNER JOIN PCH1 T1 ON T0."DocEntry" = T1."DocEntry"
WHERE T0."CANCELED" = 'N'
) X
WHERE X."RowNo" = 1
ORDER BY X."ItemCode" Qué responde esta consulta
Antes de aprobar un nuevo pedido de compra, el gerente de compras quiere ver cuánto se pagó la última vez por cada artículo, a quién y cuándo. Así detecta aumentos de precio que el proveedor no anunció.
Ejemplo de resultado
Valores de demostración ilustrativos. Sus columnas son las mismas; los números vienen de su empresa.
| ItemCode | Dscription | Price | Currency | CardName | DocDate |
|---|---|---|---|---|---|
| A00001 | Laser Printer 1420 | 410 | USD | Global Parts Co. | 2026-09-14 |
| A00005 | Toner Cartridge Black | 27.5 | USD | Global Parts Co. | 2026-10-02 |
| A00007 | Paper A4 Box | 6.9 | EUR | Metro Packaging | 2026-08-21 |
| A00009 | USB Cable 2m | 2.4 | USD | Global Parts Co. | 2026-07-30 |
SQL Server vs SAP HANA
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) funciona igual en HANA, así que la función de ventana no se toca. El único cambio son las comillas, incluido el alias interno "RowNo" por el que filtra el WHERE exterior.
Errores comunes y soluciones
- Se comparan lado a lado precios en distintas monedas: Price está en la moneda de la línea de la factura, que se muestra en la columna Currency. Compare solo filas con la misma moneda, o use T1.LineTotal / T1.Quantity para un precio unitario en moneda local.
- Faltan artículos que se compraron hace poco: Solo se leen facturas de proveedores (OPCH). Si la mercadería se recibe con un pedido de entrada de mercancías y se factura después, lea OPDN/PDN1 en su lugar o agréguelas con UNION ALL.
- El precio es menor que el de la lista de precios del proveedor: PCH1.Price es el precio unitario después del descuento de línea. Seleccione también T1.PriceBefDi para ver el precio antes del descuento.
Consultas relacionadas
Referencia de tablas: Tabla OPCH (Factura de proveedores (cabecera))
Tres pasos, sin registro
Copie la versión correcta
Use la pestaña SQL Server para bases de datos MS SQL y la pestaña HANA para SAP B1 sobre HANA.
Abra el generador de consultas
En SAP Business One vaya a Herramientas → Consultas → Generador de consultas (Tools → Queries → Query Generator), pegue la consulta y haga clic en Ejecutar.
Guarde y comparta
Haga clic en Grabar, elija una categoría y asigne un nombre a la consulta. Su equipo podrá ejecutarla desde el gestor de consultas (Query Manager).
Preguntas sobre esta herramienta
¿Cómo ejecuto la consulta «Último precio de compra por artículo» en SAP Business One?
Copie la versión que corresponde a su base de datos, abra Herramientas → Consultas → Generador de consultas, péguela en el cuadro SQL y haga clic en Ejecutar. Grábela para reutilizarla después.
¿Qué tablas usa esta consulta?
Lee OPCH, PCH1 del esquema estándar de SAP Business One. No necesita campos definidos por el usuario.
¿Se puede convertir en un dashboard o una alerta?
Sí. Convertimos consultas en reportes de Crystal Reports, reportes de Excel que se actualizan solos, alertas de SAP B1 o mensajes de WhatsApp para gerentes.
Hechas para equipos de SAP Business One
¿Lo necesita dentro de SAP Business One?
Desarrollamos add-ons, reportes e integraciones para SAP B1 en SQL Server y HANA. Cuéntenos qué necesita y reciba un precio fijo, normalmente en 24 horas.
