CAMPO MEMO EN FOXPRO 2.6

540 views
Skip to first unread message

Luis Martinez

unread,
Mar 21, 2012, 12:35:02 PM3/21/12
to Comunidad de Visual Foxpro en Español
ALGUIEN SABE COMO IMPRIMIR UN CAMPO MEMO EN UN REPORTE DE FOXPRO 2.6?
Message has been deleted

Dario_El_Cyber_Gaucho

unread,
Mar 21, 2012, 12:54:01 PM3/21/12
to publice...@googlegroups.com
simplemente indicando el campo memo en el report...

El 21/03/2012 01:35 p.m., Luis Martinez escribi�:

Luis Martinez

unread,
Mar 21, 2012, 1:18:47 PM3/21/12
to Comunidad de Visual Foxpro en Español
No es tan sencillo como parece.. ya que el formulario utiliza
sentencias y variables que no conozco..
El screen cuenta con un campo llamado m.t_codjui, un campo llamado
m.t_obs, un boton llamado m.edit_btn,
otro boton llamado m.del_btn y uno ulitmo llamado m.prnt_btn, este
boton es el que llama al reporte

En el metodo preprograma esta el siguiente script:

#WNAME wz_win
#READCLAUSE NOLOCK
*~ WIZARDSCREEN

#SECTION1
PRIVATE wzfields,wztalk
IF SET("TALK") = "ON"
SET TALK OFF
m.wztalk = "ON"
ELSE
m.wztalk = "OFF"
ENDIF
m.wzfields=SET('FIELDS')
SET FIELDS OFF
IF m.wztalk = "ON"
SET TALK ON
ENDIF


#SECTION2

#DEFINE C_DBFEMPTY 'La base de datos est  vac¡a. ¨Desea agregar alg£n
registro?'
#DEFINE C_EDITS 'Por favor, finalice su edici¢n.'
#DEFINE C_TOPFILE 'Principio de archivo.'
#DEFINE C_ENDFILE 'Fin de archivo.'
#DEFINE C_BRTITLE 'Encontrar registro'
#DEFINE C_NOLOCK 'En este momento no se puede bloquear el registro,
int‚ntelo m s tarde.'
#DEFINE C_ECANCEL 'Edici¢n cancelada.'
#DEFINE C_DELREC '¨Eliminar registros seleccionados?'
#DEFINE C_NOFEAT 'Caracter¡stica no disponible ahora.'
#DEFINE C_NOWIZ 'Asistente no disponible.'
#DEFINE C_MAKEREPO 'Crear un informe con el Asistente para informes.'
#DEFINE C_NOREPO 'No se puede crear el informe.'
#DEFINE C_DELNOTE 'Eliminando registros...'
#DEFINE C_READONLY 'La tabla es de s¢lo lectura: no se permite su
edici¢n.'
#DEFINE C_NOTABLE 'No hay ninguna tabla seleccionada. Abra una tabla
o ejecute una consulta.'
#DEFINE C_BADEXPR 'Expresi¢n no v lida.'
#DEFINE C_LOCWIZ 'Buscar WIZARD.APP:'
#DEFINE C_MULTITABLE 'Tiene tablas de relaci¢n multiple: no se permite
agregar registros.'

MOVE WINDOW 'wz_win' CENTER
PRIVATE isediting,isadding,wztblarr
PRIVATE wzolddelete,wzolderror,wzoldesc
PRIVATE wzalias, tempcurs,wzlastrec
PRIVATE isreadonly,find_drop,is2table

IF EMPTY(ALIAS())
WAIT WINDOW C_NOTABLE
RETURN
ENDIF

m.wztblarr= ''
m.wzalias=SELECT()
m.isediting=.F.
m.isadding=.F.
m.is2table = .F.
m.wzolddelete=SET('DELETE')
SET DELETED ON
m.tempcurs=SYS(2015) &&used if General field
m.wzlastrec = 1
m.wzolderror=ON('error')
ON ERROR DO wizerrorhandler
wzoldesc=ON('KEY','ESCAPE')
ON KEY LABEL ESCAPE
m.find_drop = IIF(_DOS,0,2)

m.isreadonly=IIF(ISREAD(),.T.,.F.)
IF m.isreadonly
WAIT WINDOW C_READONLY TIMEOUT 1
ENDIF


