15
Conversión de Sistema para Ypacaraí Java Win / Linux y Windows Guido Gaona Consideraciones a tener en cuenta en la Conversión VB a Java Win / GX 9.0 1. NnnMn000: menú principal del módulo, debe adaptarse (color en el form y eventos), tome como ejemplo alguno como PerMn000 que ya fue adaptado. Luego descomentar en CpcMn000. Yvory es el color referente. 2. Field Exit Model Property = Enter, Tab, Shift-Tab. 3. Color in Read-Only Fields Model Property = Original. Esto para que tome los colores que se apliacan a los campos read only pues de lo contrario toman ese gris muy ilegible especialmente en Linux. 4. Model Propiertes -- Generate MDI application = NO: esto para generar el deployment como SDI pues con MDI tiene comportamientos indeseados en Linux. 5. Picture: no funciona igual que en VB, por ejemplo SocNro tenía el picture 000-000 que se cambió por 999-999 y finalmente queda sin picture. 6. Status bar con SDI: con SDI se tiene la particularidad de que no existe un status general por el menú bar solamente como en MDI si debe ser por cada objeto y nos encontramos en la problemática que habiendo convertido de VB a Java donde sí funcionaba y ahora no muetra los mensajes de estado. Para solucionar esto plateamos que la propiedad Show Status Bar Model Property esté en Depending on Object Type. En un work panel que llama a algún procedure, por ejemplo, que imprime un mensaje en el status se debe tener esto: msg('', nowait). Esto es simplemente para que habilite la barra de estado en ese objeto. Esto se puede evitar teniendo la propiedad anterior en Always, pero se debe tener en cuenta que la barra de status se mostrará siempre en absolutamente todos los objetos por más que no se use. En el procedure, siguiendo nuestro ejemplo, tendremos así: For &con = 1 To 8000 &con += 1 msg('Acá estamos che'+str(&con), status) EndFor 1

Conversión de VB a Java

Embed Size (px)

Citation preview

Page 1: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

Consideraciones a tener en cuenta en la ConversiónVB a Java Win / GX 9.0

1. NnnMn000: menú principal del módulo, debe adaptarse (color en el form y eventos), tome como ejemplo alguno como PerMn000 que ya fue adaptado. Luego descomentar en CpcMn000. Yvory es el color referente.

2. Field Exit Model Property = Enter, Tab, Shift-Tab.3. Color in Read-Only Fields Model Property = Original. Esto para que tome los colores que se

apliacan a los campos read only pues de lo contrario toman ese gris muy ilegible especialmente en Linux.

4. Model Propiertes -- Generate MDI application = NO: esto para generar el deployment como SDI pues con MDI tiene comportamientos indeseados en Linux.

5. Picture: no funciona igual que en VB, por ejemplo SocNro tenía el picture 000-000 que se cambió por 999-999 y finalmente queda sin picture.

6. Status bar con SDI: con SDI se tiene la particularidad de que no existe un status general por el menú bar solamente como en MDI si debe ser por cada objeto y nos encontramos en la problemática que habiendo convertido de VB a Java donde sí funcionaba y ahora no muetra los mensajes de estado. Para solucionar esto plateamos que la propiedad Show Status Bar Model Property esté en Depending on Object Type. En un work panel que llama a algún procedure, por ejemplo, que imprime un mensaje en el status se debe tener esto: msg('', nowait). Esto es simplemente para que habilite la barra de estado en ese objeto. Esto se puede evitar teniendo la propiedad anterior en Always, pero se debe tener en cuenta que la barra de status se mostrará siempre en absolutamente todos los objetos por más que no se use. En el procedure, siguiendo nuestro ejemplo, tendremos así:

For &con = 1 To 8000 &con += 1 msg('Acá estamos che'+str(&con), status) EndFor

Entonces se mostrará efectivamente en la barra de status del wp.7. Uso de dfropen: dfropen debe ser utilizado en lugar de mptext.bas en los programas

correspondientes. Un poco del uso de esta función. &i = dfropen( "C:\prueba.txt", 5, ",") do while dfrnext() = 0 &i = dfrgtxt(&hola) &i = dfrgdate(&fecha, "dmy", "-" ) &i = dfrgnum(&numero) print txt enddo &i = dfrclose( )

1

Page 2: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

