on 02-09-2011 9:38 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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]
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.
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
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.
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
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
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
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
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ónYou must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
buenas tardes soy nuevo en SAP B1 este query esta muy bueno pero quisiera que me ayudaran a agrupar por OCRD,SLPCODE
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
89 | |
7 | |
7 | |
4 | |
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.