on 06-27-2011 6:50 PM
Saludos
Tengo un reporte que me muestra todos mis documentos por pagar, el cual funciona bien. Este es su store procedure: Lo que hace es jala y muestra.
-
ALTER PROCEDURE [dbo].[SBO_SP_VTH_DocumentosPorPagarTODOS]
AS
BEGIN
select
OPCH.CardName as RazonSocial,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O'
UNION
select
OBOE.CardName as RazonSocial,
'LETRA' as TipoDoc,
OBOE.BoeNum as NroSAP,
OBOE.U_VTH_NUNICO as NroDoc,
OBOE.DueDate as FechaVencimientoDoc,
OBOE.BOESum as TotalSoles,
OBOE.BoeSumFC as TotalDolares
FROM OBOE INNER JOIN OCRD ON OBOE.CardCode = OCRD.Cardcode
where OBOE.BoeStatus IN ('G', 'D')
UNION
select
ORPC.CardName as RazonSocial,
'N/C' as TipoDoc,
ORPC.DocNum as NroSAP,
ORPC.NumAtCard as NroDoc,
ORPC.DocDueDate as FechaVencimientoDoc,
((ORPC.DocTotal-ORPC.PaidToDate)*-1) as TotalSoles,
((ORPC.DocTotalFC-ORPC.PaidFC)*-1) as TotalDolares
FROM ORPC INNER JOIN OCRD ON ORPC.CardCode = OCRD.Cardcode
where ORPC.canceled = 'N' and ORPC.DocStatus = 'O'
order by RazonSocial, FechaVencimientoDoc
END
-
Lo que quiero realizar es que antes de imprimir el resultado, me pida ingresar el rango de fechas. Estuve modificando el store con uno que tengo que si pide fechas y seria como el siguiente:
-
ALTER PROCEDURE [dbo].[SBO_SP_VTH_DocumentosPorPagarTODOS]
@FECHA1 DATETIME, @FECHA2 DATETIME
AS
BEGIN
select
OPCH.CardName as RazonSocial,
OVPM.DocDate as Fecha,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O'and OVPM.DocDate >= @FECHA1 and OVPM.DocDate <= @FECHA2
UNION
select
OBOE.CardName as RazonSocial,
OVPM.DocDate as Fecha,
'LETRA' as TipoDoc,
OBOE.BoeNum as NroSAP,
OBOE.U_VTH_NUNICO as NroDoc,
OBOE.DueDate as FechaVencimientoDoc,
OBOE.BOESum as TotalSoles,
OBOE.BoeSumFC as TotalDolares
FROM OBOE INNER JOIN OCRD ON OBOE.CardCode = OCRD.Cardcode
where OBOE.BoeStatus IN ('G', 'D') and OVPM.DocDate >= @FECHA1 and OVPM.DocDate <= @FECHA2
UNION
select
ORPC.CardName as RazonSocial,
OVPM.DocDate as Fecha,
'N/C' as TipoDoc,
ORPC.DocNum as NroSAP,
ORPC.NumAtCard as NroDoc,
ORPC.DocDueDate as FechaVencimientoDoc,
((ORPC.DocTotal-ORPC.PaidToDate)*-1) as TotalSoles,
((ORPC.DocTotalFC-ORPC.PaidFC)*-1) as TotalDolares
FROM ORPC INNER JOIN OCRD ON ORPC.CardCode = OCRD.Cardcode
where ORPC.canceled = 'N' and ORPC.DocStatus = 'O'and OVPM.DocDate >= @FECHA1 and OVPM.DocDate <= @FECHA2
order by RazonSocial, FechaVencimientoDoc
END
-
En el SAP, modifico el query que por defecto solo ejecuta el store y le agrego la sifuiente instruccion para que lea la variable fecha1 y fecha2
DECLARE @FECHA1 AS DATETIME
DECLARE @FECHA2 AS DATETIME
/WHERE/
SET @FECHA1 = /* T0.DocDate */ '[%1]'
SET @FECHA2 = /* T0.DocDate */ '[%2]'
EXEC SBO_SP_VTH_Documentospor pagartodos @FECHA1, @FECHA2
Cuando corro el reporte desde SAP me sale un mensaje de error de base de datos. y si pruebo el store solo desde el SQL en la instrucion OVPM.DocDate as Fecha, me sale could not be bound, que significa que no puede enlazarse. y no corre? que podra ser. AYUDA PORFAS
la variable docdate lo jalo de otra tabla puesto que en las tablas de los datos del reporte no esta dicha variable, podra ser eso????
Hola
Pruebalo de esta manera
DECLARE @Tempo DATETIME, @FECHAINI DATETIME, @FECHAFIN DATETIME
SET @TEMPO = (SELECT TOP 1 DocEntry FROM OINV WHERE DocDate >= '[%0]' AND DocDate <= '[%1]'
SET @FECHAINI = '[%0]'
SET @FECHAFIN = '[%1]'
EXEC SBO_SP_VTH_Documentospor pagartodos
@FECHA1 = @FECHAINI,
@FECHA2 = @FECHAFIN
Saludos
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Segun los datos que me das entiendo que el Docdate lo jalo de la tabla OINV. La variable tempo no sabria si lo incluyo en el store. Segun esos cambios mi store quedaria de la siguiente manera:
ALTER PROCEDURE [dbo].[SBO_SP_VTH_DocumentosPorPagarTODOS]
@FECHAINI DATETIME, @FECHAFIN DATETIME
AS
BEGIN
select
OPCH.CardName as RazonSocial,
OINV.DocDate as Fecha,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O'
and OINV.DocDate >= @FECHAINI and OINV.DocDate <= @FECHAFIN
UNION
select
OBOE.CardName as RazonSocial,
OINV.DocDate as Fecha,
'LETRA' as TipoDoc,
OBOE.BoeNum as NroSAP,
OBOE.U_VTH_NUNICO as NroDoc,
OBOE.DueDate as FechaVencimientoDoc,
OBOE.BOESum as TotalSoles,
OBOE.BoeSumFC as TotalDolares
FROM OBOE INNER JOIN OCRD ON OBOE.CardCode = OCRD.Cardcode
where OBOE.BoeStatus IN ('G', 'D')
and OINV.DocDate >= @FECHAINI and OINV.DocDate <= @FECHAFIN
UNION
select
ORPC.CardName as RazonSocial,
OINV.DocDate as Fecha,
'N/C' as TipoDoc,
ORPC.DocNum as NroSAP,
ORPC.NumAtCard as NroDoc,
ORPC.DocDueDate as FechaVencimientoDoc,
((ORPC.DocTotal-ORPC.PaidToDate)*-1) as TotalSoles,
((ORPC.DocTotalFC-ORPC.PaidFC)*-1) as TotalDolares
FROM ORPC INNER JOIN OCRD ON ORPC.CardCode = OCRD.Cardcode
where ORPC.canceled = 'N' and ORPC.DocStatus = 'O'
and OINV.DocDate >= @FECHAINI and OINV.DocDate <= @FECHAFIN
order by RazonSocial, FechaVencimientoDoc
END
-
Pero cuando corro, el store desde SQL me sale el siguiente error
The multi-part identifier "OINV.DocDate" could not be bound.
Msg 4104, Level 16, State 1, Procedure SBO_SP_VTH_DocumentosPorPagarTODOS, Line 19
Estaria colocando un dato mal. No probe colocando el query que me dizte en el SAP porque me saldria el error.
Otra consulta como puedo colocar codigo para que me salga comop tu me lu muestras en este foro
Luis no me estas entendiendo xD
1° Haz el SP sin ninguna variale para que te asegures que funciona
2° Cambia las fechas por varibles @fecha1 y @fecha2
3° En SAP, cuando ejecutas el SP, debes asignarle un valor a esas variables declaradas en el SP, por lo tanto si tu colocas tu SP de la siguiente manera
EXECUTE SP_luis
@Fecha1 = '01/01/2011',
@Fecha2 = '31/01/2011'
Te deberia funcionar, ahora lo que quieres es que esas fechas sean colocadas por el usuario al ejecutar el reporte, como si fueran variables de SAP. Por eso te puse mas arriba como debias hacerlo.
Primero llenas las variables de SAP con las fechas del usuario, esto debe ir al inicio de la consulta en SAP para que te pida los campos de fechas
DECLARE @FECHAS DATETIME
SET @FECHAS = (SELECT TOP 1 DocEntry FROM OINV WHERE DocDate BETWEEN '[%0]' AND '[%1]')
Luego %0 y %1 se los asignas a 2 variables tipo fecha
DECLARE @FECHAINI DATETIME, @FECHAFIN DATETIME
SET @FECHAINI = '[%0]'
SET @FECHAINI = '[%1]'
Y por ultimo, a las variables del SP les asignas el valor de las variables de las fechas
EXECUTE SP_luis
@Fecha1 = @FECHAINI,
@Fecha2 = @FECHAFIN
En SQL no debes agregar nada, salvo las variables de fecha que quedan abiertas. Es en el Generador de consultas donde debes llenar esas varibales con las variables de SAP
Atte.
Felipe Loyola
Mi store si corre bien sin las variables de fechas.
Luego coloque en el store procedure las variables fechaini y fechafin.
@FECHAINI DATETIME, @FECHAFIN DATETIME
Lo grabe y no me sale error
Luego en el reporte de SAP coloco la siguiente instruccion
DECLARE @Tempo DATETIME, @FECHAINI DATETIME, @FECHAFIN DATETIME
SET @TEMPO = (SELECT TOP 1 DocEntry FROM OINV WHERE DocDate >= '[%0]' AND DocDate <= '[%1]'
SET @FECHAINI = '[%0]'
SET @FECHAFIN = '[%1]'
EXEC SBO_SP_VTH_Documentospor pagartodos
@FECHA1 = @FECHAINI,
@FECHA2 = @FECHAFIN
Cuando lo ejecuto me sale el siguiente error
'Contratos de servicios OCTR'
Porque puede salir
Hola Luis
Lamento estar poco presente.
Te dejo un ejemplo que hize para que lo adaptes.
1° guarda este SP en tu Base
CREATE PROCEDURE [dbo].[SBOSP_Saldo_SAP] (@fin datetime,@Cta VarChar(25)) AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT T0.CardCode, T0.CardName,T1.TransId , T4.BaseRef , t1.Ref2 ,t1.RefDate ,t1.DueDate
FROM OCRD T0
INNER JOIN JDT1 T1 ON T1.ShortName = T0.CardCode
INNER JOIN OACT T2 ON T2.AcctCode = T1.Account
INNER JOIN OJDT T4 ON T4.TransId = T1.TransId
LEFT JOIN OINV T5 ON T5.TransId = T4.TransId and t5.ObjType = t4.TransType
WHERE T0.CardType = 'C' AND T1.RefDate <= @Fin AND T2.AcctCode = @Cta
ORDER BY T0.CardCode,T1.TransId,t1.Ref2
END
2° Luego ve a SAP y ejecutalo desde el generador de querys de la siguiente forma
DECLARE @VARIABLES INT, @FECHAFIN DATETIME, @CUENTA NVARCHAR(25)
SET @VARIABLES = (SELECT TOP 1 T.DocEntry FROM dbo.OINV T INNER JOIN dbo.INV1 Z ON Z.DocEntry = T.DocEntry INNER JOIN dbo.OACT Y ON Y.AcctCode = Z.AcctCode WHERE T.DocDate <= '[%0]' AND Y.FormatCode = '[%1]')
SET @FECHAFIN = '[%0]'
SET @CUENTA = '[%1]'
EXECUTE dbo.SBOSP_saldo_sap @fin = @FECHAFIN, @cta = @CUENTA
Como vez la variables @VARIABLES, que es lo mismo que tempo, solo la uso para traer los valores %0 y %1
PD: en el post de arriba te falto un parentesis, quiza eso estaba fallando
Saludos
Mejor...
Luis, prueba tu SP de esta manera
ALTER PROCEDURE dbo.SBO_SP_VTH_DocumentosPorPagarTODOS
(@FECHAINI DATETIME, @FECHAFIN DATETIME)
AS
BEGIN
select
OPCH.CardName as RazonSocial,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O' and OPCH.DocDueDate >= @FECHAFIN AND OPCH.DocDueDate <= @FECHAFIN
UNION
select
OBOE.CardName as RazonSocial,
'LETRA' as TipoDoc,
OBOE.BoeNum as NroSAP,
NULL,
OBOE.DueDate as FechaVencimientoDoc,
OBOE.BOESum as TotalSoles,
OBOE.BoeSumFC as TotalDolares
FROM OBOE INNER JOIN OCRD ON OBOE.CardCode = OCRD.Cardcode
where OBOE.BoeStatus IN ('G', 'D') and OBOE.DueDate >= @FECHAINI and OBOE.DueDate <= @FECHAFIN
UNION
select
ORPC.CardName as RazonSocial,
'N/C' as TipoDoc,
ORPC.DocNum as NroSAP,
ORPC.NumAtCard as NroDoc,
ORPC.DocDueDate as FechaVencimientoDoc,
((ORPC.DocTotal-ORPC.PaidToDate)*-1) as TotalSoles,
((ORPC.DocTotalFC-ORPC.PaidFC)*-1) as TotalDolares
FROM ORPC INNER JOIN OCRD ON ORPC.CardCode = OCRD.Cardcode
where ORPC.canceled = 'N' and ORPC.DocStatus = 'O' and ORPC.DocDueDate >= @FECHAINI AND ORPC.DocDueDate <= @FECHAFIN
order by RazonSocial, FechaVencimientoDoc
END
y ejecutalo desde sap asi
DECLARE @TEMPO INT, @INI DATETIME, @FIN DATETIME
SET @TEMPO = (SELECT TOP 1 T.DocEntry FROM [dbo].[OPCH] T WHERE T.DocDate >= '[%0]' AND T.DocDate <= '[%1]')
SET @INI = '[%0]'
SET @FIN = '[%1]'
EXECUTE dbo.SBO_SP_VTH_DocumentosPorPagarTODOS @FECHAINI = @INI, @FECHAFIN = @FIN
Saludos
Edited by: Floyola on Jun 29, 2011 12:53 AM
Gracias me corrio bien.
Mas bien una consulta, que es lo que no me funcionaba. Por lo que estaba viendo en el codigo es jalar de la misma tabla el docdate.
Entonces si quisiera colocar fecha, a otro reporte lo haria parecido?
Otra pequeña consulta, si bien el SAP tiene herramienta para crear los querys. Ahi tambienpermite crear store procedure. o cuando me recomiedas crear un store y cuando hacerlo por la herramienta del SAP
Me corrio bien el store egun me indicaste. Peru segun lo revize estarias guiandote del DocDueDate que seria la fecha de vencimiento.
Si quisiera en lugar de guiarme de esa variable y basarme de la variable Docdate que seria la fecha de contabilizacion, como podria hacer. Abajo muestro el store con el cambio que hice, en lugar de lo que pusiste DocDueDate le puse DocDate pero me sale
Msg 4104, Level 16, State 1, Procedure SBO_SP_VTH_DocumentosPorPagarTODOSporFECHAFINAL, Line 15
The multi-part identifier "OVPM.DocDate" could not be bound.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SBO_SP_VTH_DocumentosPorPagarTODOSporFECHAFINAL]
(@FECHAFIN DATETIME)
AS
BEGIN
select
OPCH.CardName as RazonSocial,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O' AND OVPM.DocDate <= @FECHAFIN
UNION
select
OBOE.CardName as RazonSocial,
'LETRA' as TipoDoc,
OBOE.BoeNum as NroSAP,
NULL,
OBOE.DueDate as FechaVencimientoDoc,
OBOE.BOESum as TotalSoles,
OBOE.BoeSumFC as TotalDolares
FROM OBOE INNER JOIN OCRD ON OBOE.CardCode = OCRD.Cardcode
where OBOE.BoeStatus IN ('G', 'D') and OVPM.DocDate <= @FECHAFIN
UNION
select
ORPC.CardName as RazonSocial,
'N/C' as TipoDoc,
ORPC.DocNum as NroSAP,
ORPC.NumAtCard as NroDoc,
ORPC.DocDueDate as FechaVencimientoDoc,
((ORPC.DocTotal-ORPC.PaidToDate)*-1) as TotalSoles,
((ORPC.DocTotalFC-ORPC.PaidFC)*-1) as TotalDolares
FROM ORPC INNER JOIN OCRD ON ORPC.CardCode = OCRD.Cardcode
where ORPC.canceled = 'N' and ORPC.DocStatus = 'O' AND OVPM.DocDate <= @FECHAFIN
order by RazonSocial, FechaVencimientoDoc
END
Hola Luis
En tu SP estas usando mal la tabla OVPM porque no la tienes declarada en ningun lugar
select
OPCH.CardName as RazonSocial,
'FACTURA' as TipoDoc,
OPCH.DocNum as NroSAP,
OPCH.NumAtCard as NroDoc,
OPCH.DocDueDate as FechaVencimientoDoc,
(OPCH.DocTotal-OPCH.PaidToDate) as TotalSoles,
(OPCH.DocTotalFC-OPCH.PaidFC) as TotalDolares
FROM OPCH INNER JOIN OCRD ON OPCH.CardCode = OCRD.Cardcode
where OPCH.canceled = 'N' and OPCH.DocStatus = 'O' AND OVPM.DocDate <= @FECHAFIN
en ninguna parte haces un JOIN con la tabla OVPM, por lo cual te marca el error.
Saludos
-
Entre mas complicada la aritmetica del query, es mas ideal hacer un SP ya que el generador de SAP tiende a "marearse" con algunos operadores
Atte.
Edited by: Floyola on Jun 30, 2011 10:32 PM
Como podria ser ese JOIN a la tabla OVPM para enlazar el docdate. Ese store pertenece a un reporte que muestra todos los documentos por pagar
Una consulta, si bien ese documento me muestra un reporte de todos los documentos por pagar. Si por ejemplo yo tengo una factura que lo ingresaron el 18 de julio y lo pagaron el 30 de julio
El 18, 19, 20, 21, 22, 23,24,25, 26,27, 28 y 29 si yo saco mi reporte deberia ver mi factura que esta por pagar. Si yo la saco del 30 en adelante ya no deberia visualizarla por que esta cancelada.
Mi duda es, siempre que yo saque antes del 30 deberia verse esa factura indicando que esta cancelada. y despues del 30 no deberia vizualizarse.
Estaria bien mi logica, en el store para que pueda hacer esa idea
Hola Luis
Bueno, para lo que tu necesitas, te recomiento hacer una tabla temporal en el stored, donde aparezcan todos los documentos pagados y su fecha de pago.
Por Ejemplo
DECLARE @PAGOS TABLE (Tipo SMALLINT, Folio INT, Fecha_pago DATETIME)
INSERT INTO @PAGOS
SELECT T2.InvType 'Tipo', T2.DocEntry 'Documento', T1.DocDate 'Fecha_pago'
FROM OVPM T1
INNER JOIN VPM2 T2 ON T2.DocNum = T1.DocEntry
Luego haces un JOIN con esa tabla y le das la condicion que la fecha del documento es menor al pago.
Saludos
User | Count |
---|---|
99 | |
9 | |
8 | |
5 | |
4 | |
3 | |
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.