Ayuda SAP

Colocar fecha a un Query


#1

Buenas tardes estimados,

Paso por aqui solicitando su amable colaboracion tengo este query en el que me muestra los clientes que llevan mas de 4 dias sin generarle facturas, necesito que al ejecutar el query este me solicite la fecha de las facturas que sean mayores a 4 días y menores a esta, ¿Como lo podría realizar?
Les agradeceria su inmensa ayuda por favor

Gracias

SELECT
	T0.[CardCode],
	T0.[CardName],
              T0.[City], 
              T0.[U_BPCO_City],
              T0.[Phone1],
              T0.[Phone2],
              T0.[E_MaiL],
              T0.[Address],
              T1.[SlpName],
         

                    
	
	(SELECT TOP (1) DocNum FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocNum',
	
	(SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocDate',
              
	
	DATEDIFF(DAY, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) AS 'Dias'


FROM OCRD T0 INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]


	
              WHERE DATEDIFF(DAY, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) >3

#2

Hola @GiancarloB

SAP tiene un reporte nativo que se llama “Clientes inactivos”, lo has verificado ??, te muestra los clientes que no han tenido movimientos a cierta fecha en ciertos documentos, ejemplo, muestra todos los clientes que no han tenido facturas desde el día 01 12 2018, te muestras el código, nombre, teléfono 1 y teléfono 2.

Respecto a tu pregunta, puedes hacer uso de between

Where DocDate Between 20181201 and 20181204

o con mayor y menor que

where DocDate > 20181201 and DocDate < 20181204

Espero sea de ayuda.

Saludos.


#3

Muchas gracias por responder Pcarrasco, pero bueno deje a un lado lo de la fecha, pero necesito ahora una cosita no se si me puedes ayudar, se que teniendo la fecha de contabilización de la factura puedo sacar el dia en que se realizo, se que es por DateName o DatePart, pero te soy sincero no se como colocarlo en el query que te copie líneas arriba, me salen errores por todo lado, alguna idea.

A gradeceria mucho tu gran colaboración

Gracias


#4

Hola @GiancarloB te soy bien sincero, no entiendo que es lo que necesitas o a donde quieres llegar con tu consulta.

Te comento lo siguiente, espero sea de ayuda

La fecha de contabilización en la base de datos se llama DocDate, la fecha del documento se llama TaxDate, no necesariamente los valores que tengas ahí son realmente la fecha en que se hizo le documento, se puede dar el caso y es muy común que se captura hoy con fecha de ayer, pero me atrevo a decir que todos los reportes se basan en estas fechas ademas de la fecha de vencimiento que se llama DocDueDate

Ahora bien, si tu lo que necesitas es saber realmente la fecha en que se hizo le documento sin importar las que te he mencionado, existen dos campos mas a nivel de base de datos, se llaman

CreateDate = Fecha de creación del documento
UpdateDate = Fecha de actualización del documento

Saludos.


#5

Hola Pcarrasco, si lo que deseo es saber el dia (si fue un lunes,marte o miércoles)por decir si hoy tengo la factura # 234 con fecha 5/12/2018, se desea saber que dia era, obvio ahora sabemos que es miércoles, como te decía con el DateName o DatePart en sql se puede sacar hasta donde he leido pero no me funciona o estoy haciendo algo mal.

Gracias por tu ayuda


#6

Es bien sencillo, si necesitas saber que día fue el 24/10/2018 voltea a tu calendario, te darás cuenta que fue miércoles, no ??,(:grin: es broma).

En SQL salvo que alguien diga lo contrario solo puedes jugar con el formato de fecha de manera numérica, por ejemplo

mm/dd/aaaa = 12/06/2018
aa.mm.dd = 18.12.06
dd/mm/aaaa = 06/12/2018
dd.mm.aa = 06.12.18

Saludos.


#7

Con esta instruccion puedes saber el dia de una fecha determinada, solo faltaria que juegues con un CASE para que tu ya le pongas el nombre al dia:

select DATEPART(dw, '06/12/2018')

Saludos


#8

Mejorado jejejeje

Select Datename(WEEKDAY,'06/12/2018')

#9

Jajaja,:grin:, es bueno el buen humor,
Pues mira mi query en sql y si me muestra el día, lo que no he podido es colocar esta consulta que encontré en mi query SELECT DATENAME (WEEKDAY,DocDate) AS ‘Dia’ FROM OPCH,deje esta consulta al final de mi query haciéndoloimagen en sql pero me lo deja separado, lo que no se es como unirlo a mi query.

Gracias


#10

Hola Juliancab, gracias por responder, ese es mi inconveniente, que no se como agregarlo, ¿si vez mi query?, seria de mucha ayuda tu colaboración.

Gracias


#11

Podrias porfavor postear el script completo.


#12

Claro que si,
SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[U_BPCO_City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],

(SELECT TOP (1) DocNum FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocNum',

(SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocDate',
  

DATEDIFF(DAY, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) AS 'Dias'

FROM OCRD T0 INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]

    
          WHERE DATEDIFF(DAY, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) >2
		  		SELECT DATENAME (WEEKDAY,DocDate) AS 'Dia' FROM OINV	

El ultimo select se lo coloque yo, pero no me funciona, que fue lo que me comentabas

Gracias por el apoyo


#13

Ok, lo que entiendo de tu query, es que estas sacando la antiguedad de tus facturas. Ahora bien, en base a que fecha quieres sacar el nombre del dia o que es lo que necesitas hacer en si?


#14

ok, si correcto me muestra las facturas que llevan mas de x tiempo y se desea tomar a partir de la fecha de contabilización el dia de la semana (L,M, M etc) en que se realizo la factura.
En si lo que se desea es poder saber en que dia de la semana se les genera la factura a los clientes hay cliente por ejemplo que siempre se les factura todos los jueves, la idea es revisar en un excel al filtrar este informe y poder hacerle seguimiento al cliente y llamarlos el dia en que no compren nuestro producto del dia habitual.

Gracias


#15

una duda mas, obtienes el top 1? Porque asi?


#16

Pues en mi consulta que estaba haciendo para hacer el query encontre esa opcion, pero si se puede de otra forma mas facil, te lo agradeceria.

Gracias


#17

Pues mas bien es saber que quieres ver, ya que ahí lo que estas haciendo es delimitar a 1 registro y no te van a salir todas las facturas que cumplan la condición.

Quiero pensar que esto es lo que necesitas:

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.DocDate, GETDATE()) AS 'Dias'
FROM OCRD T0 INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.CardCode= T2.CardCode
WHERE DATEDIFF(DAY, T2.DocDate, GETDATE()) > 2

O estoy mal?


#18

Wooo, eso es lo que necesitaba, pero en el query anterior no se mostraba lo mismo?, ¿porque me dices que lo limitaba?


#19

porque usabas un top (1)


#20

hummm ok, oye Juliancab, puedo abusar de tu inmensa ayuda, es posible que al ejecutar el query, solicite la fecha de inicio y fecha final.

Gracias