8. Uso de dfwopen: con esta función se pueden crear archivos delimitados, sirve principalmente para exportar datos. Abajo un ejemplo de lo que pretendía solucionar la impresión de reportes Text en Linux y Windows conjuntamente (fue otra la solución implementada)

java [!&dirusr!] = System.getProperty("user.dir", "unknown"); //obtenemos el directorio de trabajojava [!&fileseparator!] = System.getProperty("file.separator"); //obtenemos el separador de archivos&dirusr = &dirusr.Trim() + &fileseparator //al directorio de trabajo le sumamos el separador de archivos

//Ahora debemos armar los archivos *.bat o *.sh dependiendo del SOif &fileseparator = '\' //con esto sabemos que es Windows// &Status = FileExist(&dirusr.Trim() + 'rcjals004.bat') //verificamos existencia del archivo *.bat// if &Status = 1 //el archivo existe// msg('¡Archivo *.bat existe!', status)// else //solamente si no existe lo creamos, imagínese por cada impresión de recibo en caja que se esté creando el archivo// msg('¡Archivo *.bat no existe! Será creado', status) &i = DFWOpen( &dirusr.Trim() + 'rcjals004.bat', ',', '', 0) //&i = DFWPTxt('type "' + &dirusr.Trim() + 'rcjals004.prn "' + ' > prn') &i = DFWPTxt('print /d:' + '\\' + WrkSt() + '\EpsonLX "' + &dirusr.Trim() + 'rcjals004.prn"') &i = DFWNext() &i = DFWClose() if &i = 0 msg('¡Archivo *.bat creado!', status) else msg('¡Error en la creación del archivo *.bat!', status) endif// endif &err = Shell(&dirusr.Trim() + 'rcjals004.bat') //llamamos al archivo para tirar a la impresora if &err <> 0 msg('¡Error durante la impresión del recibo!', status) else msg('¡Recibo de caja impreso correctamente', status) endif else //de lo contrario es Linux// &Status = FileExist(&dirusr.Trim() + 'rcjals004.sh') //verificamos existencia del archivo *.bat// if &Status = 1 //el archivo existe// msg('¡Archivo *.sh existe!', status)// else //solamente si no existe lo creamos, imagínese por cada impresión de recibo en caja que se esté creando el archivo// msg('¡Archivo *.sh no existe! Será creado', status) &i = DFWOpen( &dirusr.Trim() + 'rcjals004.sh', ',', '', 0) //Habiendo probado desde una máquina virtual con vbox y OpenSuse 10.3 comprobé que la forma para el cliente Linux es: //lp -d EpsonLX "/home/cpc/Documents/rcjals004.prn" &i = DFWPTxt('lp -d ' + 'EpsonLX "' + &dirusr.Trim() + 'rcjals004.prn"') &i = DFWNext() &i = DFWClose() if &i = 0 msg('¡Archivo *.sh creado!', status) else msg('¡Error en la creación del archivo *.sh!', status) endif// endif

2

Page 3: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

&err = Shell(&dirusr.Trim() + 'rcjals004.sh') //llamamos al archivo para tirar a la impresora if &err <> 0 msg('¡Error durante la impresión del recibo!', status) else msg('¡Recibo de caja impreso correctamente', status) endif endif

9. Show Status Bar Model Property = Always: esto para mostrar el status bar para poder visualizar los mensajes tipo nowait o status.

10. Path en la red: hay casos en que sería util implementar el path a una carpeta compartida en la red. Simplemente se hace así (solo un ejemplo):

&ImgPath = "" &inipath = '\\192.168.1.107\cyl' &Extension = 'dot' &Titulo = 'Plantillas' &buttcap = 'Seleccionar' &TipoBoton=0 call('gxSelFile', &PthArc, &Inipath, &Extension, &Titulo, &buttcap, &TipoBoton) &Plantilla.UseMSOffice = 0 &Plantilla.Template = &PthArc If &Plantilla.ErrCode <> 0 msg(&Plantilla.ErrDescription+' Error al tomar la plantilla') else &PthArc = 'C:\Temp\Modelo'+'Prueba'+'.DOC' &Plantilla.Open(&PthArc) If &Plantilla.ErrCode <> 0 msg(&Plantilla.ErrDescription+' Error al crear el documento') else &Plantilla.Replace('{{NOMBRE}}','GUIDO MIGUEL GAONA CANDIA',0,0) &Plantilla.Replace('{{CUENTA}}',ServerNow(),0,0) &Plantilla.Replace('{{Situacion}}','Prueba',0,0) endif endif

