cancel
Showing results for 
Search instead for 
Did you mean: 

Antiguedad de Saldos en Query Manager

marco_ramirez
Active Contributor
0 Kudos

Estimados todos:

Por razones de detalle en el reporte de Antiguedad de saldos, he creado una Query que me de los mismos totales que veo en el reporte de Socios de negocios -- Informe de socios de negocios -- Antiguedad -- Antiguedad de saldos clientes, con la diferencia que esta Query me retorna todas las facturas que integran el saldo del cliente.

Como el reporte original no me da el detalle sino hasta después de dar doble clic en el número de fila que corresponde a cada cliente he tenido que hacerlo así.

El problemita que tengo es que al quererlo generar a una fecha de corte o fecha de vencimiento este no pega en nada con el reporte del sistema pues no me refleja todos los documentos y es aqui donde acudo a ustedes para saber que hacer pues ya estoy a punto de hacer otra cosa menos de logar el resultado.

Para logar este reporte en tomado las tablas OINV, ORIN, JDT1, OCRD, y OSLP haciendo un union all entre OINV, ORIN y JDT1 para el caso de la fecha de vencimiento he usado lo siguiente, por ejemplo T0.[DocDueDate] <= en el caso de OINV y ORIN y T0.[DueDate] <= para JDT1 de igual forma he probado con la instrucción between sin tener el resultado de que el reporte me salgan todas las facturas con vencimiento hasta la fecha indicada.

Trabajo con SAP B1 2007 A SP001 PL:11

Espero haberme explicado y agradezco su ayuda a este caso

Atentamente,

Marco Ramírez

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

te hace falta de considerar las tablas de pagos efectuados por los clientes ORCT - RCT1, recuerda es una reconstruccion de saldos que estas haciendo y debes de considerar los pagos efectuados a la fecha que tu estas enviando como parametro.

Me cuentas como te va.

saludos.

Nelson Guerrero

marco_ramirez
Active Contributor
0 Kudos

Tienes Razón Nelson no están tomadas en cuenta por la siguiente razón

y es que hice una operación matemática restándo el DocTotal - PaidToDate de las tablas correspondientes

Tu crees que con esta operación sea suficiente o es necesario tomar en cuenta las tablas que me dices?

Gracias

Marco Ramírez

Former Member
0 Kudos

Te recomiendo que las consideres y que hagas una reconstruccion de saldo a partir del saldo del documento y sus pagos efectuados, ademas las notas de credito aplicadas a dichas facturas, notas de abono si existieran.

Saludos.

Nelson Guerrero

marco_ramirez
Active Contributor
0 Kudos

De acuerdo Nelson, así lo haré

Gracias de nuevo

Saluos

Marco Ramírez

Former Member
0 Kudos

seria bueno que cerraras la consulta. por cuestiones de puntos.

Gracias.

Nelson Guerrero

marco_ramirez
Active Contributor
0 Kudos

Estimados

Sigo sin lograr el resultado que plantie al incio del tema, como me ha sugerido Nelson he tomado en cuenta las tablas ORCT y RCT4 que es la que realmente me interesa, sin embargo, no logro llegar al dato de Antiguedad de saldos a una fecha determinada.

Alguna idea de como proceder?

Por cierto eh fase de pruebas he visto que lo que quiero lo tiene la versión 8.8 pero está lejos el día en que se pueda migrar a esta versión, al menos es mi caso.

Saludos

Marco

former_member188440
Active Contributor
0 Kudos

Puedes compartir el codigo que actualmente utilizas? a ver si se puede complementar con algo

marco_ramirez
Active Contributor
0 Kudos

Mauricio

Este es el código original, sin las tablas ORCT/RCT4


--Facturas
SELECT 
	T2.[SlpCode] [Vendedor], 
	T2.[SlpName][Nombre Vendedor],
	T1.[CardCode][Código], 
	T1.[CardName][Cliente], 
	T0.[DocNum][Factura], 
	T0.[DocDate][Fecha], 
	T0.[DocDueDate][Vencimiento],
	T0.DocTotal[Total], 
	SUM(T0.DocTotal - T0.PaidToDate) [Monto] 
