on 10-03-2012 7:37 PM
Buenos dias tengo este query para que apuntara a la tabla de facturas de proveedores, con los docuemtos abiertos y en base a la fecha de vencimiento , pero me arroja la fecha de contabilizacion? que estara mal del query? tambien es posible que no aparezcan las fechas cuando no haya ningun dato? en este caso algun pago pendiente
gracias por el apoyo
SET LANGUAGE Spanish
DECLARE @TOP INT, @F_INI DATETIME, @F_FIN DATETIME, @COND_1 CHAR(1), @COND_2 CHAR(1)
SET @TOP=(SELECT TOP 1 A.TransId FROM [dbo].[JDT1] A WHERE A.RefDate>='[%0]' AND A.RefDate<='[%1]')
SET @F_INI='[%0]'
SET @F_FIN='[%1]'
SET @COND_1='N'
SET @COND_2='S'
SELECT DISTINCT B.DocDueDate AS DocDueDate, CONVERT(NVARCHAR, B.DocDueDate, 103) AS Fecha
INTO #FECHAS
FROM OPCH B
WHERE B.DocDueDate BETWEEN @F_INI AND @F_FIN AND DocStatus = 'O'
ORDER BY 1
DECLARE @pvt_table NVARCHAR(MAX)
SELECT @pvt_table = COALESCE(@pvt_table + ',[' + C.Fecha + ']', '[' + C.Fecha + ']')
FROM #FECHAS C
ORDER BY C.DocDueDate
DECLARE @Pvt NVARCHAR(MAX)
SET @Pvt =
N'
SELECT *
FROM (
SELECT DISTINCT T0.CardCode AS CardCode, T0.CardName AS CardName, CONVERT(NVARCHAR, T0.DocDueDate, 103) AS Fecha, SUM(T0.DocTotal) AS Pagos
FROM OVPM T0
WHERE T0.DocDueDate BETWEEN (@INI) AND (@FIN) AND T0.Canceled=(@C_1) AND T0.DocType=(@C_2)
GROUP BY T0.CardCode, T0.CardName, T0.DocDueDate
) AS A
PIVOT (
SUM(Pagos)
FOR Fecha IN ('+ @pvt_table +')
) AS Pvt
ORDER BY 1,3
'
EXEC sp_executesql @pvt, N'@pvt_table NVARCHAR(MAX), @INI DATETIME, @FIN DATETIME, @C_1 CHAR(1), @C_2 CHAR(1)',@pvt_table, @F_INI, @F_FIN, @COND_1, @COND_2
DROP TABLE #FECHAS
Primero: Te trae la fecha de contabilización porque las variables en SAP están siendo sacadas desde el campo RefDate de la tabla JDT1. Cambia el RefDate por DueDate y asunto arreglado. Aquí puedes ver eso
SET @TOP=(SELECT TOP 1 A.TransId FROM [dbo].[JDT1] A WHERE A.RefDate>='[%0]' AND A.RefDate<='[%1]')
Segundo: El query no fue pensado para que aparezcan todos los días del año,para eso debes tener o hacer una tabla donde esté dicho dato.
Tercero: Este query esta armado para pagos efectuados no para deuda futura y se arma de la siguiente manera:
-Se establece el idioma del SQL en español, por si esta en inglés.
-Se declaran las variables que se usaran en el SQL dinámico, se llama a las variables de fecha en SAP y se le asignan las condiciones de los pagos
SET LANGUAGE Spanish
DECLARE @TOP INT, @F_INI DATETIME, @F_FIN DATETIME, @COND_1 CHAR(1), @COND_2 CHAR(1)
SET @TOP=(SELECT TOP 1 A.TransId FROM [dbo].[JDT1] A WHERE A.RefDate>='[%0]' AND A.RefDate<='[%1]')
SET @F_INI='[%0]'
SET @F_FIN='[%1]'
SET @COND_1='N'
SET @COND_2='S'
-Este query es para traer los días que tienen pagos dentro del rango de fechas establecido, si 1 día no tiene datos no aparecerá la columna de ese día. Si hubiese una tabla de todos los días no sería necesario esta parte
SELECT DISTINCT B.DocDueDate AS DocDueDate, CONVERT(NVARCHAR, B.DocDueDate, 103) AS Fecha
INTO #FECHAS
FROM OPCH B
WHERE B.DocDueDate BETWEEN @F_INI AND @F_FIN AND DocStatus = 'O'
ORDER BY 1
-Esta sentencia la explique en un documento que escribí (http://scn.sap.com/docs/DOC-30796), es para pivotear dinamicamente los datos del query de más abajo
DECLARE @pvt_table NVARCHAR(MAX)
SELECT @pvt_table = COALESCE(@pvt_table + ',[' + C.Fecha + ']', '[' + C.Fecha + ']')
FROM #FECHAS C
ORDER BY C.DocDueDate
-Este es el query que trae los datos, si quieres modificar lo que el query arroja (pagos) a otra cosa debes modificar esta parte.
DECLARE @Pvt NVARCHAR(MAX)
SET @Pvt =
N'
SELECT *
FROM (
SELECT DISTINCT T0.CardCode AS CardCode, T0.CardName AS CardName, CONVERT(NVARCHAR, T0.DocDueDate, 103) AS Fecha, SUM(T0.DocTotal) AS Pagos
FROM OVPM T0
WHERE T0.DocDueDate BETWEEN (@INI) AND (@FIN) AND T0.Canceled=(@C_1) AND T0.DocType=(@C_2)
GROUP BY T0.CardCode, T0.CardName, T0.DocDueDate
) AS A
PIVOT (
SUM(Pagos)
FOR Fecha IN ('+ @pvt_table +')
) AS Pvt
ORDER BY 1,3
'
-Por último la ejecución del SQL dinámico y la eliminación de la tabla temporal
EXEC sp_executesql @pvt, N'@pvt_table NVARCHAR(MAX), @INI DATETIME, @FIN DATETIME, @C_1 CHAR(1), @C_2 CHAR(1)',@pvt_table, @F_INI, @F_FIN, @COND_1, @COND_2
DROP TABLE #FECHAS
Espero haya resuelto las dudas de porque los errores.
Saludos
Felipe
PD: Yo hize el query
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
95 | |
11 | |
11 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.