11. Código Java nativo java [!&dirusr!] = System.getProperty("java.version"); //versión de java java [!&dirusr!] = System.getProperty("os.version", "unknown"); //versión del sistema operativo java [!&dirusr!] = System.getProperty("os.name", "unknown"); //nombre del sistema operativo java [!&dirusr!] = System.getProperty("os.arch", "unknown"); //arquitectura de sistema operativo (32 o 64 bits) java [!&dirusr!] = System.getProperty("user.dir", "unknown"); //directorio en el que está corriendo el programa java. java [!&dirusr!] = System.getProperty("user.name", "unknown"); //nombre de usuario logueado java [!&dirusr!] = System.getProperty("user.home", "unknown"); //directorio por defecto del usuario, C:\Documents and Settings\CPCGX java [!&dirusr!] = System.getProperty("java.io.tmpdir"); //obtiene por ejemplo C:\Documents and Settings\CPCGX\Configuración local\Temp msg(&dirusr) java [!&fileseparator!] = System.getProperty("file.separator"); //separador según SO msg(trim(&fileseparator))

3

Page 4: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

12. Return en Event After Trn: en las transacciones que cierran la aplicación, se debe programar el evento en cuestión y agregar un return, especificar, compilar y probar; por lo general se puede quitar otra vez el return (especificar, compilar y probar), y ya funciona correctamente, es algo realmente ilógico pero soluciona el problema.

13. Control Box Object Property = NO: en todos los objetos que tienen esta propiedad, a nivel de objeto, para evitar que se cierre desde ahí el programa. Controlar en cada objeto.

14. Menubar Object Property = NONE: en todos los objetos que tienen esta propiedad, a nivel de objeto, pues ocupa mucho espacio en la pantalla. Controlar en cada objeto.

15. Show in taskBar (SDI) = Yes: en todos los objetos que tienen esta propiedad, a nivel de objeto, para que se muestre en la barra de tareas la ventana.

16. &PgmCod = Substr(&Pgmname,2,8): en programas del sistema antes de llamar a PgenDa001, en lugar de &PgmCod se debe envíar &Pgmname.

17. &PgmCod en lugar de &Pgmname: reemplazar en todos los objetos en donde se confundió su uso con &Pgmname, esto es, cuando llama a PgenDa001. Esto hace que se envíe una cadena vacía y por lo tando no controlará el mapa de permisos. Se pretendió utilizarlo como &Pgmname pero no se hizo un &PgmCod = &Pgmname.

18. Character (1) Upper = los atributos Char de 1 que deben ser solamente mayúsculas se debe tener las propiedades de los mismos Case = Upper y Picture = !, como por ejemplo el dominio TipoAvi.

19. Load at Startup Grid Object Property = NO: posición del cursor en un WP con filtros y grilla, debe enfocarse en el primer filtro, esto se logra configurando esta propiedad en NO. Solo es necesario en WP con grilla. Es a nivel de la grilla.

20. Load at Startup Object Property = NO: de lo contrario se disparan los IsValid al entrar a un WP y si tiene msg saltan los mismos, esto es propio de Java. Se debe realizar en los WP donde se tenga este problema.

21. Orden de tabulación: a veces se ve afectado el orden normal porque a un campo se le desmarcó AutoResize y es más grande que otros. Se debe dejar todos los campos del mismo tamaño para que la tabulación siga normal.

22. ASK en Linux interrumpe fácilmente la aplicación: se debe reemplazar por WP en los objetos donde sea usado.

23. Seleccionar registro de una lista de selección: en las listas de selección se debe programar para seleccionar el registro deseado con F3. Mire W PerPt017 como ejemplo (el botón Seleccionar debe estar en Enter).

Event 'Seleccionar'3 &OkUser = 0 &PerRegCod=PerRegCod returnEndEvent // 'Seleccionar'

4

Page 5: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

Event Enter &OkUser = 0 &PerRegCod=PerRegCod returnEndEvent // Enter

Esto no es posible en los prompt creados por Genexus, se deberá por tanto crear prompt de usuario para todos los casos necesarios si el cliente así lo pide y de acuerdo a lo que resuelva la gerencia (CPC), esto es a confirmar.

