Registrar asientos contables y tener el control

En alguna ocasión, es probable que hayamos tenido que programar un proceso que registre movimientos contables a medida que crea los registros en la línea de diario general. Si intentamos ver cómo lo hace NAV dentro de sus procesos estándar, vemos que existen 3 codeunits que intervienen en el registro de las líneas que hay un diario general (tabla 81):

  • Codeunit 11 – Gen. Jnl.-Check Line: Se utiliza para comprobar si la línea del diario es correcta.
  • Codeunit 12 – Gen. Jnl.-Post Line: Se utiliza para registrar una sola línea del diario.
  • Codeunit 13 – Gen. Jnl.-Post Batch: Se utiliza para registrar una sección entera del diario.

La madre del cordero está en la codeunit 12. Esta codeunit es llamada por la codeunit 13 cada vez que hay que registrar una línea y, a su vez utiliza la codeunit 11 para validar que la línea es correcta. Entonces ¿por que no usar siempre la codeunit 13? Sencillo, si utilizamos la codeunit 12 seremos nosotros los que decidiremos cuando guardamos los datos. La codeunit 13 tiene varios COMMIT, pero la codeunit 12 no tiene ninguno y la codeunit 11 tampoco.

Esto significa que yo puedo ir creando líneas en el diario general y mandarlas a registrar sin más. Al no utilizar la función COMMIT, el control de la función CONSISTENT no se ejecuta y puedo tener asientos “temporalmente” descuadrados. Yo, como programador, puedo decidir cuando empieza y cuando acaba el asiento contable y el único problema que puedo tener es que no haya controlado los registros lo suficiente y al acabar el proceso o al pasar por encima de un COMMIT reciba mensaje de CONSISTENT.

Es probable que algunos nunca se hayan encontrado con un error de CONSISTENT. Quizás los que vivimos el cambio de moneda allá por el 2000 no acordamos de alguno que nos diera dolores de cabeza. Si no estoy equivocado, sólo se utiliza en un par de puntos en todo NAV.