actualizacion rpg

Download actualizacion rpg

Post on 19-Jun-2015

129 views

Category:

Documents

16 download

Embed Size (px)

DESCRIPTION

paso de rpg fix format a formato libre

TRANSCRIPT

RPG ILEACTUALIZACION

Objetivos Acelerar el proceso de desarrollo Facilitar el mantenimiento Reducir errores Eliminar el cdigo duplicado

Gua de Inicio Free FormatInicio del Formato Libre ... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Escriba en la posicin 7 chain(e) codigoEmpleado Empleados; la especificacin /FREE IF %error(); para indicar el inicio del formato libre y para errCalculo=*on; finalizar escriba /ENDELSEIF %FOUND(); FREE errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ******************************************** Fin del Formato Libre

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free El rea para codificar es chain(e) codigoEmpleado Empleados; de la posicin 8 a la 80 IF %error(); las posiciones 6 y siete deben de quedar en errCalculo=*on; blanco ELSEIF %FOUND(); errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Las sentencias inician chain(e) codigoEmpleado Empleados; con IF %error(); OPCODE factor1 factor2 errCalculo=*on; ELSEIF %FOUND(); errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Las sentencias eval y chain(e) codigoEmpleado Empleados; callp son implcitas IF %error(); errCalculo=*on; ELSEIF %FOUND(); errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Si se utilizan para incluir chain(e) codigoEmpleado Empleados; un operador extendido por ejemplo H en una IF %error(); operacin para errCalculo=*on; aproximar o E en un CALLP para que no se ELSEIF %FOUND(); detenga en caso de error errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Cada Sentencia termina chain(e) codigoEmpleado Empleados; con punto y coma IF %error(); errCalculo=*on; ELSEIF %FOUND(); errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Una sentencia completa chain(e) codigoEmpleado Empleados; puede escribirse en mas de una lnea. IF %error(); Pero no se pueden errCalculo=*on; escribir mas de una ELSEIF %FOUND(); sentencia en una lnea errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Indicadores no chain(e) codigoEmpleado Empleados; soportados se utilizan IF %error(); las funciones %error %found errCalculo=*on; ELSEIF %FOUND(); errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Gua de Inicio Free Format... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 *************** Principio de datos ***************************************** /Free Los Comentarios se chain(e) codigoEmpleado Empleados; utilizan con dos diagonales y se pueden IF %error(); utilizar en cualquier parte errCalculo=*on; del rea de codificacin o despus de una ELSEIF %FOUND(); sentencia //Calculo de nomina errCalculo=*off; recupera_Faltas(codigoEpleado :DiasAusencia); //faltas eval(h) sueldoDiario = sueldoMensual/DiasMes; sueldoNomina=((sueldoDiario*diasTrabajados) -(sueldoDiario*DiasAusencia)); ENDIF; /End-Free ****************** Fin de datos ********************************************

Un estilo de Programacin Pequeas piezas de cdigo funcionan mejor Es mejor hacerlo bien que hacerlo rapido No sacrificar la claridad en cdigo por ahorro de lneas de cdigo Pensar si 1 ao aun voy a entender el cdigo fcilmente

Un sustituto para el OVRDBF Para evitar hacer uso de una CL o un QCMDEXC se pueden utililizar las palabras claves EXTFILE y EXTMBR que permiten hacer referencia a un archivo por medio de una constante o una variable que contenga el nombre del archivo antes de abrirlo.

Un sustituto para el OVRDBFFNombarch++IPEASF.....L.....A.Dispos+.Palabras clave+++++++++++++++++++++++Come *************** Principio de datos ******************************************** FFINV003 IF E DISK USROPN EXTFILE(MARCA) EXTMBR(MES) DMARCA DMES S S 10 10

/FREE marca='TOYOTA'; MES='M'+%EDITC(UMONTH:'X'); OPEN FINV003; //Codigo del programa CLOSE FINV003; *INLR=*ON; /END-FREE ****************** Fin de datos ***********************************************

*ENTRY

PROTOTIPOS

El beneficio de usar prototipos es en la validacin del tipo de datos que enviamos en el momento de la compilacin. Uso de palabras claves CONST OPTIONS *VARSIZE *OMIT *NOPASS *RIGHTADJ *TRIM

*ENTRY

PROTOTIPOSNombre del Prototipo Nombre del Programa

Interfaz delProcedimiento

Funciones mas claras

Estructuras Las palabras claves que fortalecen las estructuras son LIKEDS Definir una estructura igual a otra EXTNAME Definir una estructura con una definicin externa QUALIFIED hacer referencia calificada a los campos de la estructura DIM parecido al OCCUR pero como definicin de vector

EstructurasDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave DVentas ds D Marca 10 D Valor 11 2

EstructurasDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave+++++++++++ DVentas ds QUALIFIED D Marca 10 D Valores LIKEDS(estVentas) D DIM(12) DestVentas D unidades D valor ds 5 11 0 2 QUALIFIED

/FREE ventas.marca='TOYOTA'; ventas.valores(1).unidades=10; ventas.valores(1).valor =1500; *inlr=*On; /END-FREE

Estructuras descritas externamenteDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave+++++++++++++++++++++++ *************** Principio de datos **************************************** Dproductos E ds extname(FGEN250) PREFIX(P) DproductosKEY E ds extname(FGEN250:*KEY) PREFIX(K)

Conversin de datos En formato libre no estn soportadas las operaciones MOVE y MOVEL La alternativa es usar las funciones incorporadas %char( convertir a carcter) %dec( convertir a decimal) %editc( editar un valor usando edit code) %int( convertir a entero)

%CHARDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave++++++ *************** Principio de datos *********************** DCARACTER S 10 DDECIMAL S 7 2 INZ(100.25) DENTERO S 7 0 INZ(100) DFECHA S D INZ(D'2008-12-25') /FREE CARACTER = %CHAR(DECIMAL); // 100.25 DSPLY CARACTER; CARACTER = %CHAR(ENTERO); // 100 DSPLY CARACTER; CARACTER = %CHAR(FECHA:*JOBRUN); // 12/25/08 DSPLY CARACTER; *INLR=*ON; /END-FREE

%editcDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave *************** Principio de datos ***************** DCARACTER S 10 /FREE CARACTER = %editc(1235.50:'J');// 1,235.50 DSPLY CARACTER; CARACTER = %editc(1235.50:'X');// 123550 DSPLY CARACTER; CARACTER = %editc(1235.50:'K':'Q');// Q1,235.50 DSPLY CARACTER; *INLR=*ON; /END-FREE

%editwDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave++++ *************** Principio de datos ********************* DTelefono S 15 /FREE telefono = %editw(24703125:' ');//2470-3125 DSPLY telefono; *INLR=*ON; /END-FREE

%intDNombre+++++++++ETDsDesde++A+/L+++IDc.Palabras clave+++ *************** Principio de datos ******************** Dentero S 15p 2 Dcaracter S 15a /FREE caracter='1234.23'; entero = %int(caracter); //1234 DSPLY entero ; caracter='1 2 3 4.99'; entero = %int(caracter); //1234 DSPLY entero ; *INLR=*ON; /END-FREEV5R2 O SUPERIOR

%de