Sei sulla pagina 1di 12

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
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
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona

&i = dfrclose( )
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 trabajo
java [!&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 SO


if &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)

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

else
msg('¡Error en la creación del archivo *.sh!', status)
endif
// endif
&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)

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

java [!&fileseparator!] = System.getProperty("file.separator"); //separador según SO


msg(trim(&fileseparator))
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).

4
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows 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, 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 = 0
for each line
&CantReg += 1
exit
endfor
if &CantReg = 0
msg('Sin datos según filtro')
&PerBarDsc.Setfocus() //primer filtro en orden de tabulación.
endif
EndEvent // 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

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

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:
 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.

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

■ 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

(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íneas


PCtbDa008.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. GMGC


CtbTrmdCtaAux = trim(udp(PCtbDa004, CtbTrmdCtaCod));

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

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 = 1
for &cont = 1 to &Totalnivel
&SubCtaCod = SubStr(&formato, &cont, 1)
if &SubCtaCod = '#'
&CtbCtaAux += SubStr(&CtbCtaCodChr, &cont2, 1)
&cont2 += 1
endif
if &SubCtaCod = '-'
&CtbCtaAux += '-'
endif
endfor
&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'

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

&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
&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

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

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 -nofirststartwizard
Cabe notar que aún no funciona usando de esta forma, sí con UseMSOffice = 1 que es
para Ms Office.
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

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

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'3
do case
case cursor(&PerSocNro) or cursor(&PerSocNroDoc)
&PerSocNroDoc = NullValue(&PerSocNroDoc)
&PerSocNro = NullValue(&PerSocNro)
call(WPerPt024, &PerSocNro)
refresh
otherwise
do'selecc'
endcase
EndEvent
Event 'Seleccionar'
do'selecc'
EndEvent // 'Seleccionar'
Sub 'selecc'
if &Existe = 'S'
call(RSubLs007, 'SCR', &Socio, &PerNroDoc, ' ', ' ')
else
msg('No existe socio')
&PerSocNro.Setfocus()
endif
EndSub

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:

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

• 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= 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.
• 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 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).
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