En este grupo En todos

Grupo de Access



Como crear un balance de prueba

Johan
Bogotá, Colombia
Escrito por Johan Chaves M
el 07/01/2012

Amigos de Emagister muy buen día.

Quiero recurrir a ustedes, ya que he quemado muchisimas neuronas en desarrollar una consulta para desarrollar el balance de prueba de mi contabilidad. Quisiera explicar más o menos cómo tengo montado en tablas la información:

Tengo las siguientes tablas con sus respectivas tablas de detalles (para que no sean muy pesadas)

Caja Menor, Comprobantes de Egreso, Comprobantes de Ingreso, Facturas de Compra, Facturas de Ventas, Plan Unico de Cuentas, Notas contables, Terceros

Toda esta información está relacionada con la tabla PLAN UNICO DE CUENTAS y TERCEROS. Quiere decir que la información que ingrese en estas tablas, como cédulas o cuentas contables, deben existir en las otras tablas. Todo este proceso está bien. Para consultar el movimiento he creado una consulta de unión denominada MOVIMIENTO. Allí puedo fusionar todas estas tablas para saber en general que he movido durante el año.

Ahora a final de año tengo un gravísimo problema... Los balances. Mi contador me presenta el primer problema:

La consulta movimiento sólo me muestra lo que hay en las tablas... Necesito una consulta que me haga lo siguiente:

Tengo un saldo inicial a enero 1, en varias cuentas, con sus débitos y créditos correspondientes.... En enero hay un movimiento (que lo saco filtrando la consulta movimiento sólo para enero). Necesito con las cuentas de naturaleza débito sumar el débito inicial + el débito del mes - el crédito del mes, para obtener el débito a febrero.

Lo he intentado con consultas simples o con tablas cruzadas, pero me he enredado de la forma más increible. Acudo a ustedes porque realmente he consultado a varias personas en mi ciudad y me han sacado el cuerpo... Se que no es complicado, pero hay que saber de las funciones de access para hacer esto.

Me despido deseandoles un inicio del 2012 excelente y esperando sus comentarios o algún link que me explique esto.


Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 17/01/2012

Hola!

Es complicado darte una solución sin conocer más datos de tu BD. Vamos a ver...

Necesitaría saber:

- Donde se recoge la información de TODAS las cuentas (es decir, número de cuenta, despcripción... ), pero sin datos económicos (supongo), ¿Está en la tabla PLAN DE CUENTAS? ¿Cómo se llama el campo que recoge en exclusiva el número de cuenta?

- El campo que te recoge el saldo inicial a 1 de enero, ¿En qué tabla está? ¿Cómo se llama ese campo?

- El campo que te recoge los movimientos de débito (cantidad económica), ¿En qué tabla está? ¿Cómo se llama ese campo?

- El campo que te recoge los movimientos de crédito (cantidad económica), ¿En qué tabla está? ¿Cómo se llama ese campo?

Para que quede más claro, los nombres de campo que necesito de estos dos últimos puntos son los que te recogen los movimientos de cantidades (débito/crédito); por ejemplo (en Europa): 15,25 €

Creo que por ahora no necesito más información. Espero tus noticias.

Un saludo,


