Estas asignaciones nunca fallan

SOBREPASAMIENTO: ¿A quién no le ha pasado alguna vez lo siguiente? Te piden hacer un proceso “sencillo” para importar información en Navision. Como buen experto que eres lo tienes listo en unos pocos minutos y, para asegurarte, haces unas cuantas pruebas y compruebas que realmente funciona. Te aseguras de que el proceso detecta los duplicados, no estropea datos, es estable, etc. Para acabar de probarlo bien, pides un fichero de pruebas que funciona sin problemas. Al cabo del tiempo, llega el día D y la hora H, necesitas lanzar el proceso y de repente…

SOBREPASAMIENTO. Bien!! No pasa nada, esto no daña tu imagen, pero… a nadie le gusta llevar una mancha en la camisa y… esta te la has colgado en el desayuno (campeón)… Es un error tan tonto y tan básico que incluso la persona que tienes al lado dice “¿no cabe?” a lo que respondes “prfff… más o menos”. No va mal encaminado pues es cierto que “algo no cabe en algún sitio” hasta ahí llegamos todos… Ahora el problema es que hay que encender el debbuger y esperar a que la barrita se vuelva a poner en el 95%. De esto hablaremos otro día pero está comprobado que la probabilidad de que una importación falle viene indicada en la propia barra de proceso y que cuando llegas al 100 es que Navision te ha perdonado la vida.

Volvamos a la parte técnica: Evidentemente, el problema es que hemos intentado almacenar una cadena de caracteres en un campo o variable donde no puede caber. Existe un pequeño truco que nos permite cubrirnos las espaldas ante esto:

variableDestino := COPYSTR(variableOrigen,1,MAXSTRLEN(variableDestino));

Con MAXSTRLEN obtenemos la longitud máxima de la variable destino y con COPYSTR seleccionamos solamente esos primeros caracteres. Con esto conseguimos que el proceso no desate un error, aunque hay que advertir al usuario que el proceso truncará aquellos datos que se excedan de los límites admitidos.

En el caso de los dataports, acostumbro a utilizar variables de anchos generosos (XXL) sobre los que volcar la información para después pasarlo a los campos de las tablas. Es, en el paso de variable a campo, dónde utilizo este trozo de código. Es una forma de asegurarme que no existan sobrepasamientos y de ofrecer una tarea más sencilla a un futuro debbugador del proceso.