DEFINE REPORT (with filtered data)

Moderator: Rathinagiri

User avatar
SALINETAS24
Posts: 171
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 2 times
Been thanked: 3 times

Re: DEFINE REPORT (with filtered data)

Post by SALINETAS24 » Mon Apr 09, 2018 4:12 pm

Hola Andy, no tengo problemas de equipo ni de memoria, el problema es mio, llevo desde el 2000 si programar e igual voy un poco perdido. Como te digo tu solución me parece muy correcta, es más.., a la vista de como está desarrollado el REPORT creo que es la única solución y la mejor para poder imprimir un numero determinado de registros de una base de datos, felicidades.

Como estoy cambiando PRG de CLIPPER a HMG, he llegado a la creación de informes y lo que comento es que me gustaría que se implementará una solución desde la propia activación del REPORT, que me imagino que no podrá ser y pongo unas lineas de ejemplo de como lo tenia en un programa de Clipper 5,2 con una LIB "sptools".

Agradezco sinceramente tu solución, te hecho te la copio y la implemento.

Oye.., y aprovecho.

¿como puedo imprimir subtotales..?
Tengo que hacer un informe que va ordenado por dias, y por cada dia tengo que hacer un subtotal.
Para que queda algo así.


FECHA - ARTICULO - PEDIDO
13/04 - 001020001 - 10
13/04 - 0010200003- 12
13/04 - 0010200004 5
subtotal 27
20/04 - 00200200001 1
subtotal 1
TOTAL 28

Muchas gracias por vuestras enseñanzas y paciencia.

User avatar
andyglezl
Posts: 983
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 20 times
Been thanked: 41 times
Contact:

Post by andyglezl » Mon Apr 09, 2018 6:09 pm

Checa el ejemplo
HMG\3.4.4\SAMPLES\Controls\ReportAdvanced\REPORT_ADVANCED_1 a
HMG\3.4.4\SAMPLES\Controls\ReportAdvanced\REPORT_ADVANCED_8
trae un archivo de definicion demo.rmg de un reporte

O existe está otra forma

HMG\3.4.4\SAMPLES\Controls\ReportBasic
Andrés González López
Desde Guadalajara, Jalisco. México.

User avatar
SALINETAS24
Posts: 171
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 2 times
Been thanked: 3 times

Post by SALINETAS24 » Mon Apr 09, 2018 9:55 pm

Hola otra vez,me puedes ayudar.
cogi el programa de ejemplo "contactos" y modifique la impresión.
hice parte con tu codigo y parte con el mio.
pero cuando termina la impresión, si cierro el fichero MEM los datos del GRID me desaparecen, por el contrario si no lo cierro los datos del GRID siguen estando y me puedo mover de forma correcta, pero si le vuelvo a dar a la impresión entonces me de un error al existir el fichero MEM.
Creo que cuando hago el CLOSE se me cierran todos las DBF.
¿te ha pasado a ti.., ?
me puedes ayudar. gracias.


//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// ---> FUNCION PARA IMPRIMIR
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------

STATIC FUNCTION Imprime_ped(aField)
Local RecContactos , RecTipos, cAlias, cClase
Local nEnvio:=1

cClase:= Win_1.t_arti.Value

LPEDIDOS->(DBCLEARFILTER())
lPedidos -> ( DBSETORDER(2) )
lPedidos -> ( DbSeek(dtos( aField[1])+ cClase) )

*-------------------------------------------------------------
DBCREATE("mem:DBTemp", lPedidos->( DBSTRUCT() ),, .T., "MEMDATO")
*-------------------------------------------------------------

DO WHILE LPEDIDOS -> (!EOF()) .AND. LPEDIDOS->TIPO = cClase
* Msgbox(aField[1])
* msgbox(cClase)

