lunes, 17 de marzo de 2014

Hallowed be thy name

Como grandes aficionados al heavy metal que sois rápidamente habréis asociado el nombre de este artículo al de una canción del album 'The number of the beast' de Iron Maiden.

-Claro, claro...

No me voy a meter con vuestros gustos musicales salvo que os guste el reaggeton (que además de meterme os baneo de IA) sino utilizar este título para contaros una historia.

La traducción más acertada vendría a ser 'Maldito sea vuestro nombre' que como maldición no está mal y sirve para introducir un montón de otros exabruptos menos elegantes.

El caso es que estaba yo liado con mi amigo Essbase haciendo un cálculo de intercompañías en el que había de buscar la contrapartida de la misma. Para los nuevos en el lugar, una intercompañía es un gasto/ingreso realizado entre dos compañías de un mismo grupo. Por ejemplo, ante la venta de un vehículo entre ellas tendríamos lo siguiente:
-Compañía A, Intercompañía B, compra de vehículos, 10000€
-Compañía B, Intercompañía A, venta de vehículos, 10000€

Obviamente esas intercompañías tienen que cuadrar y una manera de hacerlo es comprobar que existe la contrapartida.

Las bases de datos multidimensionales en general y essbase en particular son terribles para la gestión de strings. Hacer un substring del nombre de un elemento y componerlo con prefijos o sufijos puede ser una película de terror del bueno... Que es lo que me pasó a mí.

Teniendo una serie de datos de intercompañía de ida tenía que comprobar si la intercompañía de vuelta cuadraba. Teniendo en cuenta que la nomenclatura era muy fácil (prefijar con ICP_ la compañía para tener la intercompañía y hacer un substring para lo contrario) y tras varias funciones y paréntesis creí haberlo conseguido.

Entonces lo ejecuté...

Y se quedó a medias.

-¡Hallowed be thy name!
-¿Cantas?
-Mismamente...

Por alguna extraña razón, essbase hacía unos casos y otros no y se dejaba por hacer todo lo que aparecía a continuación del cambalache de los strings.

-Esto me huele a bug...
-Debuggalo...
-...

Como el debug del essbase es inexistente, acabé buscando en el log por alguna pista, pero a partir de un punto simplemente dejaba de procesar.

Con las manos echadas a la cabeza y dispuestas a propiciar una prematura calvicie por estiramiento capilar fui haciendo pruebas hasta que se encendió la bombilla...

-¿Pero qué haces aquí a oscuras?
-Los vampiros programamos a oscuras
-Déjate de tonterías, anda...

Y no sé si sería la luz o qué, pero me di cuenta de que existía una intercompañía llamada ICP_none, que se usa precisamente cuando no es intercompañía, cuya conversión a sociedad era None...

-None es que no existe
-Digo que no existe None
-Pues eso
-No me estás entendiendo...

Y como no existía la sociedad None se producía una excepción que paraba el cálculo sin dejar huella alguna en ninguna parte... Bueno, sólo un desconcertante mensaje en la consola de que todo había ido bien...

-¡Me cago en su P... M....!
-¿Qué ha sido de Iron Maiden?
-¡Graaaaoorrr!

Perder el tiempo intentando arreglar un error cuando tienes un mensaje de error pase... Pero tener que darte cuenta que había un error sin mensaje...

-En la línea habitual, ¿no?
-Sí, si no sé por qué me sorprendo...

Arreglado el problema, el script de idea feliz funcionó como debía aunque dejando el sabor agridulce de que ciertas herramientas (caras) no permitan de forma nativa una mínima gestión y comparación de strings y deban dejárselo a extensiones externas en Java...

-¿Pero tú no sabes Java? Vaya informático de pacotilla que estás hecho...
-¿Te digo yo algo del Essbase?
-Touché...

La próxima vez que haya que hacer cálculos así ya sabéis cuál será mi respuesta si me preguntáis:

-¡Hallowed be thy name!

1 comentario: