Hola amig@s necesito de sus conocimientos para que me ayuden con lo siguiente: ¿como hago para obtener las facturas y las notas de credito en el mismo rango de fecha? ¿ como debe ser la condición del where? en el query que describo a continuación todo me da como lo requiero excepto que me aparecen las facturas en el rango requerido pero las notas de crédito me dan todas las que se han efectuado hasta la fecha
SELECT DISTINCT T0.[CardCode], T0.[CardName] AS 'Cliente',T0.[DocNum] AS 'N° Factura', T0.[DocDate] AS 'Fecha de factura',T0.[DocTotal] AS 'Monto de factura', T0.PaidSum, T4.[DocTotal] AS 'Último monto en banco', T4.[DocDate] AS 'Fecha de pago en banco', (T6.[DocTotal] - T6.[VatSum]) AS 'Nota de credito', T6.[DocDate] AS 'Fecha de NC', T0.[VatSum], T0.[DiscSum],CASE WHEN T0.[SlpCode] = 01 THEN 'Ana Maria Torres' WHEN T0.[SlpCode] = 02 THEN 'Lismar Perdomo' WHEN T0.[SlpCode] = 03 THEN 'Maria Rosario Teran' WHEN T0.[SlpCode] = 04 THEN 'Marianela Matheus' WHEN T0.[SlpCode] = 05 THEN 'Nager Araujo' WHEN T0.[SlpCode] = 06 THEN 'Noemi Cañizales' WHEN T0.[SlpCode] = 07 THEN 'Pablo Fonceca' WHEN T0.[SlpCode] = 08 THEN 'Yurni Castillo' WHEN T0.[SlpCode] = 09 THEN 'Beltrana Marin' WHEN T0.[SlpCode] = 10 THEN 'Chiquinquira Vera' WHEN T0.[SlpCode] = 11 THEN ' Jose Ramirez' WHEN T0.[SlpCode] = 12 THEN 'Antonio Godoy' WHEN T0.[SlpCode] = 13 THEN 'Yanet Andara' WHEN T0.[SlpCode] = 14 THEN 'Jose G. Hernandez' WHEN T0.[SlpCode] = 15 THEN ' Ivan Segovia' WHEN T0.[SlpCode] = 16 THEN 'Antonio Mendoza' WHEN T0.[SlpCode] = 17 THEN ' Carlos Vargas' WHEN T0.[SlpCode] = 18 THEN 'Darlin Flores' WHEN T0.[SlpCode] = 19 THEN 'Directo' WHEN T0.[SlpCode] = 20 THEN ' ISALBA GUTIERREZ' WHEN T0.[SlpCode] = 21 THEN 'German Segovia' WHEN T0.[SlpCode] = 22 THEN ' Jose Mota' WHEN T0.[SlpCode] = 23 THEN ' Directo Publico' WHEN T0.[SlpCode] = 24 THEN 'Erick Chinappi' WHEN T0.[SlpCode] = 25 THEN ' Eventual Directo' WHEN T0.[SlpCode] = 26 THEN ' Vymacar Sanchez' WHEN T0.[SlpCode] = 27 THEN ' Nelson Garcia' WHEN T0.[SlpCode] = 28 THEN 'Jose Leal' WHEN T0.[SlpCode] = 29 THEN ' Jesus Hernandez' WHEN T0.[SlpCode] = 30 THEN ' Jose Mendoza' WHEN T0.[SlpCode] = 31 THEN 'Daniel Cardozo' WHEN T0.[SlpCode] = 32 THEN ' Andreina Sanchez' WHEN T0.[SlpCode] = 33 THEN 'Francys Aguero' WHEN T0.[SlpCode] = 34 THEN ' Tomas Hernandez' WHEN T0.[SlpCode] = 35 THEN ' Yusneida Martinez' WHEN T0.[SlpCode] = 36 THEN ' Marcos Infante' WHEN T0.[SlpCode] = 37 THEN ' Luis Solorzano' WHEN T0.[SlpCode] = 38 THEN ' Jhalberson Urbina' WHEN T0.[SlpCode] = 39 THEN ' Francys Perez' WHEN T0.[SlpCode] = 40 THEN ' Carlos Castillo' WHEN T0.[SlpCode] = 41 THEN ' Gabriel Musa' WHEN T0.[SlpCode] = 42 THEN ' luis yanez' WHEN T0.[SlpCode] = 43 THEN ' Cesar Acevedo' WHEN T0.[SlpCode] = 44 THEN ' Cristina Lopez' ELSE 'N/A' END RepresentanteVentas, T0.[Comments]
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
WHERE T0.DocDate >= '[%1]' AND T0.DocDate <= '[%2]'
UNION ALL
SELECT DISTINCT T0.[CardCode], T0.[CardName] AS 'Cliente',T0.[DocNum] AS 'N° Factura', T0.[DocDate] AS 'Fecha de factura', NULL MONTODEFACTURA, T0.PaidSum, T4.[DocTotal] AS 'Último monto en banco', T4.[DocDate] AS 'Fecha de pago en banco', (T6.[DocTotal] - T6.[VatSum]) AS 'Nota de credito', T6.[DocDate] AS 'Fecha de NC', T0.[VatSum], T0.[DiscSum],CASE WHEN T0.[SlpCode] = 01 THEN 'Ana Maria Torres' WHEN T0.[SlpCode] = 02 THEN 'Lismar Perdomo' WHEN T0.[SlpCode] = 03 THEN 'Maria Rosario Teran' WHEN T0.[SlpCode] = 04 THEN 'Marianela Matheus' WHEN T0.[SlpCode] = 05 THEN 'Nager Araujo' WHEN T0.[SlpCode] = 06 THEN 'Noemi Cañizales' WHEN T0.[SlpCode] = 07 THEN 'Pablo Fonceca' WHEN T0.[SlpCode] = 08 THEN 'Yurni Castillo' WHEN T0.[SlpCode] = 09 THEN 'Beltrana Marin' WHEN T0.[SlpCode] = 10 THEN 'Chiquinquira Vera' WHEN T0.[SlpCode] = 11 THEN ' Jose Ramirez' WHEN T0.[SlpCode] = 12 THEN 'Antonio Godoy' WHEN T0.[SlpCode] = 13 THEN 'Yanet Andara' WHEN T0.[SlpCode] = 14 THEN 'Jose G. Hernandez' WHEN T0.[SlpCode] = 15 THEN ' Ivan Segovia' WHEN T0.[SlpCode] = 16 THEN 'Antonio Mendoza' WHEN T0.[SlpCode] = 17 THEN ' Carlos Vargas' WHEN T0.[SlpCode] = 18 THEN 'Darlin Flores' WHEN T0.[SlpCode] = 19 THEN 'Directo' WHEN T0.[SlpCode] = 20 THEN ' ISALBA GUTIERREZ' WHEN T0.[SlpCode] = 21 THEN 'German Segovia' WHEN T0.[SlpCode] = 22 THEN ' Jose Mota' WHEN T0.[SlpCode] = 23 THEN ' Directo Publico' WHEN T0.[SlpCode] = 24 THEN 'Erick Chinappi' WHEN T0.[SlpCode] = 25 THEN ' Eventual Directo' WHEN T0.[SlpCode] = 26 THEN ' Vymacar Sanchez' WHEN T0.[SlpCode] = 27 THEN ' Nelson Garcia' WHEN T0.[SlpCode] = 28 THEN 'Jose Leal' WHEN T0.[SlpCode] = 29 THEN ' Jesus Hernandez' WHEN T0.[SlpCode] = 30 THEN ' Jose Mendoza' WHEN T0.[SlpCode] = 31 THEN 'Daniel Cardozo' WHEN T0.[SlpCode] = 32 THEN ' Andreina Sanchez' WHEN T0.[SlpCode] = 33 THEN 'Francys Aguero' WHEN T0.[SlpCode] = 34 THEN ' Tomas Hernandez' WHEN T0.[SlpCode] = 35 THEN ' Yusneida Martinez' WHEN T0.[SlpCode] = 36 THEN ' Marcos Infante' WHEN T0.[SlpCode] = 37 THEN ' Luis Solorzano' WHEN T0.[SlpCode] = 38 THEN ' Jhalberson Urbina' WHEN T0.[SlpCode] = 39 THEN ' Francys Perez' WHEN T0.[SlpCode] = 40 THEN ' Carlos Castillo' WHEN T0.[SlpCode] = 41 THEN ' Gabriel Musa' WHEN T0.[SlpCode] = 42 THEN ' luis yanez' WHEN T0.[SlpCode] = 43 THEN ' Cesar Acevedo' WHEN T0.[SlpCode] = 44 THEN ' Cristina Lopez' ELSE 'N/A' END RepresentanteVentas, T0.[Comments]
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
WHERE T6.[DocDate] >= '[%1]' AND T6.[DocDate] <= '[%2]'
Hola @Ari_Olivar
No entiendo cual es el fin de tu query, yo lo haría de la siguiente manera
SELECT DISTINCT
T0.[CardCode],
T0.[CardName] AS 'Cliente',
T0.[DocNum] AS 'N° Factura',
T0.[DocDate] AS 'Fecha de factura',
T0.[DocTotal] AS 'Monto de factura',
T0.PaidSum,
T4.[DocTotal] AS 'Último monto en banco',
T4.[DocDate] AS 'Fecha de pago en banco',
-- (T6.[DocTotal] - T6.[VatSum]) AS 'Nota de credito',
-- T6.[DocDate] AS 'Fecha de NC',
T0.[VatSum],
T0.[DiscSum],
T7.[SlpName],
T0.[Comments]
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
--Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
--Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= '[%1]' AND T0.DocDate <= '[%2]'
UNION ALL
SELECT DISTINCT
T0.[CardCode],
T0.[CardName] AS 'Cliente',
T0.[DocNum] AS 'N° NC',
T0.[DocDate] AS 'Fecha de NC',
T0.[DocTotal] AS 'Monto de NC',
T0.PaidSum,
T4.[DocTotal] AS 'Último monto en banco',
T4.[DocDate] AS 'Fecha de pago en banco',
-- (T6.[DocTotal] - T6.[VatSum]) AS 'Nota de credito',
-- T6.[DocDate] AS 'Fecha de NC',
T0.[VatSum],
T0.[DiscSum],
T7.[SlpName],
T0.[Comments]
From ORIN T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join RIN1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
--Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
--Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= '[%1]' AND T0.DocDate <= '[%2]'
Hola, @pcarrasco
Gracias por la recomendación para estructurar el query, sin embargo, sigue sin darme lo que necesito, requiero que todos los campos que estoy señalando me los muestre en el rango de fechas colocados en la condición where, tanto factura como notas de crédito, el inconveniente que tengo es que las notas de crédito me aparecen hasta la ultima nota que se elaboro aun cuando no esta dentro del rango establecido y cuando las facturas tienen mas de una nota de crédito me gustaría que no aparezca el monto para no totalizarlo doble
Y así no te funciona ??
La unión que tienes no es necesaria.
SELECT DISTINCT
T0.[CardCode],
T0.[CardName] AS 'Cliente',
T0.[DocNum] AS 'N° Factura',
T0.[DocDate] AS 'Fecha de factura',
T0.[DocTotal] AS 'Monto de factura',
T0.PaidSum,
T4.[DocTotal] AS 'Último monto en banco',
T4.[DocDate] AS 'Fecha de pago en banco',
(T6.[DocTotal] - T6.[VatSum]) AS 'Nota de credito',
T6.[DocDate] AS 'Fecha de NC',
T0.[VatSum],
T0.[DiscSum],
T0.[Comments],
T7.[SlpName]
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= '[%1]' AND T0.DocDate <= '[%2]'
AND T6.[DocDate] >= '[%1]' AND T6.[DocDate] <= '[%2]'
Hola @pcarrasco, no, porque me refleja solo las facturas con notas de crédito y se requiere todas las facturas y notas de créditos elaboradas en el rango de fecha dado, sin embargo cuando cambio en la condición del where el and por or aparecen todas las facturas y las notas de credito hasta la ultima que se elaboro aunque no se encuentre en el rango de fecha requerido, es por ello, que trato de hacerlo usando UNION creando con tu ayuda este query
SELECT DISTINCT T0.[CardCode], T0.[CardName] AS 'Cliente',T0.[DocNum] AS 'N° Factura', T0.[DocDate] AS 'Fecha de factura',T0.[DocTotal] AS 'Monto de factura', T0.[VatSum], T0.PaidSum, T4.[DocTotal] AS 'Último monto en banco', T4.[DocDate] AS 'Fecha de pago en banco', NULL NotaDecredito, NULL FECHANotaDecredito, T7.[SlpName] AS 'RepresentanteVentas', NULL COMENTARIOS
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
--Left Join RIN1 T5 On T2.DocEntry = T5.BaseEntry
--Left Join ORIN T6 On T5.DocEntry = T6.DocEntry
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= '[%1]' AND T0.DocDate <= '[%2]'
UNION ALL
SELECT DISTINCT T1.[CardCode], T1.[CardName], NULL NUMDEFACTURA, NULL FECHADEFACTURA, NULL MONTODEFACTURA, NULL IMPFACTURA, NULL TOTALPAGADO, NULL MONTOENBANCO, NULL FECHABANCO, (T1.[DocTotal] - T1.[VatSum]) AS 'Nota de credito', T1.[DocDate] AS 'Fecha de NC', T3.[SlpName], T1.[Comments]
FROM RIN1 T0
INNER JOIN ORIN T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OCRD T2 ON T0.[BaseCard] = T2.[CardCode]
INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]
WHERE T1.[DocDate] >=[%0] AND T1.[DocDate] <=[%1]
sin embargo, al ejecutarlo por separado me da perfecto pero al unirlos me da un error de SWEI
Lamento no poder ayudare mas.
Te deseo suerte.
Saludos.
Hola
si te sale ese error, lo más sencillo es que generes un procedimiento almacenado que reciba los parámetros de fecha y ejecutes desde el Query Manager el procedimiento almacenado.
A veces el Query Manager se atasca con ciertas consultas
Un saludo
Agustín
Hola.
Prueba llamando los parámetros a través de estas variables:
declare @fecha_Inicio date
declare @fecha_Fin date
SET @fecha_Inicio = (/*select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate=*/'[%0]')
SET @fecha_Fin = (/*select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate=*/'[%1]')
Obviamente hay que reemplazar tus [%0] y [%1] por las variables @fecha_Inicio y @fecha_Fin.
Prueba y nos comentas.
1 me gusta
Hola, @Gera_Mendez, hice las pruebas con la sugerencia dada pero me sigue dando el mismo error, incluso cuando realizo cada bloque de la consulta…
De hecho lo probé antes de sugerirlo y fue funcional, tal vez algo no quedó actualizado.
Sería bueno que pusieras el código como quedó al final.
Hola, @Gera_Mendez, tenias razon lo estaba ejecutando de forma incorrecta, sin embargo al correr de nuevo el query me indica “no se ha obtenido ningun dato con los criterios de selecciòn utilizados” copio el query
declare @fecha_Inicio date
declare @fecha_Fin date
SET @fecha_Inicio = (select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate='[%0]')
SET @fecha_Fin = (select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate='[%1]')
SELECT DISTINCT T0.[CardCode], T0.[CardName] AS 'Cliente',T0.[DocNum] AS 'N° Factura', T0.[DocDate] AS 'Fecha de factura',T0.[DocTotal] AS 'Monto de factura', T0.[VatSum], T0.PaidSum, T4.[DocTotal] AS 'Último monto en banco', T4.[DocDate] AS 'Fecha de pago en banco', NULL NotaDecredito, NULL FECHANotaDecredito, T7.[SlpName] AS 'RepresentanteVentas', NULL COMENTARIOS
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= @fecha_Inicio AND T0.DocDate <= @fecha_Fin
UNION ALL
SELECT DISTINCT T1.[CardCode], T1.[CardName], NULL NUMDEFACTURA, NULL FECHADEFACTURA, NULL MONTODEFACTURA, NULL IMPFACTURA, NULL TOTALPAGADO, NULL MONTOENBANCO, NULL FECHABANCO, (T1.[DocTotal] - T1.[VatSum]) AS 'Nota de credito', T1.[DocDate] AS 'Fecha de NC', T3.[SlpName], T1.[Comments]
FROM RIN1 T0
INNER JOIN ORIN T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OCRD T2 ON T0.[BaseCard] = T2.[CardCode]
INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]
WHERE T1.[DocDate] >=@fecha_Inicio AND T1.[DocDate] <=@fecha_Fin
Es que moviste la sintaxis que te proporcioné:
declare @fecha_Inicio date
declare @fecha_Fin date
SET @fecha_Inicio = (/*select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate=*/'[%0]')
SET @fecha_Fin = (/*select top 1 T0.DocDate from [dbo].[OINV] T0 where T0.DocDate=*/'[%1]')
SELECT DISTINCT T0.[CardCode], T0.[CardName] AS 'Cliente',T0.[DocNum] AS 'N° Factura', T0.[DocDate] AS 'Fecha de factura',T0.[DocTotal] AS 'Monto de factura', T0.[VatSum], T0.PaidSum, T4.[DocTotal] AS 'Último monto en banco', T4.[DocDate] AS 'Fecha de pago en banco', NULL NotaDecredito, NULL FECHANotaDecredito, T7.[SlpName] AS 'RepresentanteVentas', NULL COMENTARIOS
From OINV T0
Inner Join NNM1 T1 On T0.Series = T1.Series
Inner Join INV1 T2 On T0.DocEntry = T2.DocEntry
Left Join RCT2 T3 On T3.DocEntry = T0.DocEntry
Left Join ORCT T4 On T4.DocNum = T0.ReceiptNum
INNER JOIN OSLP T7 ON T7.SlpCode = T0.SlpCode
WHERE T0.DocDate >= @fecha_Inicio AND T0.DocDate <= @fecha_Fin
UNION ALL
SELECT DISTINCT T1.[CardCode], T1.[CardName], NULL NUMDEFACTURA, NULL FECHADEFACTURA, NULL MONTODEFACTURA, NULL IMPFACTURA, NULL TOTALPAGADO, NULL MONTOENBANCO, NULL FECHABANCO, (T1.[DocTotal] - T1.[VatSum]) AS 'Nota de credito', T1.[DocDate] AS 'Fecha de NC', T3.[SlpName], T1.[Comments]
FROM RIN1 T0
INNER JOIN ORIN T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OCRD T2 ON T0.[BaseCard] = T2.[CardCode]
INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]
WHERE T1.[DocDate] >=@fecha_Inicio AND T1.[DocDate] <=@fecha_Fin
Prueba por favor.
2 Me gusta
Hola @Gera_Mendez!! probé de nuevo y me dió lo que quería, muchas gracias por tu apoyo, pero me gustaría saber si es posible ¿cuál era el error? ¿Por qué debía declarar variables?
El error se debió a que “descomentaste” el Select en la asignación del valor a las variables, en si, la sintaxis recuerdo haberla tomado de un foro global de SAP. Esta sintaxis es como una manera de “engañar” al sistema para que force el valor date en las variables, o al menos así lo interpreto.
Que bueno que te ha sido de utilidad, no olvides marcar como solución el comentario que mayormente apoyó a dar con la solución de tu inconveniente.
Saludos.
El uso de ese método sirve de muchas cosas, y yo hasta donde no mal recuerdo les llaman Consultas Referenciadas o Compuestas. Sirven para personalizar el proceso de solicitud de parámetros.
Saludos
1 me gusta
Muchas gracias por la aclaración @juliancab, muy buena información.
Saludos.
Saludos Ari Olivar, ese reporté lo puedes generar. Fácilmente desde la tabla Oinm que es el mayor de facturación e inventarios
Este reporte resume las ventas por producto mensual por meses
En el where colocas tu almacén y el número del vendedor, si lo quieres con todos tus vendedores quita ese slpcode, es un ejemplo, diablo quieres detallado por factura con su NC si tiene debés quitarle el sum, bueno creó q ahí tienes la idea sin usar muchas tablas, si quieres el nombré del clíente más nombre de vendedor debes incluir a la tabla ocrd y oslp saludos