Antiguedad clientes

sql
Etiquetas: #<Tag:0x00007f65280a4d50>

#1

Buenas tardes comunidad, a quien pueda colaborar muchas gracias.

Necesito generar un top 9 de los clientes con más deudas, bien se encuentren vencidos estos documentos o no, de acuerdo a la fecha de vencimiento.

{?Fecha} representa el parámetro de entrada, en este caso fecha de cierre de mes.

--T1."PaidToDate" = 0

SELECT  TOP 9 T0."CardName" AS "Clientes", 

(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" ) AS "TOTAL" 

FROM OINV T0 
INNER JOIN JDT1 T2 ON T2."BaseRef"=T0."DocNum"

WHERE  
(T2."Account"='1110000301' OR T2."Account"='2111000521' OR T2."Account"='1110000302') 
AND (( T2."MthDate" > {?Fecha}) OR (T2."MthDate" IS NULL)) 
AND T0."CANCELED" = 'N' 
AND T0."PaidToDate" = 0 
AND (T2."Indicator"= '33' OR T2."Indicator"='61')  
AND (SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName") IS NOT NULL

GROUP BY T0."CardName" 

ORDER BY TOTAL DESC

La comparación la hago con el informe de antiguedad de clientes, nativo de sap, sin embargo los resultados no me dan igual.

Informe usando el código antes expuesto:
imagen

Informe nativo antiguedad clientes sap:
imagen

Muchas gracias


#2

Hola @FranciscoAn, te sugiero que revises el query que lanza la aplicacion al ejecutar el reporte de aging. Si tu version es SQL, desde el SQL studio, en la pestaña performance, y luego en la subpestaña “SQL Plan cache” , puedes ver los querys que se ejcutan en ese momento. Si tienes Hana, puedes ver la ultima consulta con este query:

select
    statement_string, last_execution_timestamp
from SYS.M_SQL_PLAN_CACHE 
where user_name = 'KODYAZ' 
order by last_execution_timestamp desc;

Espero te ayude.

Saludos,


#3

Hola @Willy_Caldero Muchas gracias


ejecute el query indicado sin embargo no me arroja resultado. A que se puede deber?


#4

ejecutalo desde el Hana studio.


#5

@Willy_Caldero saludos!
He realizado lo mismo desde el hana studio, pero no me muestra resultados.

imagen

que puede estar sucediendo?


#6

Hola @FranciscoAn, haz la consulta indicando en el WHERE el usuario ‘SYSTEM’


#7

si correcto, no me fije, coloca el usuario SYSTEM como menciona @jhozz.


#8

Correcto @Willy_Caldero @jhozz ahora si me indica las querys.
Solo que como tenemos muchas sociedades me aparecen demasiadas querys por segundo y no puedo identificar cual corresponde al informe de antiguedad clientes.
Existe otro campo de esa tabla M_SQL_PLAN_CACHE que me ayude a delimitar la búsqueda?

muchas gracias


#9

Claro que si @FranciscoAn, prueba esto:
select
*
from SYS.M_SQL_PLAN_CACHE
where user_name = ‘SYSTEM’ and SCHEMA_NAME = ‘MI_BASE_DE_DATOS’
order by last_execution_timestamp desc;

Te adelanto que el informe de antigüedad de saldos ejecuta varias querys antes de mostrar el resultado final, no es fácil de entender, espero que le consigas la lógica para lo que necesitas.
Saludos.


#10

MUCHAS GRACIAS @jhozz ESO JUSTAMENTE ME ENCONTRABA HACIENDO. SIN EMBARGO ME QUEDO LA DUDA QUE LA QUERY SE EJECUTE CON OTRO SCHEMA_NAME QUE NO SEA EL DE MI SOCIEDAD.


#11

Primero debes ejecutar el informe de antigüedad de saldos (recomendable en una data de pruebas que más nadie esté utilizando) y luego ejecutas esa query con el SCHEMA_NAME de la data de pruebas, así te evitas complicaciones.

Yo probé hacer lo siguiente:
1.- SELECT TOP 1 * FROM OUSR
2.- Ejecuto el informe nativo.
3.- ejecuto el query indicado por @Willy_Caldero.

De esa forma se que las querys usadas por el informe nativo son todas las que estás antes que el SELECT * que hice anteriormente.


#12

Muchas gracias por sus aportes pero no encontré la query. Sin embargo se me ocurrio otra forma de consultar la información que necesito.

Por ejemplocomo puedo corregir este código para que me muestre en la columna de al lado el shorname:

SELECT 
--"Cliente",
SUM("SALDO")

FROM
(
SELECT --T0."ShortName" AS "Nombre" ,
	CASE 
	WHEN T0."Debit"=0 THEN SUM(-T0."Credit") 
	WHEN T0."Credit"=0 THEN SUM(T0."Debit") 
 	END  AS "SALDO"
               
               

FROM JDT1 T0 WHERE T0."ShortName" = 'C15487665-5' and  T0."RefDate" <= '2018-09-30'
GROUP BY T0."Credit",T0."Debit"--, T0."ShortName"
)

#13

Buenos días… saben cual es la transacción en ERP para el informe de antigüedad de clientes? Para los clientes con mas deudas, estas realizando un desarrollo Z?

Muchas gracias!
Saludos


#14

@Cintia_Paola Buenos dias,
Estoy realizando el informe en crystal report de antiguedad de clientes con algunas variaciones.


#15

Muchas Gracias @FranciscoAn.

Saludos.