FROM
	OINV T0  
	INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode 
	INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode 
WHERE 
	(T0.DocTotal - T0.PaidToDate)<>0 and T0.[DocDueDate] between [%0]and [%1]
GROUP BY 
	T2.[SlpCode], 
	T2.[SlpName],
	T1.[CardCode], 
	T1.[CardName], 
	T0.[DocNum], 
	T0.[DocDate], 
	T0.[DocDueDate],
	T0.DocTotal

union all

--Notas de crédito
SELECT 
	T2.[SlpCode][Vendedor], 
	T2.[SlpName][Nombre Vendedor],
	T1.[CardCode][Código], 
	T1.[CardName][Cliente], 
	T0.[DocNum][Factura], 
	T0.[DocDate][Fecha], 
	T0.[DocDueDate][Vencimiento],
	T0.DocTotal[Total], 
	SUM(T0.DocTotal - T0.PaidToDate)* -1 [Monto] 
FROM 
	ORIN T0  
	INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode 
	INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode 
WHERE 
	(T0.DocTotal - T0.PaidToDate)<>0 and T0.[DocDueDate] between [%0]and [%1]
GROUP BY 
	T2.[SlpCode], 
	T2.[SlpName],	
	T1.[CardCode], 
	T1.[CardName], 
	T0.[DocNum], 
	T0.[DocDate], 
	T0.[DocDueDate],
	T0.DocTotal
Union all
--Débitos
SELECT 
	IsNull(T1.[SlpCode],''),
	T2.[SlpName][Nombre Vendedor],
	T0.[ShortName][Código], 
	T1.[CardName][Cliente],
	T0.[TransId][Factura], 
	T0.[RefDate][Fecha], 
	T0.[DueDate][Vencimiento], 
	0, sum(T0.[BalDueDeb])[Monto]
FROM 
	JDT1 T0, OCRD T1 INNER JOIN OSLP T2 ON T1.SlpCode = T2.SlpCode
WHERE 
	T0.[ShortName] = T1.[CardCode] and
	T0.[BalDueDeb]<>0 and 
	T0.[ShortName] Like 'C%%_%%' and  
	T0.[TransType] in('-2','30') and T0.[DueDate] between [%0]and [%1]
	

GROUP BY 
	IsNull(T1.[SlpCode],''),
	T2.[SlpName],
	T0.[ShortName], 
	T1.[CardName],
	T0.[TransId], 
	T0.[RefDate],
	T0.[DueDate]

union all

--Créditos
SELECT 
	IsNull(T1.[SlpCode],''),
	T2.[SlpName][Nombre Vendedor],
	T0.[ShortName][Código], 
	T1.[CardName][Cliente],
	T0.[TransId][Factura], 
	T0.[RefDate][Fecha], 
	T0.[DueDate][Vencimiento], 
	0, sum(T0.[BalDueCred]*-1)[Monto]
FROM 
	JDT1 T0, OCRD T1 INNER JOIN OSLP T2 ON T1.SlpCode = T2.SlpCode
WHERE 
	T0.[ShortName] = T1.[CardCode]and
	T0.[BalDueCred]<>0 and 
	T0.[ShortName] Like 'C%%_%%' and  
	T0.[TransType] in('-2','30') and T0.[DueDate] between [%0]and [%1]
	
GROUP BY 
	IsNull(T1.[SlpCode],''),
	T2.[SlpName],
	T0.[ShortName], 
	T1.[CardName],
	T0.[TransId], 
	T0.[RefDate],
	T0.[DueDate] 

Former Member
0 Kudos

es extraño que con todo lo que has hecho en consulta aún no te entregue el resultaddo deseado.

Según tengo entendido, el saldo de clientes y proveedores de SB1, se lleva por linea de JournalEntry.

Es decir cada linea de esta va llevando el saldo pendiente del "documento" o transacción.

Por lo tanto, el saldo pendiente de un SN es la suma del Baldue de las lineas de JDT1 donde ese codigo este involucrado.

entendiendo esto es que no se poruqe no te entrega el saldo pendiente.

