Esto de diseñar estructuras bajo presión …

… siempre es arriesgado. Emocionante, claro, pero no si quieres vivir tranquilo.

Y es que estoy seguro de que terminaré metiendo la pata en algo. Sólo espero que no vaya a más y que pueda controlar los datos.

Bien, el caso es que hace poco se me ocurrió que podría intentar crear una estructura nueva que cubriese algunas necesidades:

  • Debía contener un valor final de fácil acceso.
  • Debía explicar cómo había obtenido dicho valor.
  • Debía ser barata de implementar.

Es decir, un contenedor de valores numéricos que mantuviese un importe final y una historia de cómo ha llegado hasta ahí. Si además le añadía un identificador sencillo la estructura final costaría muy poco de mantener y tendría un acceso rápido.

Lo llamé acumulador genérico, con un par, y empleando papel y lápiz llegué a la conclusión de que la información indispensable constaba de dos atributos:

  1. Identificador alfanumérico.
  2. Valor como número decimal amplio.

Posteriormente le añadí:

  1. Una fecha de última modificación.
  2. Un historial de operaciones conteniendo cada una lo siguiente:
    1. Una fecha.
    2. Una cifra (también decimal amplia).
    3. Una operación sobre el total: suma o resta.
    4. Un origen que en mi caso bastó con el identificador del documento (incluyendo la línea) que originaba la operación.

El código resultó ser muy sencillo. Cada vez que quería añadir o quitar valor al contenedor le añadía una operación. Luego recalculaba el total siguiendo las operaciones y marcaba la fecha. Puede simplificarse más aún si eliminamos el atributo de operación (sumar o restar) y empleamos cifras negativas pero decidí mantenerlo así porque me convenía para su aplicación en los movimientos de mercancía de un almacén. Concretamente, si añadía un tipo de operación especial de igualdad (para los inventarios), obtenía un mecanismo muy sencillo de interpretar.acumuladores

De esta forma al final teníamos una cifra y una historia que la explicaba. También era posible eliminar parte de ella suprimiendo algunos registros y el total se recalculaba automáticamente. Útil si eliminábamos algún documento (como un albarán de entrega de mercancía) que afectase al acumulador.

Hasta ahora lo he probado con las existencias de artículos incluyendo todos los movimientos de mercancía del año, unos trescientos mil, y ha funcionado estupendamente. Ha resultado ser una buena idea.