24. En los wp con grillas y filtros, verificar si la grilla tiene datos de acuerdo a los filtros, de lo contrario devolver el cursor al primer filtro (esto tampoco es posible para los prompt de Genexus).

Event &PerCiuDsc.IsValid //último filtro en orden de tabulación. No debe ser combo box.refresh

EndEvent

Event grd_1.OnLineActivate&CantReg = 0for each line

&CantReg += 1exit

endforif &CantReg = 0

msg('Sin datos según filtro')&PerBarDsc.Setfocus() //primer filtro en orden de tabulación.

endifEndEvent // grd_1.OnLineActivate

Event'Inicio'2 //salta al primer filtro. &PerNroDoc.Setfocus()EndEvent

25. Upper en todos los filtros character: en conditions hacer upper upper(PerApeNom) LIKE upper(&PerApeNom); De nuevo no es posible en prompt de Genexus.

26. Thousand Separator = True y Signed = False: para los atributos del tipo numérico donde no debe ingresarse valor negativo. Esto impide ingresar signos. Esto es a nivel de atributo o dominio (en diseño).

27. P GenDa001 y P GenAc011: registran (aparte de los permisos), la hora de entrada y salida, debe modificarse los parámetros y llamar a PgenAc011 que registra la salida del evento, favor, tome como ejemplo alguno que ya fue corregido, como W CtbTr012.

28. Controlar en Procedimientos que imprimen en print block o Excel: poner regla para pdf y adaptar los envíos a Excel (visto más abajo).

29. Reportes a PDF: debe hacerse sí o sí pues el report viewer usa dll que no nos sirve en Linux, se logra agregando al classpath el jar iText.jar y a los reportes en rules output_file("nombre.pdf", "PDF");

30. PDFReport.ini: para Linux se debe agregar en el cliente la línea:

5

Page 6: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

Acrobat Location= /usr/lib/Adobe/Reader9/bin/acroread Donde el path debe ser el lector PDF instalado.

También se puede especificar el directorio donde se depositarán los archivos creados con la siguiente línea (tanto en Linux como en Windows):

OutputFileDirectory= /home/cpc/Documents/ReportesPDF

31. Reportes PDF tardan demasiado: los reportes PDF tardan en generarse en aquellos donde se tienen tipos de letras no estándares (por decirlo así). Se debe por tanto modificar todos los reportes que tengan este problema cambiando los tipos de letras que causan esto. Con Arial y Arial Narrow por ejemplo corre perfectamente, generalmente con todos los Fonts True Type. Uno que causa esto es Arial Narrow Bold. Aún bajando el JDK a la versión 1.6 u11 no se soluciona completamente, se reduce el tiempo de respuesta considerablemente pero dejando de usar estos tipos de letras es la solución más óptima.

32. P GenAl011 y P GenAl011 son, numerador y liberador correctos: reemplazar donde no sean estos los usados, como en TES por ejemplo que se usan PCtlPr001 y PctlPr002.

33. Funciones exclusivas de VB: debe reemplazarlas por alguno para Java o estándar.(a) Variables globales: en Java también se tienen variables globales, para lo que se deben tener

las clases: initGlob (inicializa as variaveis globais), varPut (carga la variable global) y varGet (recupera la variable global). Estas clases las debe tener en el Model Target Path. En el menú principal de cada módulo se debe inicializar con call('initGlob'), esto cerializa las variables globales, las prepara. los procedimientos consernientes a variables globales son:

■ P GenAc014: inicia variable global SISTEMA.■ P GenDa012: obtiene variable global SISTEMA.■ P GenDa003: obtiene variable global SISTEMA, llamado desde PgenDa001.■ P GenAc015: inicia variable global EMPRESA.■ P GenAc016: inicia variable global USUARIO.■ P GenDa011: obtiene variables globales EMPRESA y USUARIO.■ P GenAc017: inicia variable global GRUPO.■ P GenDa014: obtiene variable sglobal GRUPO.■ P GenDa013: obtiene variable global SUCURSAL.■ P RecAc002: inicia variable global EsRecalculo.■ P PmoDa002: obtiene variable global EsRecalculo.■ P PmoAc004: inicia variable global DiaAtraso.■ P PmoDa004: obtiene variable global DiaAtraso.■ P TesAc010: graba variables globales PERIODO, SUCURSAL e IVA■ P TesDa010: recupera variables globales PERIODO, SUCURSAL e IVA

