SEPA: cálculo del IBAN en Dynamics NAV

Dynamics NAV 2013

Ante la inminente puesta en marcha de la normativa SEPA (Single Euro Payments Area) desde el 1 de Febrero de este año y una vez implantadas las actualizaciones que Microsoft nos ofrece para Dynamics NAV (Navision), a continuación os propongo el contenido de unas funciones muy sencillas que os sirvan de guía para el cálculo de la cuenta IBAN de forma masiva a partir del código cuenta cliente (nº CCC) configurado en las distintas fichas, por ejemplo, de banco, banco cliente o banco proveedor.

Este ejemplo se basa en el cálculo del IBAN para cuentas españolas, aunque se podría adaptar para cualquier país.

CalcularIBAN(pCCC : Code[30]; pPais : Code[2]) : Code[2]
  ccc := pCCC + '142800'; //E=14 y S=28, son valores fijos definidos para España
 
  EVALUATE(k, Modulo(ccc, 97)); //Se realiza el módulo de 97
 
  digitoControl := 98 - k; //El resultado se resta a 98
 
  IF (digitoControl < 10) THEN
    EXIT('0' + FORMAT (digitoControl))
  ELSE
    EXIT (FORMAT(digitoControl));

Código 1. Función principal.

Modulo(pCuenta : Code[30]; modulo97 : Integer) : Code[2]
  inicio := 1;
  fin := 1;
 
  WHILE (fin <= STRLEN(pCuenta)) DO BEGIN
    EVALUATE(buffer, resto + COPYSTR(pCuenta, inicio, fin - inicio + 1));
 
    IF (buffer >= modulo97) THEN BEGIN
      result := ROUND(buffer / modulo97, 1, '<');
      restoTmp := buffer - (result * modulo97);
      resto := FORMAT(restoTmp);
 
      sErg := sErg + FORMAT(result);
 
      inicio := fin + 1;
      fin := inicio;
    END
    ELSE BEGIN
      IF (sErg <> '') THEN
        sErg := sErg + '0';
 
      fin := fin + 1;
    END;
  END;
 
  IF (inicio <= STRLEN(pCuenta)) THEN
    resto := resto + COPYSTR(pCuenta, inicio);
 
  EXIT(resto);

Código 2. Algoritmo del cálculo del módulo para el IBAN.

Para la llamada a la función podríamos utilizar un report de proceso donde en el OnAfterGetRecord del DataItem correspondiente pongamos algo así:

IF "Bank Account"."CCC No." <> '' THEN BEGIN
  VALIDATE("Bank Account".IBAN, 'ES' + 
    CalcularIBAN("Bank Account"."CCC No.", 'ES') + 
    "Bank   Account"."CCC No.");
 
  MODIFY;
END;

Código 3. Ejemplo de llamada a la función.