Formulario con Preview y modificación

Hola qué tal. Te comento, estoy realizando un sistema en el que me piden que en un mismo formulario se pueda visualizar el documento final (la previsualización del reporte) y en otra parte del mismo formulario estén los controles

1 respuesta

Respuesta
1
¿Cuándo te refieres a controles te refieres a los controles del form o los del report?, bueno, asumo que te refieres a los del form, lo que entiendo es que quieres que se haga el preview en una ventana y en la otra ventana el form, bueno, para ello la cláusula REPOR FORM posee la opción IN WINDOWS nombre de ventana, puedes definir una ventana con DEFINE WINDOWS y luego lo mostrás ahí tu repor y listo, no entiendo cual es el objetivo de tu cliente debido a que el report tiene su propia ventana y se ejecuta siempre separado del form, si minimizas un repor veras tu form detrás, otra forma fácil es tener un form vacío con la opción showwindows=2 (como nivel superior), luego ese form ejecuta el reporte y estará en la ventana en forma separada
La idea es tener la previsualización y los controles del form en la misma ventana, de lo que se trata es de poder realizar una cambio y casi al mismo tiempo visualizar el resultado; esto se debe a que tiene que revisar y corregir muchos dictámenes (en esta primera etapa son aprox. 43 mil), pero como son abogados (nadie es perfecto ;-) ), para ellos el hecho de que puedan ver el resultado final de toda la información que están generando, les da certeza en sus dictámenes. (También intenté convencerlos de que no era necesario, pero el que paga ordena).
Disculpa si me extiendo en la explicación pero es para aclarar lo más posible y de éste modo me puedas orientar.
Pues lo que estoy haciendo es:
*Creo mi reporte.
El reporte debe de presentar la información justificada, así que lo creo a partir de una clase en la cual ya tengo el procedimiento para que muestre los textos justificados.
lparameters oRef
rl =newobject("FullJustifyListener","progs\FJListener.prg")
rl.ListenerType = 3
SET REPORTBEHAVIOR 90
REPORT FORM dictamen_just.frx OBJECT m.rl
*Ahora por código puedo mostrar el reporte dentro de un control Shape
x = newobject("myPreview")
x.Listener = m.rl
x.Show(1)
*Creo el formulario en donde voy a mostrar el reporte
define class myFrame as Container
Width = 296
Height = 372
Left = 12
Top = 12
SpecialEffect = 1
BackColor = rgb(192,192,192)
add Object target as myTarget
enddefine
define class myTarget as Shape
Height = 330
Width = 255
Left = 20
Top = 20
BackColor = rgb(255,255,255)
procedure MouseDown
lparameters nButton, nShift, nXCoord, nYCoord
offsetX = m.nXCoord - THIS.Left
offsetY = m.nYCoord - THIS.Top
THISFORM.MousePointer = 5
do while mdown()
THIS.Left = mcol(0,3) - m.offsetX
THIS.Top = mrow(0,3) - m.offsetY
enddo
THISFORM.MousePointer = 0
endproc
enddefine
define class myPreview as Form
Width = 420
Height = 395
BorderStyle = 1
WindowType = 0
add object frame as myFrame
add object cmdClose as myButton ;
with Top=220, Caption = "Close"
Listener = .null.
PageNo = 1
procedure Outputpage()
with THIS
if not isnull(.Listener) and .Listener.PageTotal > 0
.Listener.OutputPage( ;
.PageNo, .Frame.Target, 2, ;
0, 0 , 0 , 0 , ;
.Frame.Left +2, ;
.Frame.Top +2, ;
.Frame.Width -4, ;
.Frame.Height -4 )
.Caption = ;
justfname(.Listener.commandClauses.file) ;
+ " - page " + trans(.PageNo)
endif
endwith
endproc
procedure Paint()
THIS.OutputPage()
endproc
procedure cmdClose.Click
THISFORM.Release()
endproc
procedure SetReport( oRef )
if not isnull(oRef) and vartype(oRef) = "O"
THIS.Listener = m.oRef
else
THIS.Listener = .null.
THIS.Hide()
endif
endproc
procedure QueryUnload()
nodefault
THIS.Release()
endproc
procedure Release()
if not isnull(THIS.Listener)
THIS.Listener.OnPreviewClose(.F.)
THIS.Listener = .null.
endif
THIS.Hide()
endproc
procedure Destroy()
THIS.Listener = null
dodefault()
endproc
enddefine
define class myButton as CommandButton
FontName = "Tahoma"
FontSize = 8
Width = 84
Height = 27
Left = 320
enddefine
*** Al momento de llamar a mi reporte me lo muestra dentro del control Shape y lo puedo mover sin ningún problema, ahora bien, yo quisiera manejarlo de dos modos:
1. Crear un formulario con el (asistente para formularios) y utilizar la mitad de éste para previsualizar el reporte y en la otra mitad tener los controles que me permitan modificar los datos (no sé si esto sea posible), por lo pronto me he encontrado con lo siguiente:
a) Al momento de llamar a mi formulario (creado con el asistente), y aunque estén
Declarados todos los métodos y propiedades, al momento de llamar a la
Función OutPutPage() me manda el error de que no existe la propiedad .PageNo (lo
Cual tiene lógica ya que no es una propiedad del formulario sino de ReportListener)
2. Crear el formulario por código y utilizar la mitad de éste para previsualizar el reporte y en la otra mitad tener los controles que me permitan modificar los datos, peeeroo
a) Al crear mi formulario, como va a tener otros controles (grid, checkbox, option
button, Text, etc.) necesito cargar el entorno de datos. Lo estoy haciendo de la
siguiente forma: Como ya tengo un formulario con los controles que necesito y
completamente funcional, guarde éste formulario como una clase, ahora lo que
necesito es cargar el entorno de datos (que ya tengo también definido en otra
clase).
Por el momento es lo que llevo, la verdad no sé si lo estoy haciendo de manera correcta, pero mi cliente tiene esa necesidad (de poder hacer las dos cosas casi al mismo tiempo).
Espero me puedas orientar, corregir, regañar, apoyar o lo que sea; porque YA ME EMPIEZO A SENTIR SOLO.
Gracias.
Creo que vas por el camino correcto, pero quisiera hacerte una pregunta, ¿has planteado a tu cliente previsualizar el contenido en un control RichText?, solo pregunto para que des una ojeada por ella, sino, olvida lo que te dije y me avisas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas