Procesos que Modifican Claves de Tablas

En este manual, abordaremos los procesos necesarios para modificar las claves de las tablas en Dynamics NAV y Business Central. Es fundamental entender que cualquier cambio en las claves debe realizarse utilizando la función RENAME. Esta función garantiza que las modificaciones se realicen de manera segura y eficiente, preservando la integridad de los datos.

Con Dynamics NAV


PostCode.RESET;
PostCode.SETRANGE(ID_Fisersa, 0);
IF PostCode.FINDSET(TRUE, TRUE) THEN BEGIN
  REPEAT
    Int_FisersaID2 := Int_FisersaID2 + 1;
    PostCode1 := PostCode;
    PostCode1.RENAME(PostCode1.Code, PostCode1.City, Int_FisersaID2); // Son las keys de la tabla postcode
  UNTIL PostCode.NEXT = 0;
END;

Con Business Central AL


procedure UpdatePostCodes()
var
    PostCode: Record "Post Code";
    PostCode1: Record "Post Code";
    Int_FisersaID2: Integer;
begin
    PostCode.Reset();
    PostCode.SetRange(ID_Fisersa, 0);
    if PostCode.FindSet(true, true) then begin
        repeat
            Int_FisersaID2 := Int_FisersaID2 + 1;
            PostCode1 := PostCode;
            PostCode1.Rename(PostCode1.Code, PostCode1.City, Int_FisersaID2); // Son las keys de la tabla postcode
        until PostCode.Next() = 0;
    end;
end;

Eliminar caracteres no imprimibles

A veces pasa, que de tanto copiar y pegar, y tratar con diferentes documentos o proveedores extranjeros, se cuelan caracteres no reconocidos en Español, y en este caso os expongo un ejemplo real, que sería el siguiente:

Se indica la columa, debido a que el fichero .xlsx, es un comprimido de varios elementos.
Entonces para detectar el Carácter no imprimible, lo que realice es lo siguiente:
  1. Instalar un descompreso (.zip o .rar).
  2. Cambiar la extensión de .xlsx a .zip y descomprimir el fichero en una carpeta.
    1. Luego entar en la carpeta dónde esta el XML del excel, en el error indica que esta en «\xl\worksheets|sheet1.xml»
  3. Instalar Notepad++
  4. Instalar plugin XML TOOLS
  5. Con XML TOOLS, descomprimir el fichero, para que no este todo el contenido comprimido en un línea:

Concretamente el carácter con el conflicto era el siguiente

Código para aplicar un solución automática a lo anteriormente comentado

Entonces, para aplicar una solución automática y que se arregle el error antes de crear este fichero con Dynamics NAV, con la solución que indique al principio de la entrada.

Con Dynamics NAV

CleanString(URL : Text) : Text
Name                                                     DataType Subtype                                                 Length
StringConversionManagement     Codeunit         StringConversionManagement
EXIT(StringConversionManagement.WindowsToASCII(URL));

Con Business Central AL


procedure CleanString(URL: Text): Text
var
    StringConversionManagement: Codeunit StringConversionManagement;
begin
    exit(StringConversionManagement.WindowsToASCII(URL));
end;
Esta  funcionalidad estándard de Dynamics NAV que limpia todos los carácteres no-imprimibles en, definida en:
A continuación, se presenta un resumen de las funciones:
https://learn.microsoft.com/en-us/dynamics365/business-central/application/base-application/codeunit/system.text.stringconversionmanagement
  1. Función WindowsToASCII:
    • Descripción: Esta función convierte una cadena de texto en formato Windows a su equivalente en formato ASCII.
    • Parámetros:
      • InText: Texto de entrada en formato Windows.
    • Operación:
      • Itera a través de cada carácter en la cadena y utiliza la función WindowsToASCIIChar para realizar la conversión.
      • Retorna la cadena convertida.
  2. Función WindowsToASCIIChar:
    • Descripción: Convierte un carácter individual en formato Windows a su equivalente en formato ASCII.
    • Parámetros:
      • c: Valor numérico del carácter en formato Windows.
    • Operación:
      • Utiliza reglas de conversión específicas para manejar diferentes rangos de caracteres.
      • Retorna el carácter convertido en formato ASCII.
  3. Funciones WindowsToASCIIChar8Bit, WindowsToASCIIChar16Bit, WindowsToASCIICharEPC:
    • Estas funciones auxiliares manejan conversiones específicas para caracteres de 8 bits, 16 bits y caracteres especiales de EPC.
  4. Función GetPaddedString:
    • Descripción: Añade relleno a una cadena de texto para alcanzar una longitud específica.
    • Parámetros:
      • StringToModify: Texto original.
      • PadLength: Longitud deseada.
      • PadCharacter: Carácter utilizado para el relleno.
    • Operación:
      • Agrega el carácter de relleno al principio de la cadena hasta alcanzar la longitud deseada.
      • Retorna la cadena modificada.
  5. Función RemoveDecimalFromString:
    • Descripción: Elimina los decimales de una cadena de texto.
    • Parámetros:
      • StringToModify: Texto original.
      • PadLength: Longitud deseada.
      • PadCharacter: Carácter utilizado para el relleno.
      • FinalString: Texto resultante después de la eliminación de decimales.
    • Operación:
      • Verifica si hay decimales en la cadena y los elimina.
      • Retorna la cadena modificada sin decimales.