cancel
Showing results for 
Search instead for 
Did you mean: 

Ayuda con reporte

Former Member
0 Kudos

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????

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

En esa query estarias jalando el docdate del OINV. Entonces en mi store lo jalaria de la misma tabla.

Former Member
0 Kudos

La variable @tempo tambien lo colocaria en el store en que parte lo colocaria

felipe_loyolarodriguez
Active Contributor
0 Kudos

Estimado

La variable tempo es solo para traer las varibles de fecha %0 y %1, es lo mismo que colocar


/*SELECT Top 1 docentry from oinv where docdate >= [%0] and docdate <= [%1]*/

La probaste?

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Answers (0)