IF RECCOUNT()=0 AND !m.isreadonly AND fox_alert(C_DBFEMPTY)
APPEND BLANK
ENDIF
DEFINE WINDOW comjud ;
AT 0.000, 0.000 ;
SIZE 37.846,105.833 ;
TITLE "Comentario Judicial" ;
FONT "MS Sans Serif", 8 ;
STYLE "B" ;
NOFLOAT ;
NOCLOSE ;
NOMINIMIZE ;
DOUBLE ;
in consulta ;
COLOR RGB(,,,192,192,192) ;
ICON FILE LOCFILE("G:\SISJUD\ICO\UBASOFT.ICO","ICO", ;
"¿Dónde está ubasoft?")
MOVE WINDOW comjud CENTER
selec t_juicio // esta es la tabla del sistema judicial.

SCATTER MEMVAR MEMO

En el metodo postprograma y procedimientos esta el siguiente codigo:

SET DELETED &wzolddelete
SET FIELDS &wzfields
ON ERROR &wzolderror
ON KEY LABEL ESCAPE &wzoldesc
DO CASE
CASE _DOS AND SET('DISPLAY')='VGA25'
@24,0 CLEAR TO 24,79
CASE _DOS AND SET('DISPLAY')='VGA50'
@49,0 CLEAR TO 49,79
CASE _DOS
@24,0 CLEAR TO 24,79
ENDCASE

****Procedures****
PROCEDURE readdeac
IF isediting
ACTIVATE WINDOW 'wz_win'
WAIT WINDOW C_EDITS NOWAIT
ENDIF
IF !WVISIBLE(WOUTPUT())
CLEAR READ
RETURN .T.
ENDIF
RETURN .F.

PROCEDURE readact
IF !isediting
SELECT (m.wzalias)
SHOW GETS
ENDIF
DO REFRESH
RETURN

PROCEDURE wizerrorhandler
*This very simple error handler is primarily intended
*to trap for General field OLE errors which may occur
*during editing from the MODIFY GENERAL window.
WAIT WINDOW message()
RETURN


PROCEDURE printrec
PRIVATE sOldError,wizfname,saverec,savearea,tmpcurs,tmpstr
PRIVATE prnt_btn,p_recs,p_output,pr_out,pr_record
STORE 1 TO p_recs,p_output
STORE 0 TO prnt_btn
STORE RECNO() TO saverec
m.sOldError=ON('error')
DO pdialog
IF m.prnt_btn = 2
RETURN
ENDIF
IF !FILE(ALIAS()+'.FRX')
m.wizfname=SYS(2004)+'WIZARDS\'+'WIZARD.APP'
IF !FILE(m.wizfname)
ON ERROR *
m.wizfname=LOCFILE('WIZARD.APP','APP',C_LOCWIZ)
ON ERROR &sOldError
IF !'WIZARD.APP'$UPPER(m.wizfname)
WAIT WINDOW C_NOWIZ
RETURN
ENDIF
ENDIF
WAIT WINDOW C_MAKEREPO NOWAIT
m.savearea=SELECT()
m.tmpcurs='_'+LEFT(SYS(3),7)
CREATE CURSOR (m.tmpcurs) (comment m)
m.tmpstr = '* LAYOUT = COLUMNAR'+CHR(13)+CHR(10)
INSERT INTO (m.tmpcurs) VALUES(m.tmpstr)
SELECT (m.savearea)
DO (m.wizfname) WITH '','WZ_QREPO','NOSCRN/
CREATE',ALIAS(),m.tmpcurs
USE IN (m.tmpcurs)
WAIT CLEAR
IF !FILE(ALIAS()+'.FRX') &&wizard could not create report
WAIT WINDOW C_NOREPO
RETURN
ENDIF
ENDIF

m.pr_out=IIF(m.p_output=1,'TO PRINT NOCONSOLE','PREVIEW')
m.pr_record=IIF(m.p_recs=1,'NEXT 1','ALL')
REPORT FORM (ALIAS()) &pr_out &pr_record
GO m.saverec
RETURN