Neckkito (... https://neckkito.eu5.org ...)

Johan Chaves M
Bogotá, Colombia
Escrito por Johan Chaves M
el 19/01/2012

Estimado Miquel Neckkito gracias por la respuesta! Se que es complicado presentar mi duda, pero responderé a vuestras preguntas lo más claro posible:

- Donde se recoge la información de TODAS las cuentas : tengo una tabla que contiene todas las cuentas, con su respectiva descripción, además dentro de esta tabla doy en una celda el tipo de naturaleza de la cuenta (Debito o crédito). Todas las tablas que manejo tienen su ID. En el caso de la tabla donde se encuentran las cuentas, este es el ID. No es autonumérico, sino que utilizo el número de cuenta como ID.

- El campo que te recoge el saldo inicial a 1 de enero... hay una tabla que se denomina SALDO INICIAL. Contiene todas las cuentas con sus respectivos debitos - creditos de acuerdo a su naturaleza y con los valores que trae del año anterior. Las cuentas están ligadas por un CUADRO COMBINADO - TABLA/CONSULTA - tomando los valores de la tabla PUC (Plan unico de cuentas).

- El campo que te recoge los movimientos de débito... el movimiento lo dividí en varias tablas, tales como facturas de compra, de venta, de gastos, comprobantes de ingreso, de egreso, saldo inicial, nomina.... Y todas tienen el siguiente diseño: ID DETALLE(EJEMPLO SI, SALDOINICIAL), ID INTERNO, NIT(NUMERO DE IDENTIFICACION DE CLIENTE), DEBITO, CREDITO, CONCEPTO. Y estas tablas las fusiono en una consulta denominada MOVIMIENTO que utiliza una consulta de UNION.

Quisiera saber donde puedo montar una imagen de las relaciones que tengo, o del diseño de las tablas, para que quede más practico entender.

Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 19/01/2012

Hola!

Te voy a explicar cómo puedes conseguir lo que quieres a través de un ejemplo, en el que intentaré seguir al máximo tu explicación de cómo tienes estructurada la BD. Sólo me "falla" un poco entender dónde tienes los movimientos del periodo, así que supondré que esos movimientos los obtienes a través de una consulta, que llamaré Cmovimientos. Tampoco entiendo muy bien cómo realizas la separación entre crédito y débito. En fin...

Los supuestos (por si acaso no coinciden con la realidad) que utilizaré serán:

  • A tu tabla de cuentas la llamaré PUC.

  • Al campo donde está el número de cuenta lo llamaré [IdCuenta]

  • A tu tabla donde están los saldos iniciales la llamaré SALDO INICIAL. El campo que te recoge el saldo inicial lo llamaré [SdoIni]

  • A la consulta donde están los movimientos la llamaré CMOVIMIENTOS. El campo que te recoge el importe del movimiento de débito lo llamaré [ImpMovDebito], y el de crédito [ImpMovCredito]

  • También doy por supuesto que esta consulta CMOVIMIENTOS ya te da la suma de todos los movimientos que se hayan producido, por cuenta

El campo que me une todo lo anterior es [IdCuenta]

Espero que si entiendes qué está haciendo cada punto de la explicación seas capaz de extrapolar la solución a tu BD. Vamos allá:

Lo que tienes que hacer es (sólo te indico los campos mínimos):

1. - Creas una consulta en vista diseño y añades la tabla PUC y la tabla SALDO INICIAL. Las relacionas (si no te sale la relación por defecto) a través de [IdCuenta]

2. - En la línea de relación (la línea que te une [IdCuenta] de una tabla con otra tienes que indicarle el tipo de combinación que quieres. Para ello te pones encima de esa línea y, con precisión, le das al botón de la derecha. Debería aparecerte un menú contextual con la opción "Tipo de combinación...". Haces click sobre esa opción.

3. - Verás que hay tres tipos de combinación. A ti te interesa la 2 o la 3 (no sé cómo te va salir). Tienes que elegir aquella que te diga que quieres ver TODOS los registros de la tabla PUC.

4. - Añades al grid de la consulta el campo [IdCuenta]

5. - En el grid de la consulta, en la segunda columna (vacía), escribes, en la línea superio (la correspondiente a "Campo:", lo siguiente

SaldoInicial: Iif[isnull([SdoIni]);0;[SdoIni])

6. - Guardas la consulta con el nombre de CSALDOINICIAL

Lo que te hace esta consulta es darte valor a todos los saldos iniciales: si existe saldo inicial te lo pone; si no lo hay te escribe un cero.

7. - Creas una segunda consulta donde añades la tabla PUC y la consulta CMOVIMIENTOS.

8. - Creas la relación entre [IdCuenta] de ambas.

9. - Al igual que en el caso anterior, estableces el tipo de combinación, de manera que te muestre TODOS los registros de la tabla PUC

10. - En el grid de la consulta añades el campo [IdCuenta]

11. - En la segunda columna escribes:

ImporteDebito: Iif(isnull([ImpMovDebito]);0;[ImpMovDebito])

12. - En la tercera columna escribes:

ImporteCredito: Iif(isnull([ImpMovCredito]);0;[ImpMovCredito])

12. - Guardas esa consulta con el nombre de CIMPMOV

Ahora ya tienes todas las cuentas con saldo inicial (ya sea cero o ya sea con su saldo inicial) y todas las cuentas con sus importes de movimientos (ya sea cero o ya sea con los importes)

13. - Creas otra consulta, que llamaremos CTOTALES, en la que, en vista diseño, añades la consulta CSALDOINICIAL y la consulta CIMPMOV

14. - Relacionas ambas consultas por el campo [IdCuenta]

15. - Añades al grid de la consulta el campo [IdCuenta], [SaldoInicial], [ImporteDebito] e [ImporteCredito]

16. - Ahora, en la quinta columna (vacía), ya puedes crear la fórmula que necesitabas. Escribes

SaldoFinal: [SaldoInicial]+[ImporteDebito]-[ImporteCredito]

Y ya está.

A ver si te sale.

Un saludo,

Neckkito

Johan Chaves M
Bogotá, Colombia
Escrito por Johan Chaves M
el 20/01/2012

Buenas noches Miguel, espero que esté muy bien. No se si es porque mi pc está configurado diferente al suyo, pero me presenta los siguientes errores cuando coloco la función Iif:

SaldoInicialDebito: Iif[isnull([Debito]);0;[Debito]) = Debe entrecerrar entre paréntesis los argumentos de la función SiInm, y cambio el primer corchete por paréntesis y me dice lo siguiente:

SaldoInicialDebito: Iif(isnull([Debito];0;[Debito]) = La expresión que ha especificado tiene una sintáxis no válida. Y pone en negrita el punto y coma. Lo cambio por coma (comparando con otras funciones que ya tengo y utiliza este separador), y dice lo siguiente:

SaldoInicialDebito: Iif(isnull([Debito],0,[Debito]) = La expresión que ha especificado tiene una sintaxis no válida. Y negrea la última palabra Debito. Que será lo que me falta?


Quiero aclarar que en la tabla SALDO INICIAL tengo dos columnas, una con DEBITOS y la otra con CREDITOS, ya que la naturaleza de las cuentas 1, 5, 6, y 7 son DEBITO y la 2, 3, 4 son CREDITO.

Agradeciendo de antemano su paciencia y espiritu colaborador, me despido.

Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 20/01/2012

Hola, Johan:

Como te escribí la explicación "de cabeza" veo que me olvidé un paréntesis... Cosas de la vida. Aprovecho para comentarte que, en las consultas, siempre debes utilizar punto y coma (;), Es en el código VBA donde se utilizan las comas.

Dicho esto la expresión correcta sería:

SaldoInicialDebito: Iif([isnull([Debito]);0;[Debito])

Por otra parte remarcar que el sistema que escribí era "a modo de ejemplo", porque sin tener tu BD delante no puedo saber los detalles de la misma. Si me dices que en saldo inicial tienes dos campos para recoger dicho saldo inicial, uno para crédito y otro para débito, pues deberías añadir dos columnas en lugar de una, y cada una con el Iif que proporcione el valor del campo que te interesa. Es decir, la primera para el movimiento de crédito y la segunda para el de débito (o al revés, como más te guste).

La idea es que entiendas que, para sumar y restar, necesitas que haya valor en todos los campos que intervengan en la adición o la sustracción. Y lo que hace el método que te estoy indicando es: si existe valor, te pone ese valor, y si no existe (está vacío) te pone un cero. Si intentas sumar un campo con otro campo vacío no te va a dar ningún resultado; si consigues que el vacío tenga valor (que es lo que hace el Iif, en este caso), ya podrás obtener un resultado sin problemas.

El tipo de combinatoria entre tablas dentro de la consulta es necesario por lo siguiente: imagínate que tienes dos cuentas (no entraré si son de débito o de crédito). Si tienes la tabla con los saldos iniciales tendríamos, por ejemplo:

Cuenta: 100 / Saldo Inicial: 12

Cuenta: 101 / Saldo inicial: 30

Y, por otra parte, tienes movimientos en la tabla de movimientos así:

Cuenta: 100 / Movimientos 20

Si haces la consulta sin modificar la combinatoria (es decir, que la combinación es la que te pone Access por defecto, esto es, la 1) sólo te va a mostrar la cuenta 100, porque es la que está en ambas tablas, pero no te mostrará la 101. Por ello es por lo que le debemos decir que muestre TODOS los de CPU.

Por otra parte, si lo haces así, tendrás la cuenta 100 que podrás hacer:

12 + 20 = 32

Pero si tienes la cuenta 101 tendrás:

30 + nulo =?

Por eso, el Iif te convierte ese nulo en cero, y por ello podrás hacer

30 + 0 = 30

A ver si con estas explicaciones puedes aplicar una solución a tu BD.

¡Suerte!

Neckkito

Johan Chaves M
Bogotá, Colombia
Escrito por Johan Chaves M
el 24/01/2012

Miguel buenos días, entiendo perfectamente cómo realizar todo los procedimientos que me ha escrito en este post, pero no me funciona. Pienso que es por la diferente configuración de nuestros PC.

Quisiera saber si hay alguna posibilidad de montar todo esto, no en VISTA DISEÑO, sino en VISTA SQL? Cómo hago para montar mi bd (sin datos) en este post, para que usted pueda ver mi configuración y como tengo organizado?

Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 24/01/2012

Hola Johan:

Si quieres, pásame tu BD comprimida en zip o rar a mi correo electrónico, que es neckkito(ARROBA)yahoo. Es

También puedes crearte una miniBD importando sólo las tablas implicadas, y me pasas esa BD.

Si el fichero comprimido te queda muy grande puedes colgarlo en www.filebig.net y pasarme el enlace (a mi correo), y yo me lo descargaré. Filebig también te da un enlace para borrar el archivo cuando quieras.

Te agradecería que, en el propio mail, me indicaras un ejemplo de cómo debería quedar el resultado final (por ejemplo, cogiendo un número de cuenta), para ver si los "tiros" van en la dirección correcta.

Si me lo envías te ruego un poco de paciencia, pues me lo podré mirar cuando tenga un momento... Largo.

Ya me dirás.

Un saludo,

Neckkito

Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 28/01/2012

Hola!

Te he remitido un correo con un adjunto. Espero que lo hayas recibido.

Un saludo,

Neckkito

Johan Chaves M
Bogotá, Colombia
Escrito por Johan Chaves M
el 30/01/2012

Neckkito buenos días, he revisado la explicación a las consultas que has realizado y están perfectas! Pero no se si es un error de mi pc que daña las funciones SiInm y me está arrojando errores, después de ya haber visto el informe.

Agradezco toda tu apreciada ayuda.

Miquel Neckkito
Cc. economicas y empresariales uned
Escrito por Miquel Neckkito
el 30/01/2012

Apreciado Johan:

En principio todo lo que te pasé está testeado en mis ordenadores (porque utilicé varios) y a mí no me daba ningún error.

Indícame como escribes esos Iif (SiInm) que te dan errores, y dónde los tienes escritos. O dime dónde es que te da el error.

Un saludo,

Neckkito

Johan Chaves M
Bogotá, Colombia
Escrito por Johan Chaves M
el 30/01/2012

Estimado miguel, cordial saludo.

Te comento que busqué mucho este error en internet, y una persona en un foro tenía una solución a un problema similar: Lo solucionó colocando cada expresión en paréntesis! Y no volví a tener el problema.

Acá un ejemplo:

Original: MovDeb: SiInm(EsNulo([SumaDeDebito]),0,[SumaDeDebito])
Modificado: MovDeb: SiInm(EsNulo([SumaDeDebito]),(0),([SumaDeDebito]))

No sé a que se debe el error, pero a varias personas se nos presenta... Seguiré revisando la BD y comentaré si tengo alguna duda.

Deseo un excelente día para ti.