on 05-24-2011 9:01 PM
Hola,
Nuestros clientes nos piden la posibilidad de visualizar las cuentas en los balances agrupadas por dos o por tres dígitos, es decir, por ejemplo si las cuentas contables son de 6 dígitos (ejemplo 600000, 601001. 400000, 401001, 411000, 412001, ...) poder agruparlas por cuentas de la sieguiente manera:
Cuentas del grupo 60 --> 600000 y 601001
Cuentas del grupo 600 --> 600000
Cuentas del grupo 601 --> 601000
Cuentas del grupo 40 --> 400000 y 401001
Cuentas del grupo 400 --> 400000
Cuentas del grupo 401 --> 401001
Cuentas del grupo 41 --> 411000 y 412001
Cuentas del grupo 411 --> 411000
Cuentas del grupo 412 --> 412000
......
No se si alguien tiene este mismo problema y no si con una consulta se podría hacer. De antemano gracias.
Un saludo,
Tere
Una forma nativa de hacer eso, es utilizando los Niveles de cuentas y/o los segmentos de cuentas.
Ejemplo de Niveles
100000 Activo -- Nivel 1
--110000 Activo Corriente -- Nivel 2
-
111000 Efectivo y Equivalente -- Nivel 3
-
111101 Caja Nacional-- Nivel 4
-
111102 Caja USD -- Nivel 4
-
111103 Banco -- Nivel 4
Encontes en el balance, esquina superior derecha, ajustas el nivel de visualizacion de las cuentas y puedes ver por grupos.
Por segmentos es mas complicado ya que deberias asignar un segmento de la cuenta como el grupo, luego hacer un query seleccionando el segmento y sumar los debitos y creditos que correspondan al segmento.
Espero te sirva
Slds
Felipe Loyola
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola.
Gracias por las dos respuestas. Con la consulta no me muestra los resultados bien, voy a mirarla a ver si encuentro el problems.
Con respecto a la segmentación, en mi localización no se permiten los segmentos (estoy en España)
He estado intentando generar un modelo de informe financiero a medida pero es imposible, no consigo ponerlo en funcionamiento salvo que se base en el estándar y entonces tengo el mismo problema.
Voy a revisar tu consulta y te digo algo.
Nuevamente gracias,
Saludos,
Tere
Mmmm
Se me ocurre que revises el FormatCode y lo cambies por el AcctCode, en mi caso usamos cuentas segmentadas entonces el codigo de la cuenta es la union de los segmentos que es igual al FormatCode, razon por la que esta tomando ese campo.
Querys para balances tengo varias, aqui te dejo 2 mas para que veas si las puedes adaptar al modelo de tu cliente.
SELECT
(SELECT Y.AcctName FROM OACT Y WHERE Y.AcctCode IN (SELECT Y1.FatherNum FROM OACT Y1 WHERE Y1.AcctCode = T0.FatherNum)) 'Superior',
T0.FatherNum 'Rubro',
(SELECT Y2.AcctName FROM OACT Y2 WHERE Y2.AcctCode = T0.FatherNum) 'Nombre Rubro',
SUM(T1.Debit - T1.Credit) 'Saldo'
FROM OACT T0
INNER JOIN dbo.JDT1 T1 ON T1.Account = T0.AcctCode
WHERE T1.RefDate BETWEEN '[%0]' AND '[%1]' AND T0.Segment_0 !> '40000' /*Cambia el T0.Segment_0 por T0.AcctCode o T0.Formatcode*/
GROUP BY T0.FatherNum
Y otra mas
SELECT
T0.FormatCode,
T0.AcctName,
ISNULL((SELECT SUM(T.Debit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]'),0) 'Debitos',
ISNULL((SELECT SUM(T.Credit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]'),0) 'Creditos',
'Deudor' = CASE
WHEN (SELECT SUM(T.Debit - T.Credit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]') > '0' THEN (SELECT SUM(T.Debit - T.Credit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]')
ELSE '0'
END,
'Acreedor' = CASE
WHEN (SELECT SUM(T.Credit - T.Debit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]') > '0' THEN (SELECT SUM(T.Credit - T.Debit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]')
ELSE '0'
END,
ISNULL((SELECT SUM(T.Debit - T.Credit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]' AND T0.Segment_0 < '20000'),0) 'Activos',
ISNULL((SELECT SUM(T.Credit - T.Debit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]' AND T0.Segment_0 BETWEEN '20000' AND '39999'),0) 'Pasivos',
ISNULL((SELECT SUM(T.Debit - T.Credit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]' AND T0.Segment_0 BETWEEN '50000' AND '99999'),0) 'Perdida',
ISNULL((SELECT SUM(T.Credit - T.Debit) FROM JDT1 T WHERE T.Account = T0.AcctCode AND T.RefDate BETWEEN '[%0]' AND '[%1]' AND T0.Segment_0 BETWEEN '40000' AND '49999'),0) 'Ganancia' /*cambia los rangos de las cuentas*/
FROM OACT T0
WHERE T0.FormatCode != '0'
ORDER BY T0.FormatCode
Saludos
Gracias Gonzalo,
No les sirve la agrupación del estandar porque sus auditores les piden las cuentas agrupadas por 1, 2, 3, 4 ó 5 dígitos pero por la codificación numérica (muchos contables lo solicitan así) es decir imaginemos que quieren ver las cuentas del grupo 1 agrupadas a:
- Nivel 1 = todas las cuentas que comiencen por 1
- Nivel 2 = todas las cuentas que comiencen por 10, 11, 12, ...con sus subtotales
- Nievl 3 = todas las que comiencen por 101, 102 ,111, 112... con subtotales
- ....
- así hasta el nivel máximo de cuenta.
Supongo que se podría hacer una consulta o un crystal pero el tema es cómo filtrar el modo de agrupación (nivel 1, nivel 2,...) y poder obtener todas las contabilizaciones en un rango de fechas determinado por filtros.
Un saludo,
Tere
Hola tengo un caso similar si me pueden ayudar,
Tengo la siguiente consulta necesito modificar este query ya que me muestra AcctCode as Cuenta_3 en varias lineas y lo que necesito es q si tienen el mismo código solo aparezca una sola linea resumiendo todas es decir si me aparece varias veces 1105 solo debería aparecer una única vez.
Les dejo el código espero me puedan ayudar Gracias.
/*SELECT FROM [dbo].[OINV] P1*/
declare @fromdate as datetime
/* WHERE */
set @fromdate = /* P0.DocDate */ '[%0]'
/*SELECT FROM [dbo].[OINV] P1*/
declare @Todate as datetime
/* WHERE */
set @Todate = /* P1.DocDate */ '[%1]'
/*SELECT FROM [dbo].[OACT] P3*/
declare @FromAcct as nvarchar(20)
/* WHERE */
set @FromAcct = /* P3.AcctCode */ '[%2]'
/*SELECT FROM [dbo].[OACT] P4*/
declare @ToAcct as nvarchar(20)
/* WHERE */
set @ToAcct = /* P4.AcctCode */ '[%3]'
/*SELECT FROM [dbo].[OACT] P4*/
declare @PUC as nvarchar(20)
/* WHERE */
set @PUC = /* P4.LocManTran */ '[%4]'
/*SELECT FROM [dbo].[OJDT] P5*/
declare @cierre as nvarchar(1)
/* WHERE */
set @cierre = /* P5.AutoWT */ '[%5]'
SELECT case @PUC when 'N' then T10.AcctCode else Left(T71.AcctCode,1) end as 'Cuenta_1',
case @PUC when 'N' then T10.AcctName else
case Left(T71.AcctCode,1) when '1'
then 'Activo' when '2' then 'Pasivo' when '3' then 'Patrimonio'
when '4' then 'Ingresos' when '5' then 'Gastos' when
'6' then 'Costos de Ventas' when '7' then 'Costos de Produccion o de Operacion' end end as 'Nombre Cuenta 1',
T8.AcctCode as 'Cuenta_2', T8.AcctName as 'Nombre Cuenta 2',
T7.AcctCode as 'Cuenta_3', T7.AcctName as 'Nombre Cuenta 3',
isnull(SUM(T9.SI),0) as 'saldo Inicial', isnull(SUM(T9.MD),0) as 'Movimiento Debito',
isnull(SUM(T9.MC),0) as 'Movimiento Credito', isnull(SUM(T9.SF),0) as 'Saldo Final',
T71.AcctCode as 'Cuenta_4', T71.AcctName as 'Nombre Cuenta 4'
FROM (
SELECT case when T2.levels=5 then T5.FatherNum when T2.levels=4 then T4.FatherNum when T2.Levels=3
then T3.FatherNum when T2.Levels=2 then T2.FatherNum else T2.AcctCode
end as Cuenta_1,case when T2.levels=5 then T4.FatherNum when T2.levels=4 then T3.FatherNum when T2.Levels=3
then T2.FatherNum else T2.AcctCode
end as Cuenta_2,case when T2.levels=5 then T3.FatherNum when T2.levels=4 then T2.FatherNum else
T2.AcctCode end as Cuenta_3,case when T2.levels=5 then T3.AcctCode when T2.levels=4 then T2.AcctCode else
T2.AcctCode end as Cuenta_4, case when T1.RefDate< @fromdate then SUM(isnull(T1.debit,0)-
isnull(T1.Credit,0)) else 0 end as SI, case when T1.RefDate between @fromdate and @Todate
then SUM(isnull(T1.Credit,0)) else 0 end as MC, case when T1.RefDate between @fromdate and @Todate
then SUM(isnull(T1.Debit,0)) else 0 end as MD, case when T1.RefDate<= @Todate
then SUM(isnull(T1.debit,0)-isnull(T1.Credit,0)) else 0 end as SF
FROM OJDT T0 inner join JDT1 T1 On T0.TransID=T1.TransID
and
t0.TransType <> CASE @cierre when 'N' then '-3' when 'N' then '-2' else 'XX' end
inner join
(select TA1.AcctCode, TA1.FatherNum, TA1.Levels from OACT TA1) T2 On T2.AcctCode=T1.Account left join
(select TA2.AcctCode, TA2.FatherNum, TA2.Levels from OACT TA2) T3 On T3.AcctCode=T2.Fathernum left join
(select TA3.AcctCode, TA3.FatherNum, TA3.Levels from OACT TA3) T4 On T4.AcctCode=T3.Fathernum left join
(select TA4.AcctCode, TA4.FatherNum, TA4.Levels from OACT TA4) T5 On T5.AcctCode=T4.Fathernum
WHERE t0.TransType <> CASE @cierre when 'N' then '-2' when 'N' then '-3' else 'XX' end
group by T0.TRansType, T2.FatherNum, T3.FatherNum, t2.levels,
t3.levels, T2.AcctCode, T4.FatherNum, T3.AcctCode, T5.FatherNum, T1.RefDate
) as T9
inner join (select TA5.AcctCode, TA5.AcctName from OACT TA5) T71 on T71.AcctCode=T9.Cuenta_4
inner join (select TA5.AcctCode, TA5.AcctName from OACT TA5) T7 on T7.AcctCode=T9.Cuenta_3
inner join (select TA6.AcctCode, TA6.AcctName from OACT TA6) T8 on T8.AcctCode=T9.Cuenta_2
inner join (select TA6.AcctCode, TA6.AcctName from OACT TA6) T10 on T10.AcctCode=T9.Cuenta_1
WHERE Cuenta_4 between @FromAcct and @ToAcct
group by T7.AcctCode, T7.AcctName, T71.AcctCode, T71.AcctName, T8.AcctCode, T8.AcctName, T10.AcctCode, T10.AcctName
ORDER BY [Nombre Cuenta 1]
Hola Tere...que tal esta
SELECT T1.Grupo'Grupo',
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=1 AND YEAR(Y.RefDate)=2011),0)'Enero'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=2 AND YEAR(Y.RefDate)=2011),0)'Febrero'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=3 AND YEAR(Y.RefDate)=2011),0)'Marzo'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=4 AND YEAR(Y.RefDate)=2011),0)'Abril'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=5 AND YEAR(Y.RefDate)=2011),0)'Mayo'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=6 AND YEAR(Y.RefDate)=2011),0)'Junio'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=7 AND YEAR(Y.RefDate)=2011),0)'Julio'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=8 AND YEAR(Y.RefDate)=2011),0)'Agosto'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=9 AND YEAR(Y.RefDate)=2011),0)'Septiembre'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=10 AND YEAR(Y.RefDate)=2011),0)'Octubre'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=11 AND YEAR(Y.RefDate)=2011),0)'Noviembre'
ISNULL((SELECT SUM(Y.Debit-Y.Credit) FROM JDT1 Y INNER JOIN OACT T ON T.AcctCode = Y.Account WHERE CAST(T.FormatCode AS Nvarchar(3)) = T1.Grupo AND MONTH(Y.RefDate)=12 AND YEAR(Y.RefDate)=2011),0)'Diciembre'
FROM (
SELECT DISTINCT CAST(T0.FormatCode AS Nvarchar(3))'Grupo'
FROM OACT T0
WHERE CAST(T0.FormatCode AS Nvarchar(3)) IS NOT NULL
GROUP BY CAST(T0.FormatCode AS Nvarchar(3))
) T1
GROUP BY T1.Grupo
Slds
Edited by: Floyola on May 24, 2011 4:54 PM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
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.