PROCEDURE BTN_VAL
PARAMETER m.btnname
DO CASE
* CASE m.btnname='TOP'
* GO TOP
* WAIT WINDOW C_TOPFILE NOWAIT
* CASE m.btnname='PREV'
* IF !BOF()
* SKIP -1
* ENDIF
* IF BOF()
* WAIT WINDOW C_TOPFILE NOWAIT
* GO TOP
* ENDIF
* CASE m.btnname='NEXT'
* IF !EOF()
* SKIP 1
* ENDIF
* IF EOF()
* WAIT WINDOW C_ENDFILE NOWAIT
* GO BOTTOM
* ENDIF
* CASE m.btnname='END'
* GO BOTTOM
* WAIT WINDOW C_ENDFILE NOWAIT
* CASE m.btnname='LOCATE'
* DO loc_dlog
* CASE m.btnname='ADD' AND !isediting &&add record
* isediting=.T.
* isadding=.T.
* =edithand('ADD')
* _curobj=1
* DO refresh
* SHOW GETS
* RETURN
CASE m.btnname='EDIT' AND !isediting &&edit record
IF EOF() OR BOF()
WAIT WINDOW C_ENDFILE NOWAIT
RETURN
ENDIF
IF RLOCK()
isediting=.T.
_curobj=1
DO refresh
RETURN
ELSE
WAIT WINDOW C_NOLOCK
ENDIF
CASE m.btnname='EDIT' AND isediting &&save record
IF isadding
=edithand('SAVE')
ELSE
GATHER MEMVAR MEMO
ENDIF
UNLOCK
isediting=.F.
isadding=.F.
DO refresh
CASE m.btnname='DELETE' AND isediting &&cancel record
IF isadding
=edithand('CANCEL')
ENDIF
isediting=.F.
isadding=.F.
UNLOCK
WAIT WINDOW C_ECANCEL NOWAIT
DO refresh
CASE m.btnname='DELETE'
m.bailout=.T. &&this is needed if used with FoxApp
CLEAR READ
RETURN

CASE m.btnname='PRINT'
DO printrec
RETURN
CASE m.btnname='EXIT'

ENDCASE
SCATTER MEMVAR MEMO
SHOW GETS
RETURN


PROCEDURE REFRESH
DO CASE
CASE m.isreadonly AND RECCOUNT()=0
SHOW GETS DISABLE
SHOW GET exit_btn ENABLE
CASE m.isreadonly
SHOW GET add_btn DISABLE
SHOW GET del_btn DISABLE
SHOW GET edit_btn DISABLE
CASE (RECCOUNT()=0 OR EOF()) AND !m.isediting
SHOW GETS DISABLE
SHOW GET add_btn ENABLE
SHOW GET exit_btn ENABLE
CASE m.isediting
SHOW GET find_drop DISABLE
SHOW GET top_btn DISABLE
SHOW GET prev_btn DISABLE
SHOW GET loc_btn DISABLE
SHOW GET next_btn DISABLE
SHOW GET end_btn DISABLE
SHOW GET add_btn DISABLE
SHOW GET prnt_btn DISABLE
SHOW GET exit_btn DISABLE
SHOW GET edit_btn,1 PROMPT "\<Guardar"
SHOW GET del_btn,1 PROMPT "\<Cancelar"
ON KEY LABEL ESCAPE DO BTN_VAL WITH 'DELETE'
RETURN
OTHERWISE
SHOW GET edit_btn,1 PROMPT "E\<ditar"
SHOW GET del_btn,1 PROMPT "\<Salir"
SHOW GETS ENABLE
ENDCASE
IF m.is2table
SHOW GET add_btn DISABLE
ENDIF
ON KEY LABEL ESCAPE
RETURN


PROCEDURE edithand
PARAMETER m.paction
* procedure handles edits
DO CASE
CASE m.paction = 'ADD'
SCATTER MEMVAR MEMO BLANK
CASE m.paction = 'SAVE'
INSERT INTO (ALIAS()) FROM MEMVAR
CASE m.paction = 'CANCEL'
* nothing here
ENDCASE
RETURN

PROCEDURE fox_alert
PARAMETER wzalrtmess
PRIVATE alrtbtn
m.alrtbtn=2
DEFINE WINDOW _qec1ij2t7 AT 0,0 SIZE 8,50 ;
FONT "MS Sans Serif",10 STYLE 'B' ;
FLOAT NOCLOSE NOMINIMIZE DOUBLE TITLE WTITLE()
MOVE WINDOW _qec1ij2t7 CENTER
ACTIVATE WINDOW _qec1ij2t7 NOSHOW
@ 2,(50-txtwidth(wzalrtmess))/2 SAY wzalrtmess;
FONT "MS Sans Serif", 10 STYLE "B"
@ 6,18 GET m.alrtbtn ;
PICTURE "@*HT \<Aceptar;\?\!\<Cancelar" ;
SIZE 1.769,8.667,1.333 ;
FONT "MS Sans Serif", 8 STYLE "B"
ACTIVATE WINDOW _qec1ij2t7
READ CYCLE MODAL
RELEASE WINDOW _qec1ij2t7
RETURN m.alrtbtn=1