slds.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas

Para aportar, con esta consulta obtenemos el saldo al dia de hoy de los clientes.


Select T0.ShortName, T1.CardName, T0.TransId, T0.Refdate, 
CASE T0.TransType
WHEN '13' THEN (SELECT T.FolioNum FROM OINV T WHERE T.TransId = T0.TransId)
WHEN '14' THEN (SELECT T.FolioNum FROM ORIN T WHERE T.TransId = T0.TransId)
ELSE T0.BaseRef
END 'Folio', 
T0.BalDueDeb-T0.BalDueCred 'SaldoPendiente'
FROM JDT1 T0
INNER JOIN OCRD T1 ON T0.ShortName = T1.CardCode
WHERE (T0.BalDueDeb != 0 OR T0.BalDueCred != 0) AND T0.Refdate <= GETDATE()
AND T1.GroupCode = '100'  -- Tambien puede ser T1.CardType = 'C'
ORDER BY T0.ShortName, T0.TransId

Ojo: que es para saber los documentos pendientes al dia de hoy

Saludos

FLR

Former Member
0 Kudos

Eso que tiene la consulta de Floyola decia yo.

Incluso yo no haria un SELECT para traer el folio del documento, dado que apartir de SAP 2007, el número de folio se encuentra en el comprobante contable(OJDT), por lo tanto, usaria ese campo y con ello optimizaria bastante la consulta.

ahora si lo que necesitas no es obtener el saldo pendiente por cada documento de un SN (al dia de hoy).

Sino que el saldo pendiente a una fecha determinada, buscaria la solución por el lado de la tabla de reconciliaciones (OITR, ITR1).

Pues segun mi apreciación el saldo pendiente del documento a una fecha X es el valor total del documento(JDT1) menos la suma del valor aplicado o reconciliado (ITR1) hasta antes de la fecha X.

espero esto te sirva para la solución.

slds.

marco_ramirez
Active Contributor
0 Kudos

Gracias por los aportes

Para ampliarles, la dificultad que tengo es al delimitar por fechas, es decir, si deseo un saldo de documentos del SN "X" no me lo entrega.

Ahora bien si ejecuto la consulta sin delimitación de fechas, me devuelve los datos al momento de la ejecución lo cual coincide con el reporte de Antiguedad de saldos de SAP B1

Haré las pruebas respectivas con los aportes que me han dado y comentaré en breve

Saludos

marco_ramirez
Active Contributor
0 Kudos

Estimados

Aplique las sugerencias que me aportaron, sin embargo, sigo sin obtener el resultado el único que consigo es que me de el total de Antiguedad de saldos al momento de ejecutar la consulta sin ningún paramentro de fechas.

Ahora bien me surge la duda si debo tomar en cuenta algo en especial cuando trabajo con fechas hacia atras.

Me explico: si deseo una antiguedad de saldos al 31/12/10 estoy trabajando con un


where T0.DocDate <= [%0] and T0.DocDueDate <= [%1]

Es decir todas las facturas que sean menores o igual a la fecha que indico en las variables, esto si me da algunos datos pero no todos los que realmente integran el saldo.

Agradezco su atención paciencia con este tema

Saludos

Marco Ramírez

felipe_loyolarodriguez
Active Contributor
0 Kudos

Abajo

Edited by: Floyola on Mar 24, 2011 9:33 PM

felipe_loyolarodriguez
Active Contributor
0 Kudos

Marco

Ejecuta este query


SELECT T0.CardCode, T0.CardName, T1.TransId'Asiento', T4.BaseRef 'Doc Interno', T4.Folionum'Folio',
CASE
	WHEN T3.DebHab = 'D' THEN (T1.Debit-T1.Credit+T3.ReconSum)
	WHEN T3.DebHab = 'C' THEN (T1.Debit-T1.Credit-T3.ReconSum)
	ELSE (T1.Debit-T1.Credit)
END 'Saldo',
CASE T1.TransType
	WHEN '13' THEN (SELECT Y.Comments FROM OINV Y WHERE Y.TransId = T1.TransId)
	WHEN '14' THEN (SELECT Y.Comments FROM ORIN Y WHERE Y.TransId = T1.TransId)
	ELSE T1.LineMemo
