Java Win / Linux y WindowsConversión de Sistema para Ypacaraí 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 000000 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 1 ''. status) &i = DFWOpen( &dirusr. status) else msg('¡Recibo de caja impreso correctamente'.sh no existe! Será creado'. imagínese por cada impresión de recibo en caja que se esté creando el archivo // msg('¡Archivo *. status) &i = DFWOpen( &dirusr.sh creado!'.sh dependiendo del SO if &fileseparator = '\' //con esto sabemos que es Windows // &Status = FileExist(&dirusr.prn" &i = DFWPTxt('lp -d ' + 'EpsonLX "' + &dirusr. 0) //&i = DFWPTxt('type "' + &dirusr.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona &i = dfrclose( ) 8. 0) //Habiendo probado desde una máquina virtual con vbox y OpenSuse 10. 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.'. imagínese por cada impresión de recibo en caja que se esté creando el archivo // msg('¡Archivo *. sirve principalmente para exportar datos.bat // if &Status = 1 //el archivo existe // msg('¡Archivo *.prn"') &i = DFWNext() &i = DFWClose() if &i = 0 msg('¡Archivo *. '.Trim() + 'rcjals004.Trim() + 'rcjals004.Trim() + 'rcjals004.Trim() + 'rcjals004.'.separator").getProperty("user.bat') //verificamos existencia del archivo *. Uso de dfwopen: con esta función se pueden crear archivos delimitados.3 comprobé que la forma para el cliente Linux es: //lp -d EpsonLX "/home/cpc/Documents/rcjals004.bat no existe! Será creado'.Trim() + 'rcjals004.sh') //verificamos existencia del archivo *.dir".bat // if &Status = 1 //el archivo existe // msg('¡Archivo *.prn "' + ' > prn') &i = DFWPTxt('print /d:' + '\\' + WrkSt() + '\EpsonLX "' + &dirusr.sh'.Trim() + 'rcjals004. '.bat creado!'.Trim() + 'rcjals004.bat!'.bat o *. status) else msg('¡Error en la creación del archivo *.prn"') &i = DFWNext() &i = DFWClose() if &i = 0 msg('¡Archivo *. status) // else //solamente si no existe lo creamos. //obtenemos el directorio de trabajo java [!&fileseparator!] = System.bat') //llamamos al archivo para tirar a la impresora if &err <> 0 msg('¡Error durante la impresión del recibo!'.bat existe!'. status) endif // endif &err = Shell(&dirusr.Trim() + &fileseparator //al directorio de trabajo le sumamos el separador de archivos //Ahora debemos armar los archivos *. //obtenemos el separador de archivos &dirusr = &dirusr. status) 2 .sh existe!'.Trim() + 'rcjals004.bat'. ''. "unknown"). status) endif else //de lo contrario es Linux // &Status = FileExist(&dirusr. status) // else //solamente si no existe lo creamos.getProperty("file. java [!&dirusr!] = System. &buttcap.107\cyl' &Extension = 'dot' &Titulo = 'Plantillas' &buttcap = 'Seleccionar' &TipoBoton=0 call('gxSelFile'.Replace('{{Situacion}}'.ErrCode <> 0 msg(&Plantilla.'GUIDO MIGUEL GAONA CANDIA'. &Extension. //directorio por defecto del usuario.getProperty("user.version").getProperty("os.Replace('{{CUENTA}}'. &Titulo. status) endif // endif &err = Shell(&dirusr. //arquitectura de sistema operativo (32 o 64 bits) java [!&dirusr!] = System. 10. "unknown"). status) endif endif 9.getProperty("java.0) &Plantilla.ErrCode <> 0 msg(&Plantilla.ErrDescription+' Error al crear el documento') else &Plantilla.tmpdir"). "unknown").getProperty("user. Código Java nativo java [!&dirusr!] = System. C:\Documents and Settings\CPCGX java [!&dirusr!] = System. //obtiene por ejemplo C:\Documents and Settings\CPCGX\Configuración local\Temp msg(&dirusr) 3 .arch".getProperty("java.name".1.0) endif endif 11. &TipoBoton) &Plantilla. //nombre de usuario logueado java [!&dirusr!] = System.sh') //llamamos al archivo para tirar a la impresora if &err <> 0 msg('¡Error durante la impresión del recibo!'.home". //versión de java java [!&dirusr!] = System. &PthArc.DOC' &Plantilla.getProperty("user.0. Show Status Bar Model Property = Always: esto para mostrar el status bar para poder visualizar los mensajes tipo nowait o status.sh!'.Trim() + 'rcjals004.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona else msg('¡Error en la creación del archivo *.Template = &PthArc If &Plantilla. "unknown").Open(&PthArc) If &Plantilla.version".ErrDescription+' Error al tomar la plantilla') else &PthArc = 'C:\Temp\Modelo'+'Prueba'+'.168.name".Path en la red: hay casos en que sería util implementar el path a una carpeta compartida en la red. status) else msg('¡Recibo de caja impreso correctamente'.getProperty("os.UseMSOffice = 0 &Plantilla.io.getProperty("os.ServerNow(). //versión del sistema operativo java [!&dirusr!] = System.0) &Plantilla.dir". "unknown"). "unknown"). "unknown"). //directorio en el que está corriendo el programa java. &Inipath.0.Replace('{{NOMBRE}}'. //nombre del sistema operativo java [!&dirusr!] = System.0.'Prueba'. Simplemente se hace así (solo un ejemplo): &ImgPath = "" &inipath = '\\192. Show in taskBar (SDI) = Yes: en todos los objetos que tienen esta propiedad. //separador según SO msg(trim(&fileseparator)) 12. Esto hace que se envíe una cadena vacía y por lo tando no controlará el mapa de permisos. 14.2. Controlar en cada objeto.getProperty("file. Solo es necesario en WP con grilla.&PgmCod = Substr(&Pgmname. 16. Se pretendió utilizarlo como &Pgmname pero no se hizo un &PgmCod = &Pgmname.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.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 = !. 17.Menubar Object Property = NONE: en todos los objetos que tienen esta propiedad. esto es.Return en Event After Trn: en las transacciones que cierran la aplicación. 15. a nivel de objeto.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. pues ocupa mucho espacio en la pantalla.&PgmCod en lugar de &Pgmname: reemplazar en todos los objetos en donde se confundió su uso con &Pgmname. como por ejemplo el dominio TipoAvi. Mire W PerPt017 como ejemplo (el botón Seleccionar debe estar en Enter). Se debe dejar todos los campos del mismo tamaño para que la tabulación siga normal. 21. debe enfocarse en el primer filtro. compilar y probar). Controlar en cada objeto. se debe programar el evento en cuestión y agregar un return. cuando llama a PgenDa001. a nivel de objeto. compilar y probar. por lo general se puede quitar otra vez el return (especificar. 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. en lugar de &PgmCod se debe envíar &Pgmname. para que se muestre en la barra de tareas la ventana. para evitar que se cierre desde ahí el programa. y ya funciona correctamente. esto se logra configurando esta propiedad en NO.ASK en Linux interrumpe fácilmente la aplicación: se debe reemplazar por WP en los objetos donde sea usado. Es a nivel de la grilla. 13.8): en programas del sistema antes de llamar a PgenDa001. 4 .Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona java [!&fileseparator!] = System. especificar. 20. 19.separator"). es algo realmente ilógico pero soluciona el problema. 18.Control Box Object Property = NO: en todos los objetos que tienen esta propiedad. 22. a nivel de objeto.Load at Startup Grid Object Property = NO: posición del cursor en un WP con filtros y grilla. Se debe realizar en los WP donde se tenga este problema. OnLineActivate Event'Inicio'2 //salta al primer filtro. &PerNroDoc. 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). refresh EndEvent Event grd_1.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona Event 'Seleccionar'3 &OkUser = 0 &PerRegCod=PerRegCod return EndEvent // 'Seleccionar' Event Enter &OkUser = 0 &PerRegCod=PerRegCod return EndEvent // Enter Esto no es posible en los prompt creados por Genexus. Esto es a nivel de atributo o dominio (en diseño). de lo contrario devolver el cursor al primer filtro (esto tampoco es posible para los prompt de Genexus). De nuevo no es posible en prompt de Genexus.Setfocus() EndEvent 25.IsValid //último filtro en orden de tabulación. Event &PerCiuDsc. 26. No debe ser combo box.P GenDa001 y P GenAc011: registran (aparte de los permisos).Thousand Separator = True y Signed = False: para los atributos del tipo numérico donde no debe ingresarse valor negativo.En los wp con grillas y filtros. endif EndEvent // grd_1. 27. debe modificarse los parámetros y llamar a PgenAc011 que 5 .Upper en todos los filtros character: en conditions hacer upper upper(PerApeNom) LIKE upper(&PerApeNom).OnLineActivate &CantReg = 0 for each line &CantReg += 1 exit endfor if &CantReg = 0 msg('Sin datos según filtro') &PerBarDsc. esto es a confirmar. 24. verificar si la grilla tiene datos de acuerdo a los filtros. la hora de entrada y salida.Setfocus() //primer filtro en orden de tabulación. Esto impide ingresar signos. 6 . como W CtbTr012.PDFReport. se reduce el tiempo de respuesta considerablemente pero dejando de usar estos tipos de letras es la solución más óptima. "PDF"). varPut (carga la variable global) y varGet (recupera la variable global). generalmente con todos los Fonts True Type. En el menú principal de cada módulo se debe inicializar con call('initGlob').pdf". favor. Se debe por tanto modificar todos los reportes que tengan este problema cambiando los tipos de letras que causan esto. 28. Uno que causa esto es Arial Narrow Bold. ■ P GenAc015: inicia variable global EMPRESA. las prepara. como en TES por ejemplo que se usan PCtlPr001 y PctlPr002.jar y a los reportes en rules output_file("nombre. (a) Variables globales: en Java también se tienen variables globales. se logra agregando al classpath el jar iText. ■ P GenDa003: obtiene variable global SISTEMA. Con Arial y Arial Narrow por ejemplo corre perfectamente. los procedimientos consernientes a variables globales son: ■ P GenAc014: inicia variable global SISTEMA.Reportes PDF tardan demasiado: los reportes PDF tardan en generarse en aquellos donde se tienen tipos de letras no estándares (por decirlo así). 32. 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. llamado desde PgenDa001. numerador y liberador correctos: reemplazar donde no sean estos los usados.Reportes a PDF: debe hacerse sí o sí pues el report viewer usa dll que no nos sirve en Linux.ini: para Linux se debe agregar en el cliente la línea: Acrobat Location= /usr/lib/Adobe/Reader9/bin/acroread Donde el path debe ser el lector PDF instalado. ■ P GenAc016: inicia variable global USUARIO.P GenAl011 y P GenAl011 son. Estas clases las debe tener en el Model Target Path.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).6 u11 no se soluciona completamente. tome como ejemplo alguno que ya fue corregido.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona registra la salida del evento. 30. para lo que se deben tener las clases: initGlob (inicializa as variaveis globais). 33. ■ P GenDa012: obtiene variable global SISTEMA. Aún bajando el JDK a la versión 1.Funciones exclusivas de VB: debe reemplazarlas por alguno para Java o estándar. esto cerializa las variables globales. 29. //Reemplazo por esto. (c) XtoFormattedString: existen varias formas de reemplazarlo de acuerdo a la función que cumple.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ P GenDa011: obtiene variables globales EMPRESA y USUARIO. &formato) //GMGC. P GenAc017: inicia variable global GRUPO. '00') + '/' + Trim(str(year(&ApoSocFchIngreso))) /*GMGC*/ &meschar = trim(str(month(&ApoSocFchIngreso))) if Len(&meschar) = 1 &meschar = Concat('0'. SUCURSAL e IVA P TesDa010: recupera variables globales PERIODO. &formato) //&UltCtaCod2 = XToFormattedString(&UltCtaCod. comentar. P GenDa013: obtiene variable global SUCURSAL. 7 . P PmoDa004: obtiene variable global DiaAtraso.Call(&PriCtaCod. &Totaldigito.Call(&UltCtaCod. &formato. Las diferentes maneras de reemplazarla que hasta ahora se han hecho son las siguientes: forma 1 >> En R CtbIf002_1: //GMGC. &formato). P TesAc010: graba variables globales PERIODO.&meschar) endif &sFecha = '01/' + &meschar + '/' + Trim(str(year(&ApoSocFchIngreso))) /*GMGC*/ forma 3 >> En T CtbTn102: //Esto no funciona en java. GMGC CtbTrmdCtaAux = trim(udp(PCtbDa004. SUCURSAL e IVA (b) GxSendTab: no se ha logrado reemplazar. GMGC //CtbTrmdCtaAux = XToFormattedString(CtbTrmdCtaCod. &UltCtaCod2) forma 2 >> En R ApoAcSusObl_FDOSEG: //GMGC &sFecha = '01/' + XToFormattedString(month(&ApoSocFchIngreso). P RecAc002: inicia variable global EsRecalculo. P GenDa014: obtiene variable sglobal GRUPO. P PmoDa002: obtiene variable global EsRecalculo. P PmoAc004: inicia variable global DiaAtraso. por estas líneas PCtbDa008. CtbTrmdCtaCod)). &PriCtaCod2) PCtbDa008. &Totalnivel) //&formato=trim(&formato) //&PriCtaCod2 = XToFormattedString(&PriCtaCod. reemplazo estas líneas que no funcionan en Java //call(PCtbAc009. 1) &cont2 += 1 endif if &SubCtaCod = '-' &CtbCtaAux += '-' endif endfor &CtbCtaAux = Space(&i) + &CtbCtaAux 34. &cont.jar para OpenOffice.Text = "Socio" &Hoja.2). en GEN.Cells(&Fila. Debe llamar a PgenAc018 en el menú principal del módulo para inicializar la variable global PGenAc018.XLS' &Hoja. 1) if &SubCtaCod = '#' &CtbCtaAux += SubStr(&CtbCtaCodChr.1).Call() //graba variable global PLATAFORMA. Para este propósito.UseAutomation = 0 //Esto hace que tome el poi. &cont2.jar. como por ejemplo R PerLs031: PGenDa018.ErrCode <> 0 msg(&Hoja.Cells(&Fila.ErrDescription) else &Hoja. &formato) //Reemplazo por esto.Text = "Documento" &Hoja.Bold = 1 &Hoja. GMGC &CtbCtaCodChr = trim(&CtbCtaCod.Cells(&Fila.ToString()) &cont = 1 &cont2 = 1 for &cont = 1 to &Totalnivel &SubCtaCod = SubStr(&formato.Clear() &Fila =1 &Hoja. GMGC //&CtbCtaAux = Space(&i) + XToFormattedString(&CtbCtaCod.3).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.2).&Totalnivel //donde &Totalnivel es el largo de &formato //Esto no funciona en Java.Cells(&Fila.Call(&unix. que determinan la plataforma en que corre la aplicación. &LOCATION) &FileName = trim(&LOCATION) + 'MAEST_SOCIO. Puede tomar como ejemplo algún reporte que ya fue adaptado. Se debe agregar al classpath el jar poi. 1) if &PerSexoAbreviado = 'F' 8 . se crearon los procedimientos P GenAc018 y P GenDa018.1). &Hoja. If &Hoja.Bold = 1 endif for each order PerSocNro &PerSexoAbreviado = substr(PerSocSexo.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona forma 4 >> En P CtbDa004: //Reemplazo por esto.Cells(&Fila.Open(&FileName) //Donde &Hoja es del tipo ExcelDocument.Bold = 1 &Hoja. GMGC &i = 21 . 1. jar. If &Plantilla.Number = &MonAV5 &Plantilla.Number = PerSocNro &Hoja.'/'.'') // Crea Nombre de Archivo &TxtFchHra = Trim(&TxtFchHra) // &TxtFchHra = StrReplace(&TxtFchHra.1).'') // &TxtFchHra = StrReplace(&TxtFchHra. &LOCATION) if &unix = 'UNIX' //linux &PthArc = trim(&LOCATION) + 'PLANTILLAS/AHRRECUPERARMONTOS' else //windows &PthArc = trim(&LOCATION) + 'PLANTILLAS\AHRRECUPERARMONTOS' endif &Plantilla.Text = &infordate &Plantilla.XLT' //usamos la plantilla preformateada.Close() Sub 'GrabarDetXLS' &Fila += 1 &Hoja.ErrCode <> 0 //si ocurre algún error.XLS' //al nombre de la plantilla le agregamos la fecha &Plantilla.Cells(&Fila.Open(&PthArc) //acá especificamos el nombre del archivo a generar en base a la plantilla.Save() &Plantilla.Template = &PthArc+'. msg(&Plantilla.Number = PerSocNroDoc EndSub 35.Cells(2.Cells(5. &Plantilla. &TxtFchHra = TToc(ServerNow()) //////// &TxtFchHra = StrReplace(&TxtFchHra.UseAutomation = 0 //para que use OpenOffice al generar.2).Cells(&Fila.Save() &Hoja.2).ErrDescription) else &infordate=dtoc(&FchProc) &Plantilla.':'. P AhrPr028: PGenDa018.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.2).Cells(6.' '.2).'-') //////// &PthArc = &PthArc + &TxtFchHra + '.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona &PerSexoSoc = 'FEMENINO' else &PerSexoSoc = 'MASCULINO' endif if &Output = 'XLS' do 'GrabarDetXLS' else print P_Detalle &CantReg += 1 endif endfor &Hoja. Se debe agregar al classpath el jar poi.Number = &MonAV1 &Plantilla.Close() endif 9 .Call(&unix. juh.6.0.'') // &TxtFchHra = StrReplace(&TxtFchHra. Se debe tener levantado el servidor del Ooo (para Windows.jar.0) //GMGC &NroCon = Trim(Str(AhrCtaNroContrato.Open(&PthArc) //acá especificamos el nombre del archivo a generar en base a la plantilla.0) //GMGC &SocNro = Trim(Str(AhrCtaSocNro.]'.&Pzo.UseMSOffice = 0 //para que use OpenOffice al generar.3.0) //GMGC 10 .ErrCode))) else For Each //AhrTn007 Where AhrCtaSocNro = &PerSocNro Where AhrCtaTpoCod = &AhrTpoCod Where AhrCtaNro = &AhrCtaNro &Pzo = Trim(Str(AhrCtaDiasPlazo.ErrCode <> 0 //si ocurre algún error.'/'.org 3\program > soffice “-accept=socket.host=localhost. 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.]'.'') // Crea Nombre de Archivo &TxtFchHra = Trim(&TxtFchHra) // &TxtFchHra = StrReplace(&TxtFchHra.ServiceManager" -nologo -headless -nofirststartwizard Cabe notar que aún no funciona usando de esta forma.Replace(OldText.DOT' //usamos la plantilla preformateada. ridl.port=8100.&NroCon.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona 36.&SocNro.0)) &Plantilla. sí con UseMSOffice = 1 que es para Ms Office. &LOCATION) if &unix = 'UNIX' //linux &PthArc = trim(&LOCATION) + 'PLANTILLAS/CONTRATO PF' else //windows &PthArc = trim(&LOCATION) + 'PLANTILLAS\CONTRATO PF' endif &Plantilla. MatchWholeWord]]) &Plantilla.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.DOC' //al nombre de la plantilla le agregamos la fecha &Plantilla. NewText[.ErrDescription+' Ha ocurrido un error.jar.'+' Error: '+trim(str(&Plantilla.StarOffice.'-') //////// &PthArc = &PthArc + &TxtFchHra + '. MatchCase [.0.0)) //&WordDocument.Replace('[SOCIO NRO.' '.':'. &Plantilla. Se debe agregar al classpath los jar unoil.jar. jurt.Replace('[PLAZO]'. donde &Plantilla es del tipo WordDocument.urp. If &Plantilla. &TxtFchHra = TToc(ServerNow()) //////// &TxtFchHra = StrReplace(&TxtFchHra.0)) &Plantilla. msg(&Plantilla.Replace('[CERTIFICADO NRO.Template = &PthArc+'.6.jar y sandbox.jar. P AhrPr016: PGenDa018.Call(&unix.0. 40. 'SCR'. Event 'Prompt'3 do case case cursor(&PerSocNro) or cursor(&PerSocNroDoc) &PerSocNroDoc = NullValue(&PerSocNroDoc) &PerSocNro = NullValue(&PerSocNro) call(WPerPt024. esto hace la impresión silenciosa tomando la configuración de GXPRN.W CjaIn001 y R CjaLs004: se ha implementado en estos programas en conjunto la impresión silenciosa o Silent Printig.Save() &Plantilla. &PerNroDoc.Setfocus() endif EndSub 39.INI. &nombrepdf = 'recibocaja. GMGC*/ &CjaTmpCjaCod.'RECIBO') //GMGC. &PmoCarCod) call('pimprimopdf'.Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona Endfor &Plantilla. &nombrepdf.W RecVe002: muy buen ejemplo para casos de grilla sin tabla base y las validaciones correspondientes.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. Se deben usar todos los jar del proyecto.pdf' //GMGC call(RCjaLs004.Reportes en modo Texto directo a impresora en Windows: estos son los ítem a tener en cuenta: 11 . &Socio. 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.Close() endif //si ocurre algún error. &CjaTmpSerie. 37. /*'PRN'. 38. Para toda la información necesaria recurrir al leeme. no reemplazarlos por otros pues de lo contrario no funcionarán.txt que viene con el pryecto. &PerSocNro) refresh otherwise do'selecc' endcase EndEvent Event 'Seleccionar' do'selecc' EndEvent // 'Seleccionar' Sub 'selecc' if &Existe = 'S' call(RSubLs007. ' ') else msg('No existe socio') &PerSocNro. proyecto de Diego Rostagnol con un poco de corrección por Guido Gaona. &CjaTmpComprob.&nombrepdf. ' '. ini donde se configura la impresora y demás datos: [RECIBO] Scale= 100 Color= 2 Copies= 1 XOffset= 0 PrintQuality= 120 Duplex= 1 PaperWidth= 2100 PaperSize= 1 PaperLength= 1485 Orientation= 1 Printer= Epson LX-300+ YOffset= 0 TextEject= FF Mode= 0 DefaultSource= 15 • • un print block vacío. printer('RECIBO'). Confirmation Object Property = Never prompt.Reportes en modo Texto directo a impresora en Linux: se ha Fin del documento 12 . 41. primeras líneas del source: print P_DummyPrintBlock //si no se imprime un print block antes del comando prncmd este es obviado. Con el comando prncmd se indica a la impresora los caracteres de control. Noskip //para que la siguiente línea ya no vacía imprima seguidamente PL 24 //largo de página (largo en lineas del recibo para genexus) MB 0 //(margen inferior) MT 0 //(margen superior) // ESC @ ESC C 24 prncmd \027 \064 \027 \067 \024 //(ESC C 24 largo en lineas del recibo para la impresora).Java Win / Linux y Windows Conversión de Sistema para Ypacaraí Guido Gaona • • • • • Text report output Model Properties = Report Viewer (especificar y compilar el reporte). esto dependera de cada impresora. basta con esta propiedad). esta regla debe tener el mismo nombre que la etiqueta del GXPRN. se debe remitir al manual del mismo. Report Output Property = Only to Printer (no se necesita indicar nuevamente con la variable &Output la salida a 'PRN'. el reporte debe estar en modo Texto (estando en Layout del reporte en Edit > Convert to Text Mode).