6

Page 7: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

(b) GxSendTab: no se ha logrado reemplazar, comentar.(c) XtoFormattedString: existen varias formas de reemplazarlo de acuerdo a la función que

cumple. Las diferentes maneras de reemplazarla que hasta ahora se han hecho son las siguientes:forma 1 >>En R CtbIf002_1://GMGC, reemplazo estas líneas que no funcionan en Java//call(PCtbAc009, &formato, &Totaldigito, &Totalnivel)//&formato=trim(&formato)//&PriCtaCod2 = XToFormattedString(&PriCtaCod, &formato) //&UltCtaCod2 = XToFormattedString(&UltCtaCod, &formato)

//GMGC, por estas líneasPCtbDa008.Call(&PriCtaCod, &PriCtaCod2)PCtbDa008.Call(&UltCtaCod, &UltCtaCod2)

forma 2 >>En R ApoAcSusObl_FDOSEG://GMGC &sFecha = '01/' + XToFormattedString(month(&ApoSocFchIngreso), '00') + '/' + Trim(str(year(&ApoSocFchIngreso)))/*GMGC*/&meschar = trim(str(month(&ApoSocFchIngreso)))if Len(&meschar) = 1

&meschar = Concat('0',&meschar)endif&sFecha = '01/' + &meschar + '/' + Trim(str(year(&ApoSocFchIngreso)))/*GMGC*/

forma 3 >>En T CtbTn102://Esto no funciona en java. GMGC//CtbTrmdCtaAux = XToFormattedString(CtbTrmdCtaCod, &formato);

//Reemplazo por esto. GMGCCtbTrmdCtaAux = trim(udp(PCtbDa004, CtbTrmdCtaCod));

forma 4 >>En P CtbDa004://Reemplazo por esto. GMGC&i = 21 - &Totalnivel //donde &Totalnivel es el largo de &formato

//Esto no funciona en Java. GMGC//&CtbCtaAux = Space(&i) + XToFormattedString(&CtbCtaCod, &formato)

//Reemplazo por esto. GMGC&CtbCtaCodChr = trim(&CtbCtaCod.ToString())&cont = 1&cont2 = 1for &cont = 1 to &Totalnivel &SubCtaCod = SubStr(&formato, &cont, 1) if &SubCtaCod = '#'

7

Page 8: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

&CtbCtaAux += SubStr(&CtbCtaCodChr, &cont2, 1) &cont2 += 1 endif if &SubCtaCod = '-' &CtbCtaAux += '-' endifendfor&CtbCtaAux = Space(&i) + &CtbCtaAux

34. Reportes Excel en Linux: los reportes que están envíando a Excel se deben adaptar para que usen OpenOffice y así corran en Linux. Se debe agregar al classpath el jar poi.jar.Para este propósito, se crearon los procedimientos P GenAc018 y P GenDa018, en GEN, que determinan la plataforma en que corre la aplicación. Debe llamar a PgenAc018 en el menú principal del módulo para inicializar la variable global PGenAc018.Call() //graba variable global PLATAFORMA. Puede tomar como ejemplo algún reporte que ya fue adaptado, como por ejemplo R PerLs031:

PGenDa018.Call(&unix, &LOCATION)&FileName = trim(&LOCATION) + 'MAEST_SOCIO.XLS'&Hoja.UseAutomation = 0 //Esto hace que tome el poi.jar para OpenOffice.&Hoja.Open(&FileName) //Donde &Hoja es del tipo ExcelDocument.If &Hoja.ErrCode <> 0 msg(&Hoja.ErrDescription) else &Hoja.Clear() &Fila = 1 &Hoja.Cells(&Fila,1).Bold = 1 &Hoja.Cells(&Fila,1).Text = "Socio" &Hoja.Cells(&Fila,2).Bold = 1 &Hoja.Cells(&Fila,2).Text = "Documento" &Hoja.Cells(&Fila,3).Bold = 1 endif for each order PerSocNro &PerSexoAbreviado = substr(PerSocSexo, 1, 1) if &PerSexoAbreviado = 'F' &PerSexoSoc = 'FEMENINO' else &PerSexoSoc = 'MASCULINO' endif if &Output = 'XLS' do 'GrabarDetXLS' else print P_Detalle &CantReg += 1 endif endfor &Hoja.Save() &Hoja.Close() Sub 'GrabarDetXLS' &Fila += 1

