Buenos días.
Estoy realizando una Consulta que me genere todas las facturas de proveedor que muestre Los campos que veis en la consulta más abajo.
A ver, para terminar la query necesito mostrar tambien la última fecha de entrada de mercancia de cada factura, por ejemplo si una factura tiene tres entradas, 3-1-19, 6-1-19 y 19-1-19, debe mostrarme la ultima fecha solo.
La base imponible y el porcentaje de iva los calculo así por que no consigo ver en que tabla esta almacenado.
SELECT DISTINCT
T0.“TransId” AS “Asiento”,
T0.“DocNum” AS “Factura”,
T0.“DocDate” AS “Fecha de Factura”,
T0.“TaxDate” AS “Fecha Operación”,
T1.“ShipDate” AS “Fecha Ultima Entrada”,
T0.“CardName” AS “Nombre Proveedor/Cliente”,
T2.“LicTradNum” AS “Cif”,
(T0.“DocTotal” - T0.“VatSum”) AS “Base Imponible”,
ROUND ((T0.“VatSum” * 100) / (T0.“DocTotal” - T0.“VatSum”),0) AS “Porcentaje iva %”,
ROUND (T0.“VatSum”,2) AS “IVA”,
ROUND (T0.“DocTotal”,2) AS “Total”
FROM OPCH
T0 INNER JOIN PCH1 T1 ON T0.“DocEntry” = T1.“DocEntry”
INNER JOIN OCRD T2 ON T0.“CardCode” = T2.“CardCode”
WHERE T0.“DocDate” BETWEEN [%0] AND [%1]
ORDER BY T0.“DocDate” ASC
GROUP BY
T0.“TransId”,
T0.“DocNum”,
T0.“DocDate”,
T0.“TaxDate”,
T1.“ShipDate”,
T0.“CardCode”,
T0.“CardName”,
T2.“LicTradNum”,
T0.“VatSum”,
T0.“DocTotal”
ORDER BY T0.“DocDate”
para obtener la fecha de las entradas, debes utilizar la tabla PCH1, que es la de las líneas de la factura y mediante esta podrás consultar el documento anterior (campo baseentry y basetype de la tabla PCH1).
El desglose de impuestos está en la tabla PCH1, se guardan por línea.
¿Tienes portes u otros gastos asociados a la factura?
Los impuestos están en la tabla
Para tener una referencia de todas las tablas, usa este portal.
Buenas noches.
Perdona por la tardanza pero he estado de viaje. He probado con MAX(T1.“ShipDate”) que es la columna de la tabla PCH1 de las entregas pero me muestra todas las fechas, debe ser con una subconsulta o condición en el WHERE pero no encuentro la solución, a ver si me puedes ayudar por favor.
Buenas noches.
Perdona por la tardanza pero he estado de viaje.
He probado esto pero no funciona tampoco aver si puedes ayudarme por favor.
SELECT DISTINCT
T0.“TransId” AS “Asiento”,
T0.“DocNum” AS “Factura”,
T0.“DocDate” AS “Fecha de Factura”,
T0.“TaxDate” AS “Fecha Operación”,
T1.“ShipDate” AS “Fecha Ultima Entrada”,
T0.“CardName” AS “Nombre Proveedor/Cliente”,
T2.“LicTradNum” AS “Cif”,
(T0.“DocTotal” - T0.“VatSum”) AS “Base Imponible”,
ROUND ((T0.“VatSum” * 100) / (T0.“DocTotal” - T0.“VatSum”),0) AS “Porcentaje iva %”,
ROUND (T0.“VatSum”,2) AS “IVA”,
ROUND (T0.“DocTotal”,2) AS “Total”
FROM OPCH
T0 INNER JOIN PCH1 T1 ON T0.“DocEntry” = T1.“DocEntry”
INNER JOIN OCRD T2 ON T0.“CardCode” = T2.“CardCode”
WHERE T1.“ShipDate” = (SELECT MAX(T1.“ShipDate”) FROM OPCH
T0 INNER JOIN PCH1 T1 ON T0.“DocEntry” = T1.“DocEntry”
INNER JOIN OCRD T2 ON T0.“CardCode” = T2.“CardCode”)
ORDER BY T0.“DocDate”
Si haces inner join con PCH1 seguro obtendras todas las lineas de las facturas, tendrias que sacar esta referencia. respecto al Where no funcionaria, por que seguro que tendras varias lineas con la misma fecha.
Por que no usas como te indique la subconsulta:
(select top 1 ShipDate from PCH1 inner join OPCH on PCH1.DocEntry = OPCH.DocEntry
order by DocDate DESC)
@JuanAntonio, si hace “FROM OPCH inner join PCH1”, la consulta te devolvera una linea por cada linea de tus facturas, por eso te indicaba que si lo que quieres es que te muestre una linea por cada factura debes quitar ese inner join. Pero también veo que estas mostrando el porcentaje de impuesto a nivel detalle, debes tomar en cuenta que puedes tener distintos tipos de impuestos a nivel detalle, sinembargo casi siempre se usa un solo codigo de impuesto para todas las lineas, por lo que podrias tomar el impuesto de la primera linea, y funcionaria. Te sugiero estos cambios:
SELECT DISTINCT
T0.“DocEntry” AS “ID_Factura”,
T0.“TransId” AS “Asiento”,
T0.“DocNum” AS “Factura”,
T0.“DocDate” AS “Fecha de Factura”,
(select top 1 ShipDate from PCH1 T1 where T1."DocEntry" = T0.DocEntry
order by DocDate DESC) AS “Fecha Operación”,
T0.“CardName”,
T2.“LicTradNum” AS “Cif”,
(T0.“DocTotal” - T0.“VatSum”) AS “Base Imponible”,
ROUND (T0.“VatSum”,2) AS “IVA”,
(Select Rate from OVTG T3 Where T3.Code = (select top 1 “VatGroup” from PCH1 where PCH1."DocEntry" = T0.DocEntry)) AS “% Iva”,
ROUND (T0.“DocTotal”,2) AS “Total”
FROM OPCH T0
INNER JOIN OCRD T2 ON T0.“CardCode” = T2.“CardCode”
ORDER BY T0.“TransId”
Buenas noches.
Gracias por todo, la verdad que lo que me comentabas llevabas razón, al final conTOP no funcionaba he utilizado MAX.
Para terminar necesito filtrar por fechas, pero WHERE T0.“DocDate” BETWEEN [%0] AND [%1] me esta dando fallo de sintaxis.
SELECT DISTINCT
T0.“DocEntry” AS “ID_Factura”,
T0.“TransId” AS “Asiento”,
T0.“DocNum” AS “Factura”,
T0.“DocDate” AS “Fecha de Factura”,
(SELECT MAX(IFNULL(T1.“ShipDate”,T0.“TaxDate”)) FROM PCH1 T1 WHERE T1.“DocEntry” = T0.“DocEntry”) AS “Fecha Operación”,
T0.“CardName”,
T2.“LicTradNum” AS “Cif”,
(T0.“DocTotal” - T0.“VatSum”) AS “Base Imponible”,
ROUND (T0.“VatSum”,2) AS “IVA”,
(SELECT T3.“Rate” FROM OVTG T3 WHERE T3.“Code” = (SELECT MAX(T1.“VatGroup”) FROM PCH1 T1 WHERE T1.“DocEntry” = T0.“DocEntry”)) AS “% Iva”,
ROUND (T0.“DocTotal”,2) AS “Total”
FROM OPCH T0 INNER JOIN OCRD T2 ON T0.“CardCode” = T2.“CardCode”
WHERE T0.“DocDate” BETWEEN [%0] AND [%1]
GROUP BY
T0.“DocDate”,
T0.“DocEntry”,
T0.“TransId”,
T0.“DocNum”,
T0.“CardName”,
T2.“LicTradNum”,
T0.“DocTotal”,
T0.“VatSum”
ORDER BY T0.“TransId”