PROCEDURE pdialog
DEFINE WINDOW _qjn12zbvh ;
AT 0.000, 0.000 ;
SIZE 13.231,54.800 ;
TITLE "Microsoft FoxPro" ;
FONT "MS Sans Serif", 8 ;
FLOAT NOCLOSE MINIMIZE SYSTEM
MOVE WINDOW _qjn12zbvh CENTER
ACTIVATE WINDOW _qjn12zbvh NOSHOW
@ 2.846,33.600 SAY "Salida:" ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 2.846,4.800 SAY "Imprimir:" ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 4.692,7.200 GET m.p_recs ;
PICTURE "@*RVN \<Registro actual;\<Todos los registros" ;
SIZE 1.308,18.500,0.308 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 4.692,36.000 GET m.p_output ;
PICTURE "@*RVN \<Impresora;\<Presentar" ;
SIZE 1.308,12.000,0.308 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 10.154,16.600 GET m.prnt_btn ;
PICTURE "@*HT I\<mprimir;\<Cancelar" ;
SIZE 1.769,8.667,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B"
ACTIVATE WINDOW _qjn12zbvh
READ CYCLE MODAL
RELEASE WINDOW _qjn12zbvh
RETURN


PROCEDURE loc_dlog
PRIVATE gfields,i
DEFINE WINDOW wzlocate FROM 1,1 TO 20,40;
SYSTEM GROW CLOSE ZOOM FLOAT FONT "MS Sans Serif",8
MOVE WINDOW wzlocate CENTER
m.gfields=SET('FIELDS',2)
IF !EMPTY(RELATION(1))
SET FIELDS ON
IF m.gfields # 'GLOBAL'
SET FIELDS GLOBAL
ENDIF
IF EMPTY(FLDLIST())
m.i=1
DO WHILE !EMPTY(OBJVAR(m.i))
IF ATC('M.',OBJVAR(m.i))=0
SET FIELDS TO (OBJVAR(m.i))
ENDIF
m.i = m.i + 1
ENDDO
ENDIF
ENDIF
BROWSE WINDOW wzlocate NOEDIT NODELETE ;
NOMENU TITLE C_BRTITLE
SET FIELDS &gfields
SET FIELDS OFF
RELEASE WINDOW wzlocate
RETURN


Carlos Miguel FARIAS

unread,
Mar 21, 2012, 5:01:18 PM3/21/12
to publice...@googlegroups.com
Y que tiene que ver como esta hecho el formulario con el reporte.
Cuando diseñas el reporte indicas donde queres imprimirlo, hace tanto que no armo un reporte en fox dos que no me acuerdo, pero no era tan dificil incorporar.
Saludos: Miguel, La Pampa (RA)

verum est oculos tuos

Dario_El_Cyber_Gaucho

unread,
Mar 22, 2012, 9:23:09 AM3/22/12
to publice...@googlegroups.com
Bien en otro hilo te comente que era sencillo, claro que pasa tambien
por si conoces tu aplicacion.

Te vas a el menu Ejecutar/Informes cuando se abre la ventana pones
nuevo, luego seleccionas la tabla que contiene el campo memo.

Te posicionas en el detalle del reporte.

En el menu Reporte seleccionas la opcion CAMPO.

Seleccionas el campo memo que sale de la tabla abierta anteriormente, (a
la IZquierda de tu pantalla) y listo el campo memo en un reporte.

Como te dijeron en una repuesta anterior nada tiene que ver la pantalla
de donde lo vas a ejecutar, si es importante que este seleccionada la
tabla o cursor a imprimir con el report.

Dario

Dario_El_Cyber_Gaucho_Rosario_Argentina

unread,
Mar 22, 2012, 9:36:51 AM3/22/12
to Comunidad de Visual Foxpro en Español
Es de destacar que lo que estas usando tambien el FPW 2.6...

Las variables que utilizas en el prg son solo de uso interno y manejo
de botones algunas para imprimir e indicar la salida por impresora o
pantalla.

NADA de esto tiene que ver con la confeccion del reporte el que ya te
explique como hacerlo.

Dario
Reply all
Reply to author
Forward
0 new messages