8

Page 9: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

&Hoja.Cells(&Fila,1).Number = PerSocNro &Hoja.Cells(&Fila,2).Number = PerSocNroDoc EndSub

35. Reportes Excel en Linux (Plantilla): los reportes que están envíando a Excel en base a una plantilla se deben adaptar para que usen OpenOffice y así corran en Linux. Se debe agregar al classpath el jar poi.jar.

P AhrPr028:PGenDa018.Call(&unix, &LOCATION)if &unix = 'UNIX' //linux &PthArc = trim(&LOCATION) + 'PLANTILLAS/AHRRECUPERARMONTOS'else //windows &PthArc = trim(&LOCATION) + 'PLANTILLAS\AHRRECUPERARMONTOS'endif&Plantilla.UseAutomation = 0 //para que use OpenOffice al generar.&Plantilla.Template = &PthArc+'.XLT' //usamos la plantilla preformateada.

&TxtFchHra = TToc(ServerNow()) ////////&TxtFchHra = StrReplace(&TxtFchHra,'/','') //&TxtFchHra = StrReplace(&TxtFchHra,':','') // Crea Nombre de Archivo&TxtFchHra = Trim(&TxtFchHra) //&TxtFchHra = StrReplace(&TxtFchHra,' ','-') ////////&PthArc = &PthArc + &TxtFchHra + '.XLS' //al nombre de la plantilla le agregamos la fecha

&Plantilla.Open(&PthArc) //acá especificamos el nombre del archivo a generar en base a la plantilla.If &Plantilla.ErrCode <> 0 //si ocurre algún error. msg(&Plantilla.ErrDescription)else &infordate=dtoc(&FchProc) &Plantilla.Cells(2,2).Text = &infordate &Plantilla.Cells(5,2).Number = &MonAV1 &Plantilla.Cells(6,2).Number = &MonAV5

&Plantilla.Save() &Plantilla.Close()endif

36. Reportes Word en Linux (Plantilla): los reportes que están envíando a Word en base a una plantilla se deben adaptar para que usen OpenOffice y así corran en Linux. Se debe agregar al classpath los jar unoil.jar, ridl.jar, juh.jar, jurt.jar y sandbox.jar.

Se debe tener levantado el servidor del Ooo (para Windows, solo debe apuntar al directorio correcto en Linux y en algunos casos no es necesario apuntar sino ejecutarlo desde una consola):> cd C:\Archivos de programa\OpenOffice.org 3\program> soffice “-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizardCabe notar que aún no funciona usando de esta forma, sí con UseMSOffice = 1 que es para Ms Office.

9

Page 10: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

P AhrPr016: PGenDa018.Call(&unix, &LOCATION) if &unix = 'UNIX' //linux &PthArc = trim(&LOCATION) + 'PLANTILLAS/CONTRATO PF' else //windows &PthArc = trim(&LOCATION) + 'PLANTILLAS\CONTRATO PF' endif &Plantilla.UseMSOffice = 0 //para que use OpenOffice al generar, donde &Plantilla es del tipo WordDocument. &Plantilla.Template = &PthArc+'.DOT' //usamos la plantilla preformateada.

&TxtFchHra = TToc(ServerNow()) //////// &TxtFchHra = StrReplace(&TxtFchHra,'/','') // &TxtFchHra = StrReplace(&TxtFchHra,':','') // Crea Nombre de Archivo &TxtFchHra = Trim(&TxtFchHra) // &TxtFchHra = StrReplace(&TxtFchHra,' ','-') //////// &PthArc = &PthArc + &TxtFchHra + '.DOC' //al nombre de la plantilla le agregamos la fecha

&Plantilla.Open(&PthArc) //acá especificamos el nombre del archivo a generar en base a la plantilla. If &Plantilla.ErrCode <> 0 //si ocurre algún error. msg(&Plantilla.ErrDescription+' Ha ocurrido un error.'+' Error: '+trim(str(&Plantilla.ErrCode))) else For Each //AhrTn007 Where AhrCtaSocNro = &PerSocNro Where AhrCtaTpoCod = &AhrTpoCod Where AhrCtaNro = &AhrCtaNro