MEMDATO->(DBAPPEND())
MEMDATO ->(lLockRec())
MEMDATO ->(FieldPut( 1, LPEDIDOS->FECHA_PE ) )
MEMDATO ->(FieldPut( 2, LPEDIDOS->ARTICULO ) )
MEMDATO ->(FieldPut( 3, LPEDIDOS->FECHA_SE ) )
MEMDATO ->(FieldPut( 4, LPEDIDOS->CANTIDAD ) )
MEMDATO ->(FieldPut( 5, LPEDIDOS->ESTADO ) )
MEMDATO ->(FieldPut( 6, LPEDIDOS->TIPO ) )
MEMDATO ->(UnLockRec())

LPEDIDOS->(dBSkip())
ENDDO

MEMDATO->(DbGoTop())

DO REPORT ;
TITLE 'INFORME PEDIDOS' ;
HEADERS {'','','',"","",""} , {'PEDIDO','ARTICULO','TIPO',"F.SERVICIO","CANTIDAD","ESTADO"};
FIELDS {'FECHA_PE','ARTICULO','TIPO',"FECHA_SE", "CANTIDAD","ESTADO"};
WIDTHS {10,10,10,10,5,5} ;
TOTALS {.F.,.F.,.F.,.F.,.t.,.f.} ;
WORKAREA MEMDATO ;
LPP 50 ;
CPL 80 ;
LMARGIN 5 ;
PREVIEW

* MEMDATO->(DBCloseArea()) //--> he probado dos formas de cerrar pero me en ambas
* CLOSE MEMDATO //--> me desaperencen los datos de grid
DBDROP("mem:DBTemp")

lPedidos -> ( DBSETORDER(1) )
Win_1.grid_1.RecNo := PEDIDOS->(RECNO())
Win_1.grid_1.Refresh


RETURN NIl

User avatar
SALINETAS24
Posts: 171
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 2 times
Been thanked: 3 times

Post by SALINETAS24 » Mon Apr 09, 2018 10:48 pm

Perdon por que tengo que volver a molestar. No entiendo bien el funcionamiento de MEM:DBTEMP
¿tengo alguna forma de saber si esta ya creado..?
Es para evitar que los datos del GRID me desaparezcan.
He probado con USED pero no funciona

gracias.

User avatar
andyglezl
Posts: 983
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 20 times
Been thanked: 41 times
Contact:

Post by andyglezl » Mon Apr 09, 2018 10:58 pm

La intencion de esto

DBCREATE("mem:DBTemp", lPedidos->( DBSTRUCT() ),, .T., "MEMDATO")

es crear una DB en memoria y agilizar su lectura, pero es como cualquier otra base de datos
física (.dbf), si la cierras, pues ya no tienes los datos.

La otra intención (en el caso del REPORT) es que solo era para generar el reporte con los registros generados
en ella. Ya que es lo que filtraste en el DO WHILE

Si deseas seguir manejando los datos en el GRID, no la cierres con ninguno de los siguientes:

*MEMDATO->(DBCloseArea()) //--> he probado dos formas de cerrar pero me en ambas
*CLOSE MEMDATO //--> me desaperencen los datos de grid
*DBDROP("mem:DBTemp")
Andrés González López
Desde Guadalajara, Jalisco. México.

User avatar
andyglezl
Posts: 983
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 20 times
Been thanked: 41 times
Contact:

Post by andyglezl » Mon Apr 09, 2018 11:42 pm

Esto debe de ser suficiente SOLO para genererar el REPORT con los registros
filtrados ( dtos( aField[1] ) + cClase )

Code: Select all

STATIC FUNCTION Imprime_ped(aField)
Local RecContactos , RecTipos, cAlias, cClase
Local nEnvio:=1

cClase:= Win_1.t_arti.Value 
lPedidos -> ( DBSETORDER(2) )
*-------------------------------------------------------------
DBCREATE("mem:DBTemp", lPedidos->( DBSTRUCT() ),, .T., "MEMDATO")
*-------------------------------------------------------------
APPEND FROM LPEDIDOS FOR LPEDIDOS->FECHA_PE + LPEDIDOS->TIPO = dtos( aField[1] ) + cClase

