Encadenar funciones en Access o Excel: aprovechamiento máximo.

La última publicación que hice sobre estos asuntos de Access, Excel y la contabilidad financiera, se cerró con la promesa de que en la siguiente publicación, la de hoy, diseccionaríamos el contenido de la siguiente expresión:

Izq([Cuenta];[PosiciónPunto]-1) & Der(1000000000000+Int(Val(Der([Cuenta];[Longitud]-[PosiciónPunto])));12-([PosiciónPunto]-1))

Para que podáis entender todo lo que voy a explicar a continuación, primero vamos a ver las cuatro funciones que se encadenan en toda la expresión anterior.

Estas funciones son:

En Access:

Izq(«cadena»; «longitud»)
Der(«cadena»; «longitud»)
Int(«número»)
Val(«cadena») 

Siendo su equivalente en Excel:

IZQUIERDA(texto, [núm_de_caracteres])
DERECHA(texto,[núm_de_caracteres])
ENTERO( número )
VALOR(texto)

Partiendo de la base de que ya sabéis que todo lo que está encerrado entre un [ y un ], hace referencia al nombre de un campo cuyo contenido va variando según el resultado de las operaciones que estemos realizando, (me refiero a los siguientes campos variables: [Cuenta], [PosiciónPunto] y [Longitud], que no hay que confundir con la función 'Longitud'); pues bien, como os decía, partiendo de la base anterior, hoy nos centramos en la explicación de lo que hace cada una de las funciones anteriores.

La función 'Izq', da como resultado la extracción por la izquierda de un número determinado de caracteres, (número que se fija por el valor de <<longitud>>.

Hago un inciso, hay tres denominaciones que se identifican como longitud:

[Longitud]: es el nombre de un campo variable cuyo contenido es un numero resultado de una operación matemática.

'Longitud': es una función de Access.

<<Longitud>>: es un número necesario para que una función de Access pueda operar, en este caso, 'Izq' o 'Der'.

Ahora es cuando viene lo importante. Lo fundamental para extraer el máximo rendimiento de las funciones es entender que los valores de una función no tienen que ser necesariamente estáticos y fijos, (o lo que técnicamente se denomina 'literal'), más bien al contrario, podemos hacer que dentro de los parámetros que necesitamos en una función, la que sea, siempre podemos usar otras funciones u otras variables, de forma que los parámetros varíen en función del resultado de estas últimas.

Lo entenderéis mejor con unos ejemplos.

Izq("abcde432";"3")

Dará como resultado 'abc'; (coge por la izquierda de 'abcde432', tres dígitos).

(Siempre que leáis algo encerrado entre una " y otra ", pensad que es un valor fijo, tenedlo claro, como decía anteriormente, es lo que se denomina técnicamente como una 'literal').

[T 001]![Cuenta] contiene el valor 'abcde432'. Es decir, el campo 'Cuenta' de la tabla 'T 001', contiene en estos momentos el valor 'abcde432'.

Por lo tanto, Izq([T 001]![Cuenta];"3"), dará como resultado 'abc'.

Ahora bien, supongamos que hay una variable denominada [PosiciónPunto] que contiene el valor 3. No porque [PosiciónPunto] sea un campo de una tabla, sino porque es una variable cuyo contenido se obtiene a partir de la siguiente expresión:

PosiciónPunto: EnCad(1;[T 001]![Cuenta];".";1)

Porque, (seguimos con nuestra hipótesis), el valor del campo 'Cuenta' de la tabla 'T 001' es: '41.55'. (Por eso el valor de [PosiciónPunto] es un tres, porque el punto está en la tercera posición).

Y, siendo así, veamos el resultado de la siguiente expresión:

Izq([T 001]![Cuenta];[PosiciónPunto]-1)

Teniendo en cuenta que:

[T 001]![Cuenta]='41.55'
[PosiciónPunto]=3

Si ahora sustituimos las variables, (o como nos enseñaron de pequeños las incógnitas de la ecuación), tendríamos:

Izq('41.55';3-1), o lo que es lo mismo, Izq('41.55';2); que obviamente da como resultado '41'. Porque si cogemos por la izquierda de '41.55' dos dígitos, no falla, es un '41'.

Y con esto tendríamos la primera parte de lo que queremos averiguar, es decir, la parte de la izquierda de nuestra cuenta contable, la parte por la que empieza la cuenta contable que estamos buscando a partir de que el operario a pulsado '41.55' para el campo 'Cuenta' de la tabla 'T 001'.

Ahora tenemos que calcular lo que va a la derecha del '41' para completar la cuenta contable que estamos buscando. Para eso debemos desarrollar las demás funciones que os enumeraba al principio de la presente publicación.

Pero como ya me he extendido demasiado en esta entrada de hoy, dejaré para las próximas publicaciones las demás funciones que enumeraba al principio.

Hoy sí que os dejaré una cita para que la meditéis:

Nada que se consiga sin pena y sin trabajo es verdaderamente valioso.
 Joseph Addison

Y, también, os dejo hoy un video musical, disfrutadlo.



Comentarios