END 'Comentarios'
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 (SELECT X0.ShortName 'SN', X0.TransId 'TransId', SUM(X0.ReconSum)'ReconSum', X0.IsCredit 'DebHab', X0.TransRowId 'Linea'
		FROM ITR1 X0
		INNER JOIN OITR X1 ON X1.ReconNum = X0.ReconNum
		WHERE X1.ReconDate <= '[%0]' AND X1.CancelAbs = ''
		GROUP BY X0.ShortName, X0.TransId, X0.IsCredit, X0.TransRowId) T3 ON T3.TransId = T1.TransId AND T3.SN = T1.ShortName AND T3.Linea = T1.Line_ID
WHERE T0.CardType = 'C' AND T1.RefDate <= '[%0]' AND T2.AcctCode = 'TU CUENTA DE CLIENTES' AND
(CASE
	WHEN T3.DebHab = 'D' THEN (T1.Debit-T1.Credit+T3.ReconSum)
	WHEN T3.DebHab = 'C' THEN (T1.Debit-T1.Credit-T3.ReconSum)
	ELSE (T1.Debit-T1.Credit)
END) != '0'
ORDER BY T0.CardCode, T1.TransId

Con ese tendras el detalle del Saldo

Slds

marco_ramirez
Active Contributor
0 Kudos

Gracias Floyola

Por razones de trabajo no había podido entrar al foro, retomaré el caso.

Saludos

marco_ramirez
Active Contributor
0 Kudos

Estimado Floyola

Ejecute la query que me comportes, sin embargo, no genera dato alguno.

Al inicio me aparece una ventana que pide la fecha de reconcilación, la ingreso y ejecuto pero no salen datos.

gracias

Saludos

felipe_loyolarodriguez
Active Contributor
0 Kudos

Colocaste tu cuenta de clientes?...T2.Acctcode = 'TU CUENTA DE CLIENTES'

slds'

marco_ramirez
Active Contributor
0 Kudos

Resuelto amigo!

En esa parte de la cuenta de cliente hice un cambio en vez de = utilice un IN ya que tengo varias cuentas.

Gracias por el apoyo y solución

Saludos

Former Member
0 Kudos

DECLARE @FECHA AS DATETIME

DECLARE @CLIENTE AS VARCHAR (100)

DECLARE @VENDEDOR AS VARCHAR (50)

DECLARE @MONEDA AS VARCHAR (5)

SELECT @FECHA = T0.[DocDate] FROM OINV T0 WHERE T0.DocDate =getdate()

SET @FECHA = CONVERT(DATETIME, getdate(), 112)

SET @FECHA = CONVERT(DATETIME, @FECHA, 112)

SET @VENDEDOR = ' '

SET @MONEDA = ' '

SELECT a.Cliente,

a.CardName,

case when a.moneda = 'mxp' then a.Total else a.Total / a.Tcambio end as 'Total' ,

case when a.moneda = 'mxp' then (a.vencer - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0) + coalesce((a.nc_rec /a.Tcambio),0) ) ) end as 'Al Corriente',

case when a.moneda = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '30 Dias' ,

case when a.moneda = 'mxp' then ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '60 Dias',

