Quizás la pregunta parece muy obvio, pero no consigo obtener la información que necesito: UN LISTADO DEL MES DE JUNIO QUE ME MUESTRE LA FACTURACIÓN POR CLIENTE, DURANTE ESE PERIODO.
No me sirve el volumen de negocios, porque me suma los periodos anteriores, el libro mayor no me lo agrupa por cliente, sino por cuenta.
Por ejemplo… Necesitaría saber… De la cuenta de ventas (700000), que me lo separe por cliente. Algo muy básico.
Si, lo lógico es analizar el tipo de información que quieres, como la quieres y posibles parámetros…
Con ello montar una vista en el sql y ejecutar la consulta contra esa vista.
te decía el libro diario: seleccionas interlocutores comerciales, y luego clasificas como quieres agrupar en la parte inferior de los criterios de selección.
¿algo como esto?, tendrías que añadir en cada select el filtro por el periodo que quieres
SELECT "CardCode" , SUM("DocTotal") as "Total Facturado", SUM("Total Base Imponible") as "Total Base Imponible" FROM
(
SELECT T0."CardCode", T0."DocTotal", (T0."DocTotal" - T0."VatSum") AS "Total Base Imponible" FROM OINV T0 INNER JOIN OCRD T1 ON T0."CardCode" = T1."CardCode" INNER JOIN OCTG T2 ON T0."GroupNum" = T2."GroupNum" WHERE T0."CANCELED" ='N'
UNION ALL
SELECT T0."CardCode" , 0 - T0."DocTotal", 0 - (T0."DocTotal" - T0."VatSum") AS "Total Base Imponible" FROM ORIN T0 INNER JOIN OCRD T1 ON T0."CardCode" = T1."CardCode" INNER JOIN OCTG T2 ON T0."GroupNum" = T2."GroupNum" WHERE T0."CANCELED" ='N'
UNION ALL
SELECT T0."CardCode", 0 - T0."DocTotal", 0 - (T0."DocTotal" - T0."VatSum") AS "Total Base Imponible" FROM ODPI T0 INNER JOIN OCRD T1 ON T0."CardCode" = T1."CardCode" INNER JOIN OCTG T2 ON T0."GroupNum" = T2."GroupNum" WHERE T0."CANCELED" ='N'
)
GROUP BY "CardCode"
1.- Analiza bien que quieres obtener y como.
2.- Analiza de que transacciones de B1 tienes que obtener los datos.
3.- Creas una vista en el SQL que haga ese primer filtrado o agrupamiento.
4.- Creas consultas SQL contra esa vista filtrando de nuevo.
Te aporto una consulta SQL que te resuelve tu requerimiento.
Con esta SQL tengo montada una vista y luego hago selects contra esa vista en función de diversidad de parámetros…
Ten en cuenta que tú aquí solo has comentado de una única cuenta de ventas ‘700000’ y de una única transacción que sería facturas, pero lo lógico sería que restases abonos y en el caso de la que te aporta @Jesus_Gomez tiene albaranes pendientes de facturar y anticipos de clientes…
Pero bueno te serviría para comenzar, con ellas podrías filtrar por mes, nombre de mes, agente, etc… incluso podría ser multi base de datos y podrías encadenar en esa vista otro tipo de dato que provenga de otra transacción o desmembrar y agrupar por productos o cuentas de venta.
SELECT 'MI EMPRESA' AS 'EMPRESA', T3.SlpName AGENTE, year(T1.DocDate) AS 'AÑO', month(T1.DocDate) AS 'MES',
CASE month(T1.DocDate) WHEN 1 THEN 'Enero' WHEN 2 THEN 'Febrero' WHEN 3 THEN 'Marzo' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Mayo' WHEN 6 THEN 'Junio' WHEN 7 THEN 'Julio' WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Septiembre' WHEN 10 THEN 'Octubre' WHEN 11 THEN 'Noviembre' WHEN 12 THEN 'Diciembre' ELSE 'Error' END AS 'Mes N', max(T1.DocDate) 'FECHA', 'MI PRODUCTO' AS 'PRODUCTO',
sum(T0.LineTotal) AS 'IMPORTE', COUNT(DISTINCT T1.CardCode) AS 'Nº CLIENTES'
FROM INV1 T0
INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OCRD T2 ON T1.CardCode = T2.CardCode
INNER JOIN OSLP T3 ON T2.SlpCode = T3.SlpCode
WHERE T1.DocDate >= '20230101' AND T0.AcctCode IN ('700000')
GROUP BY T3.SlpName, year(T1.DocDate), month(T1.DocDate)
UNION ALL
SELECT 'MI EMPRESA' AS 'EMPRESA', T3.SlpName, year(T1.DocDate) AS 'AÑO', month(T1.DocDate) AS 'MES',
CASE month(T1.DocDate) WHEN 1 THEN 'Enero' WHEN 2 THEN 'Febrero' WHEN 3 THEN 'Marzo' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Mayo' WHEN 6 THEN 'Junio' WHEN 7 THEN 'Julio' WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Septiembre' WHEN 10 THEN 'Octubre' WHEN 11 THEN 'Noviembre' WHEN 12 THEN 'Diciembre' ELSE 'Error' END AS 'Mes', max(T1.DocDate) 'FECHA', 'MI PRODUCTO' AS 'PRODUCTO',
sum(T0.LineTotal)* - 1 AS 'Abonado', 0 AS 'Nº CLIENTES'
FROM RIN1 T0
INNER JOIN ORIN T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OCRD T2 ON T1.CardCode = T2.CardCode
INNER JOIN OSLP T3 ON T2.SlpCode = T3.SlpCode
WHERE T1.DocDate >= '20230101' AND T0.AcctCode IN ('700000')
GROUP BY T3.SlpName, year(T1.DocDate), month(T1.DocDate)
El último dato de número de clientes o lo quitas o analizas si te sirve, dependerá de como sea la empresa y como vende y analiza esos datos, ya que podría repetirse el código varias veces en el periodo