DO REPORT	;
TITLE 'INFORME PEDIDOS'	;
HEADERS {'PEDIDO','ARTICULO','TIPO',"F.SERVICIO","CANTIDAD","ESTADO"};
FIELDS {'FECHA_PE','ARTICULO','TIPO',"FECHA_SE", "CANTIDAD","ESTADO"};
WIDTHS {10,10,10,10,5,5} ;
TOTALS {.F.,.F.,.F.,.F.,.t.,.f.}	;
WORKAREA MEMDATO	;
LPP 50	;
CPL 80	;
LMARGIN 5	;
PREVIEW	

DBDROP("mem:DBTemp")

lPedidos -> ( DBSETORDER(1) )

RETURN NIl
Andrés González López
Desde Guadalajara, Jalisco. México.

User avatar
mustafa
Posts: 686
Joined: Fri Mar 20, 2009 11:38 am
Location: Alicante - Spain
Been thanked: 78 times

Post by mustafa » Tue Apr 10, 2018 10:46 am

Hola amigo SALINETAS24:
Mírate este Sample haber si te puede servir ?
pulsa a la izquierda algún registro y así quedarán seleccionados los Registros
parciales a imprimir y pulsa el Botón "Sales" también te calcula el precio
con el formato del Euro.

Che!! si fas eixida per a TORREVIEJA prenem unes "canyes"
Saludos
Mustafa
*-----------------------------------------------------Google -------------------------------------------------*
Hello friend SALINETAS24:
See this Sample have if it can serve you?
press any record to the left and the Records will be selected
partial to print and press the button "Sales" also calculates the price
with the format of the Euro.

regards
Mustafa
Attachments
Grid Price Euro.zip
(408.95 KiB) Downloaded 47 times

User avatar
SALINETAS24
Posts: 171
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 2 times
Been thanked: 3 times

Post by SALINETAS24 » Tue Apr 10, 2018 4:43 pm

Hola y muchas gracias.
Andy he conseguido imprimir 1 vez, pero cuando devuelvo el control al GRID y quiero volver a imprimir es cuando tengo problemas. Si no cierro me da un error ya que no ejecuta otra vez el DBCreate..., y si cierro pues entonces pierdo el GRID.

Mustafa, gracias lo usare, y me gusta como haces los colores del Grid.., y la "serveseta, per supost que la farem...". Un abraç.

User avatar
andyglezl
Posts: 983
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 20 times
Been thanked: 41 times
Contact:

Post by andyglezl » Tue Apr 10, 2018 6:47 pm

En realidad, sin ver tu programa o algún ejemplo funcional donde se pueda ver cual es
tu problema, es en vano estar suponiendo que es lo que ocurre y como lo estas haciendo.

Como ya se ha dicho varias veces aquí en el foro, para poder ayudar es necesario que se envie el
programa o ejemplo con sus archivos correspondientes en donde al compilarlo por cualquier miembro
del foro, se refleje el error o problema mencionado.
-----------------------------------------------------------------------------------------------------------------------------
Actually, without seeing your program or any functional example where you can see which one is
your problem, it is in vain to be assuming what is happening and how you are doing it.

As has already been said several times here in the forum, in order to help it is necessary to send the
program or example with its corresponding files where when compiled by any member
of the forum, reflect the error or problem mentioned.
Andrés González López
Desde Guadalajara, Jalisco. México.

User avatar
srvet_claudio
Posts: 2033
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 34 times
Been thanked: 143 times
Contact:

Post by srvet_claudio » Tue Apr 10, 2018 8:16 pm

SALINETAS24 wrote:
Tue Apr 10, 2018 4:43 pm
Andy he conseguido imprimir 1 vez, pero cuando devuelvo el control al GRID y quiero volver a imprimir es cuando tengo problemas. Si no cierro me da un error ya que no ejecuta otra vez el DBCreate..., y si cierro pues entonces pierdo el GRID.
Creo que el problema está ahí. El dbcreate lo debes ejecutar una sola vez por ej al inicio del programa, luego cuando llamas la rutina de imprimir en lugar de poner el dbcreate haces un
Delete all
Pack
En el archivo memdato para borrar todo su contenido antes de hacer el filtrado.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

Post Reply