case when a.moneda = 'mxp' then (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '90 Dias' ,

case when a.moneda = 'mxp' then (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '120 Dias',

case when a.moneda = 'mxp' then (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as ' Mas de 120 Dias' ,

coalesce(case when a.moneda = 'mxp' then (a.vencer - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end,0) as 'Saldo'

FROM

(SELECT T0.[DocCur] as 'Moneda',

T0.CardCode as 'Cliente' ,

T0.CardName ,

T1.GroupNum,

T0.[DocRate] as 'Tcambio' ,

case WHEN T0.[DocCur] <> 'MXP' THEN ((T0.[DocTotal]-PaidSys )* T0.[DocRate])

ELSE T0.DocTotal-PaidSys END as 'Total' ,

null as 'Pagado',

-- Notas de Credito

null as 'nc' ,

(SELECT sum(T0x.[ReconSum]) FROM ITR1 T0x INNER JOIN OITR T1x ON T0x.ReconNum = T1x.ReconNum

WHERE T0x.[SrcObjTyp] = 13 and T0x.[SrcObjAbs] = T0.docentry and T1x.IsCard='C' AND T1x.[ReconDate] <= @FECHA ) as 'nc_rec' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) < 1 then

case when T0.[DocCur] = 'MXP'

Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'vencer ' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 1 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 30 then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys

end end as 'a' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 31 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 60

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'b ',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 61 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 90

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-Paidsys ELSE T0.[DocTotal]-paidsys end end as 'c',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 91 and

DATEDIFF(day,T0.DocDueDate , @FECHA ) < = 120

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'd',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 121

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'e '

FROM OINV T0 INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode

INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode

WHERE T0.DocDate <= @FECHA

) a

LEFT JOIN

--- Saldo Polizas

(select z.Saldo as 'PSaldo',

z.PCliente ,

x.PPagos,

(z.Saldo + coalesce(x.PPagos,0)) as 'Saldo'

from

(SELECT SUM(T0.[Credit]) AS 'Saldo',

T0.[ShortName] AS 'PCliente'

FROM JDT1 T0 INNER JOIN OJDT T1 ON T0.TransId = T1.TransId, OCRD T2

WHERE T1.[TransType] = 30 and T0.[ShortName] = T2.[CardCode]

and T2.[CardType] = 'S' AND T0.[Debit] >= 1

--AND ( T0.[MthDate] IS NULL OR T0.[MthDate] > @FECHA )

and T0.[RefDate] <= @FECHA

GROUP BY T0.[ShortName] ) z

left join

(SELECT SUM(T11.[SumApplied])AS 'PPagos' ,

T10.[CardCode] as 'PPCliente'

FROM ORCT T10 INNER JOIN RCT2 T11 ON T10.DocEntry = T11.DocNum

WHERE T11.[InvType] = 30 and T10.[Canceled] = 'n'

AND T11.[SumApplied] <= -1 AND T10.DocDate <= @FECHA

GROUP BY T10.[CardCode]) x

ON Z.PCliente = x.PPCliente

) b

ON a.Cliente = b.PCliente

WHERE (a.Total - coalesce(a.Pagado,0) - coalesce(a.nc,0) - coalesce(a.nc_rec,0) ) >= 0.30

order by 1,4

Answers (4)

Answers (4)

0 Kudos

Hola buenas tardes.

Tengo una duda, que quizás me puedan ayudar.¿Porqué cuando subo una factura de venta mediante DTW, el campo referencia1 o referencia2 no me lo asume en el SAP.? Las cargas funcionan bien, no arroja errores de carga, y la factura aparece perfecta en ambos módulos, pero esos campos me los deja en blanco en SAP (tanto REF1, como REF2).Si alguien sabe porque pasa esto me comentan please.gracias de antemano.Gastón
amejia1
Explorer
0 Kudos

Buen día,

Soy nuevo y dispuesto aprender de SAP4HANA.

La consulta compartida por este medio es compatible corriendo desde HANAStudio?

Otra pregunta, la misma estructura de tablas de SAPBone son las mismas en SAP4Hana?

Saludos,

--

Alex

Former Member
0 Kudos

buenas tardes soy nuevo en SAP B1 este query esta muy bueno pero quisiera que me ayudaran a agrupar por OCRD,SLPCODE

Former Member
0 Kudos

Buenos Días Compañeros

En base al query suministrador por ustedes, se podra construir a una fecha especifica.

DECLARE @FECHA AS DATETIME

DECLARE @CLIENTE AS VARCHAR (100)

DECLARE @VENDEDOR AS VARCHAR (50)

DECLARE @MONEDA AS VARCHAR (5)

SELECT    @FECHA =  T0.[DocDate] FROM  OINV T0   WHERE    T0.DocDate =getdate()

SET @FECHA = CONVERT(DATETIME, getdate(), 112)

SET @FECHA = CONVERT(DATETIME, @FECHA, 112)

SET @VENDEDOR = ' '

SET @MONEDA = ' '

SELECT a.Cliente,

a.CardName,

case  when  a.moneda  = 'mxp' then  a.Total  else  a.Total / a.Tcambio end  as 'Total'  ,

case  when  a.moneda  = 'mxp' then  (a.vencer -  (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0) + coalesce((a.nc_rec /a.Tcambio),0)  ) ) end  as 'Al Corriente',

case  when  a.moneda  = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end     as '30 Dias' ,

case  when  a.moneda  = 'mxp' then  ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else   ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end  as '60 Dias',

case  when  a.moneda  = 'mxp' then  (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end  as '90 Dias' ,

case  when  a.moneda  = 'mxp' then  (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /  a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '120 Dias',

case  when  a.moneda  = 'mxp' then  (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) )  else  ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as ' Mas de 120 Dias'  ,

coalesce(case  when  a.moneda  = 'mxp' then  (a.vencer -  (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end  ,

case  when  a.moneda  = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case  when  a.moneda  = 'mxp' then  ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else   ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case  when  a.moneda  = 'mxp' then  (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case  when  a.moneda  = 'mxp' then  (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else  ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /  a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case  when  a.moneda  = 'mxp' then  (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) )  else  ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end,0)  as 'Saldo'

FROM

(SELECT T0.[DocCur] as 'Moneda',

T0.CardCode as 'Cliente' ,

T0.CardName  ,

T1.GroupNum,

T0.[DocRate] as 'Tcambio' ,

case WHEN T0.[DocCur]  <> 'MXP' THEN ((T0.[DocTotal]-PaidSys )* T0.[DocRate])  

       ELSE  T0.DocTotal-PaidSys END  as 'Total' ,

null  as 'Pagado',

-- Notas de Credito

null as 'nc' ,

(SELECT sum(T0x.[ReconSum]) FROM ITR1 T0x  INNER JOIN OITR T1x ON T0x.ReconNum = T1x.ReconNum

WHERE T0x.[SrcObjTyp]  = 13   and  T0x.[SrcObjAbs]  = T0.docentry and   T1x.IsCard='C'  AND   T1x.[ReconDate] <=  @FECHA )  as 'nc_rec' ,

case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  < 1 then

case when   T0.[DocCur] = 'MXP'

Then  T0.DocTotal-paidsys ELSE  T0.[DocTotal]-paidsys  end  end as  'vencer ' ,

                               case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  >= 1 and

DATEDIFF(day,T0.DocDueDate , @FECHA)    < = 30   then case when  T0.[DocCur] = 'MXP'  Then  T0.DocTotal-paidsys ELSE  T0.[DocTotal]-paidsys

end end   as 'a' ,

case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  >= 31 and

DATEDIFF(day,T0.DocDueDate , @FECHA)    < =  60

then case when   T0.[DocCur] = 'MXP' Then  T0.DocTotal-paidsys ELSE  T0.[DocTotal]-paidsys end     end   as 'b ',

case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  >= 61 and

DATEDIFF(day,T0.DocDueDate , @FECHA)    < = 90

then case when  T0.[DocCur] = 'MXP' Then  T0.DocTotal-Paidsys ELSE  T0.[DocTotal]-paidsys   end  end   as 'c',

case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  >= 91 and

DATEDIFF(day,T0.DocDueDate , @FECHA )    < = 120

then case when  T0.[DocCur] = 'MXP' Then  T0.DocTotal-paidsys ELSE  T0.[DocTotal]-paidsys   end   end   as 'd',

case  when  DATEDIFF(day,T0.DocDueDate , @FECHA)  >= 121

then case when   T0.[DocCur] = 'MXP' Then  T0.DocTotal-paidsys ELSE  T0.[DocTotal]-paidsys end    end    as 'e '

                FROM OINV T0 INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode

INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode

WHERE  T0.DocDate <= @FECHA

)   a

LEFT JOIN

--- Saldo Polizas

(select z.Saldo as 'PSaldo',

z.PCliente ,

x.PPagos,

(z.Saldo + coalesce(x.PPagos,0)) as 'Saldo'

from

(SELECT  SUM(T0.[Credit]) AS 'Saldo',

T0.[ShortName] AS 'PCliente'

FROM JDT1 T0  INNER JOIN OJDT T1 ON T0.TransId = T1.TransId, OCRD T2

                               WHERE   T1.[TransType] = 30 and  T0.[ShortName]  = T2.[CardCode]

and  T2.[CardType] = 'S' AND  T0.[Debit] >= 1

--AND (  T0.[MthDate] IS NULL OR  T0.[MthDate] > @FECHA )

and T0.[RefDate]  <= @FECHA

GROUP BY T0.[ShortName] ) z

left join

(SELECT SUM(T11.[SumApplied])AS 'PPagos' ,

T10.[CardCode] as 'PPCliente'

FROM ORCT T10  INNER JOIN RCT2 T11 ON T10.DocEntry = T11.DocNum

WHERE T11.[InvType]  = 30 and  T10.[Canceled]  = 'n'

AND  T11.[SumApplied]  <= -1 AND T10.DocDate <= @FECHA

GROUP BY  T10.[CardCode]) x

ON Z.PCliente = x.PPCliente

                ) b

ON a.Cliente = b.PCliente

WHERE  (a.Total -  coalesce(a.Pagado,0)  - coalesce(a.nc,0) -   coalesce(a.nc_rec,0)  )  >= 0.30 

order by 1,4

0 Kudos

Hola a Todos los expertos en SAP Business One

Agradezco este foro ya que me ha ayudado mucho a resolver varias situaciones en SAP Business One, en esta ocacion los contacto porque estoy ocupando este Query que amablemente compartieron solo que encontré un pequeño detalle, no contiene los pagos recibidos a cuenta o pagos recibidos que no se han terminado de aplicar a facturas de clientes. Alguien tiene alguna sugerencia al respecto. Saludos

0 Kudos

Hola a todos

Solo para comentar que a mi en lo personal me sirvio este Query Base para crear una antigüedad de saldos. Saludos

select t1.CardCode,t0.ref1, t0.BalDueDeb,t0.BalDueCred,BalFcCred,t0.BalFcDeb, t0.TransType, t0.DueDate

from          dbo.JDT1 T0 with(nolock)

                    INNER JOIN

                    dbo.OCRD T1  with(nolock)

                    ON T0.shortname = T1.cardcode

                    and T1.cardtype = 'c'

where T0.intrnmatch = '0 'and

  T0.BALDUEDEB != T0.BALDUECRED and

  t1.CardCode not in (select a.cliente

  from (select t1.cardcode as 'cliente', sum(t0.BalDueDeb)-sum(t0.BalDueCred) as 'saldo'

   from dbo.JDT1 T0 with(nolock) INNER JOIN

  dbo.OCRD T1  with(nolock) ON T0.shortname = T1.cardcode and

  T1.cardtype = 'c'

   where T0.intrnmatch = '0' and

  T0.BALDUEDEB != T0.BALDUECRED 

   Group by t1.CardCode) a

      where a.saldo=0)

order by 1,2

Former Member
0 Kudos

Aqui tienen un Query que yo hice espero les ayude.

Saludos.

DECLARE @FECHA AS DATETIME

DECLARE @CLIENTE AS VARCHAR (100)

DECLARE @VENDEDOR AS VARCHAR (50)

DECLARE @MONEDA AS VARCHAR (5)

SELECT @FECHA = T0.[DocDate] FROM OINV T0 WHERE T0.DocDate =getdate()

SET @FECHA = CONVERT(DATETIME, getdate(), 112)

SET @FECHA = CONVERT(DATETIME, @FECHA, 112)

SET @VENDEDOR = ' '

SET @MONEDA = ' '

SELECT a.Cliente,

a.CardName,

case when a.moneda = 'mxp' then a.Total else a.Total / a.Tcambio end as 'Total' ,

case when a.moneda = 'mxp' then (a.vencer - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0) + coalesce((a.nc_rec /a.Tcambio),0) ) ) end as 'Al Corriente',

case when a.moneda = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '30 Dias' ,

case when a.moneda = 'mxp' then ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '60 Dias',

case when a.moneda = 'mxp' then (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '90 Dias' ,

case when a.moneda = 'mxp' then (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as '120 Dias',

case when a.moneda = 'mxp' then (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end as ' Mas de 120 Dias' ,

coalesce(case when a.moneda = 'mxp' then (a.vencer - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.vencer - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc /a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then ( a.a - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.a - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then ( a.b - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.b - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio) ,0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.c - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.c - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.d - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.d - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end ,

case when a.moneda = 'mxp' then (a.e - (coalesce(a.Pagado,0)+ coalesce(a.nc,0) + coalesce(a.nc_rec,0)) ) else ( a.e - (coalesce((a.Pagado / a.Tcambio) ,0) + coalesce((a.nc / a.Tcambio),0)+ coalesce((a.nc_rec /a.Tcambio),0)) ) end,0) as 'Saldo'

FROM

(SELECT T0.[DocCur] as 'Moneda',

T0.CardCode as 'Cliente' ,

T0.CardName ,

T1.GroupNum,

T0.[DocRate] as 'Tcambio' ,

case WHEN T0.[DocCur] <> 'MXP' THEN ((T0.[DocTotal]-PaidSys )* T0.[DocRate])

ELSE T0.DocTotal-PaidSys END as 'Total' ,

null as 'Pagado',

-- Notas de Credito

null as 'nc' ,

(SELECT sum(T0x.[ReconSum]) FROM ITR1 T0x INNER JOIN OITR T1x ON T0x.ReconNum = T1x.ReconNum

WHERE T0x.[SrcObjTyp] = 13 and T0x.[SrcObjAbs] = T0.docentry and T1x.IsCard='C' AND T1x.[ReconDate] <= @FECHA ) as 'nc_rec' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) < 1 then

case when T0.[DocCur] = 'MXP'

Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'vencer ' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 1 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 30 then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys

end end as 'a' ,

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 31 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 60

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'b ',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 61 and

DATEDIFF(day,T0.DocDueDate , @FECHA) < = 90

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-Paidsys ELSE T0.[DocTotal]-paidsys end end as 'c',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 91 and

DATEDIFF(day,T0.DocDueDate , @FECHA ) < = 120

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'd',

case when DATEDIFF(day,T0.DocDueDate , @FECHA) >= 121

then case when T0.[DocCur] = 'MXP' Then T0.DocTotal-paidsys ELSE T0.[DocTotal]-paidsys end end as 'e '

FROM OINV T0 INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode

INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode

WHERE T0.DocDate <= @FECHA

) a

LEFT JOIN

--- Saldo Polizas

(select z.Saldo as 'PSaldo',

z.PCliente ,

x.PPagos,

(z.Saldo + coalesce(x.PPagos,0)) as 'Saldo'

from

(SELECT SUM(T0.[Credit]) AS 'Saldo',

T0.[ShortName] AS 'PCliente'

FROM JDT1 T0 INNER JOIN OJDT T1 ON T0.TransId = T1.TransId, OCRD T2

WHERE T1.[TransType] = 30 and T0.[ShortName] = T2.[CardCode]

and T2.[CardType] = 'S' AND T0.[Debit] >= 1

--AND ( T0.[MthDate] IS NULL OR T0.[MthDate] > @FECHA )

and T0.[RefDate] <= @FECHA

GROUP BY T0.[ShortName] ) z

left join

(SELECT SUM(T11.[SumApplied])AS 'PPagos' ,

T10.[CardCode] as 'PPCliente'

FROM ORCT T10 INNER JOIN RCT2 T11 ON T10.DocEntry = T11.DocNum

WHERE T11.[InvType] = 30 and T10.[Canceled] = 'n'

AND T11.[SumApplied] <= -1 AND T10.DocDate <= @FECHA

GROUP BY T10.[CardCode]) x

ON Z.PCliente = x.PPCliente

) b

ON a.Cliente = b.PCliente

WHERE (a.Total - coalesce(a.Pagado,0) - coalesce(a.nc,0) - coalesce(a.nc_rec,0) ) >= 0.30

order by 1,4