&Pzo = Trim(Str(AhrCtaDiasPlazo,3,0)) //&WordDocument.Replace(OldText, NewText[, MatchCase [, MatchWholeWord]]) &Plantilla.Replace('[PLAZO]',&Pzo,0,0) //GMGC

&SocNro = Trim(Str(AhrCtaSocNro,6,0)) &Plantilla.Replace('[SOCIO NRO.]',&SocNro,0,0) //GMGC

&NroCon = Trim(Str(AhrCtaNroContrato,6,0)) &Plantilla.Replace('[CERTIFICADO NRO.]',&NroCon,0,0) //GMGC Endfor &Plantilla.Save() &Plantilla.Close() endif //si ocurre algún error.

37. W RecVe002: muy buen ejemplo para casos de grilla sin tabla base y las validaciones correspondientes.

38. W SubVe002: es un buen ejemplo para resolver en aquellos programas donde se utiliza F3 para llamar a una lista de selección pero que también se necesita para seleccionar.

Event 'Prompt'3do casecase cursor(&PerSocNro) or cursor(&PerSocNroDoc)

&PerSocNroDoc = NullValue(&PerSocNroDoc)&PerSocNro = NullValue(&PerSocNro)

10

Page 11: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

call(WPerPt024, &PerSocNro)refresh

otherwisedo'selecc'

endcaseEndEventEvent 'Seleccionar'

do'selecc'EndEvent // 'Seleccionar'Sub 'selecc'

if &Existe = 'S'call(RSubLs007, 'SCR', &Socio, &PerNroDoc, ' ', ' ')

elsemsg('No existe socio')&PerSocNro.Setfocus()

endifEndSub

39. W CjaIn001 y R CjaLs004: se ha implementado en estos programas en conjunto la impresión silenciosa o Silent Printig, proyecto de Diego Rostagnol con un poco de corrección por Guido Gaona. Se deben usar todos los jar del proyecto, no reemplazarlos por otros pues de lo contrario no funcionarán, en le jar fontbox lo único que importa es su estructura pues debe ser org/fontbox pues hay versiones nuevas que vienen org/apache/fontbox. Para toda la información necesaria recurrir al leeme.txt que viene con el pryecto.

&nombrepdf = 'recibocaja.pdf' //GMGC call(RCjaLs004, &nombrepdf, /*'PRN', GMGC*/ &CjaTmpCjaCod, &CjaTmpSerie, &CjaTmpComprob, &PmoCarCod) call('pimprimopdf',&nombrepdf,'RECIBO') //GMGC, esto hace la impresión silenciosa tomando la configuración de GXPRN.INI.

40. Reportes en modo Texto directo a impresora en Windows: estos son los ítem a tener en cuenta: Text report output Model Properties = Report Viewer (especificar y compilar el reporte). el reporte debe estar en modo Texto (estando en Layout del reporte en Edit > Convert to

Text Mode). Report Output Property = Only to Printer (no se necesita indicar nuevamente con la variable

&Output la salida a 'PRN', basta con esta propiedad). Confirmation Object Property = Never prompt. printer('RECIBO'); esta regla debe tener el mismo nombre que la etiqueta del GXPRN.ini donde se

configura la impresora y demás datos:[RECIBO]Scale= 100Color= 2Copies= 1XOffset= 0PrintQuality= 120Duplex= 1PaperWidth= 2100PaperSize= 1

11

Page 12: Conversión de VB a Java

Conversión de Sistema para YpacaraíJava Win / Linux y Windows Guido Gaona

PaperLength= 1485Orientation= 1Printer= Epson LX-300+YOffset= 0TextEject= FFMode= 0DefaultSource= 15

un print block vacío. primeras líneas del source:

print P_DummyPrintBlock //si no se imprime un print block antes del comando prncmd este es obviado.Noskip //para que la siguiente línea ya no vacía imprima seguidamentePL 24 //largo de página (largo en lineas del recibo para genexus)MB 0 //(margen inferior) MT 0 //(margen superior)// ESC @ ESC C 24prncmd \027 \064 \027 \067 \024 //(ESC C 24 largo en lineas del recibo para la impresora). Con el comando prncmd se indica a la impresora los caracteres de control, esto dependera de cada impresora, se debe remitir al manual del mismo.

41. Reportes en modo Texto directo a impresora en Linux: se ha

Fin del documento

12