cancel
Showing results for 
Search instead for 
Did you mean: 

Visualización de balances a tres dígitos

Former Member
0 Kudos

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

Accepted Solutions (0)

Answers (2)

Answers (2)

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Gracias Felipe,

Las pruebo y te comento. Un saludo,

Tere

Former Member
0 Kudos

Se me ocurre que puedes intentar en crystal reports hacer grupo por el nivel 3 y te tendrían que salir.

el problema viene en los cálculos que hay que hacer para que sea un balance oficial.

La opción standard del programa por níveles no les sirve?

Former Member
0 Kudos

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

Former Member
0 Kudos

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]

felipe_loyolarodriguez
Active Contributor
0 Kudos

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