GRID RELEASE O HIDE ?

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
LOUIS
Posts: 209
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

GRID RELEASE O HIDE ?

Post by LOUIS »

Hola amigos, aquí con un problemilla esperando vuestra generosa ayuda ...

Dentro de una ventana tengo el Grid1 para llenar los datos de una Factura, cuando en el campo del código del producto digito el mismo correctamente, todo ok; pero si no sé el código del producto, digito algún código que no existe para que se abra el Grid2 donde puedo ver los códigos, productos y precios ...

El primer problema es que el focus no pasa al Grid2, tengo que pasar con alt+tab o con el mouse, luego busco de arriba abajo el producto que deseo, pero no sé cómo si con ENTER o con ESCAPE cerrar el Grid2 y volver al Grid1 y que a la vez capture el código, el nombre y el precio y los pase automáticamente al Grid1 ...

Si sigo incrementando productos a la factura y nuevamente no sé el código, ahí da el error de que el Grid2 Already defined !!!

De antemano muchas gracias.
Attachments
ERROR.JPG
ERROR.JPG (69.33 KiB) Viewed 3922 times
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

GRID RELEASE O HIDE ?

Post by Pablo César »

LOUIS wrote:El primer problema es que el focus no pasa al Grid2, tengo que pasar con alt+tab o con el mouse
:o

Hola Louis, es muy dificil ayudar siin código ejemplo... tienes que poner el código y que uno pueda compilar-lo para ver donde erraste...

Intentaré ayudarte, pero vuelvo a repetir: muy dificil sin demo...
LOUIS wrote:luego busco de arriba abajo el producto que deseo, pero no sé cómo si con ENTER o con ESCAPE cerrar el Grid2 y volver al Grid1 y que a la vez capture el código, el nombre y el precio y los pase automáticamente al Grid1 ...
Y que tal si le pones un botón de "encerrar" o "volver" y llamas a una funcion donde antes de encerrar la ventana del Grid2 atribuya un valor a una variable publica. Eso antes de encerrar la ventana. Tambien puedes encerar la ventana o esconderla. Y del otro lado (GIRD1) obtienes con GetPropety el valor del código que precisas.
LOUIS wrote:... nuevamente no sé el código, ahí da el error de que el Grid2 Already defined !!!
Debe ser porque abres una ventana que ya está definida. Puedes esconderla y mostrarla.
Fijate lo que Roberto dice sobre eso: http://hmgforum.com/viewtopic.php?p=47532#p47532

La verdad que la idea dél es genial. Pero pocos de nosotros la usamos (somos todos cabezas duras)...

Espero haberte ayudado en algo. Pero acostumbrate a poner código mijo...
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
LOUIS
Posts: 209
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: GRID RELEASE O HIDE ?

Post by LOUIS »

Amigo Pablo, gracias por responder ... adjunto un rar donde va el prg el hbp y 2 dbf
Para empezar a alimentar la factura (GRID_1), favor pulsar Alt+A
En BD poner 99 y en CODIGO cualquier numero para que abra la segunda dbf (GRID_2)

Compilo con 3.0.46

Gracias por revisar esto ...
Attachments
GRID_VTAS.rar
(15.67 KiB) Downloaded 172 times
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

GRID RELEASE O HIDE ?

Post by Pablo César »

Hola Louis,

Intenté de varias formas hacer funcionar tu ejemplo. Pero no tengo mucha experiencia con ROWSOURCE. En verdad no me gusta usarlo directamente en el DBF con Grids ni con ningun control. Y mucho menos con 2 grids.

Creo que tendrás que elaborar más esa inclusion, ya que con Alt + A estarias usando un APPEND prero no físico en el DBF. Y si usas Alt + A el usuário tambien tendrás que usar:

ALT + D --> Delete
ALT + R --> ReCall
ALT + S --> Save (On Save)
ALT + U --> ClearBuffer

Me parece que todo muy complicado para el usuário todo eso. Yo lo haria comenzando por el primer GRID de forma virtual. Abriria el grid con array, porque por lo que se vé es un PEDIDO y todo pedido empieza de cero (no necesariamente extricto pero por lo general si). Entonces empiezo el array del cero. Sin registros. Despues si quiero consultar otro grid, puede ser ROWSOURCE pero yo lo haria en otra ventana. Aunque sigo en mi linea de evitar al máximo el uso de ROWSOURCE. Porque mismo que el segundo grid sea para visualizar las piezas, bien que podrias visualizar con un virtual grid con apenas registros filtrados. Sea por descripcion de la pieza, sea por fabricante de la pieza, o sea por la composicion de la mascara del código. Hay inúmeras posibilidades. Muy laborioso todo. Creo que abrir un banco de datos completo, no es tan necesário (la mayoria de las veces). Si aún decides trabajar con ROWSOURCE, deberias utilizar de forma indexada.

Otra cosa que es importante que entiendas. Que trabajar en GUI (programacion gráfica, estilo Windows en este caso). No es hecha de forma secuencial como lo hacias en Clipper. Todo es un objeto. Y no todo (mejor dicho casi nada) trabaja en forma de secuencia. Un formulario (screen), un grid, todo trabaja indepediente. Puedes cerrar, puede desaparecer, pero generalmente mantienes todo abierto para que sea consultado. A veces puedes cerrarlo y abrilo como pretendes. Pero no de la forma que quieres. Estás validnado algo con algo abierto... muy dificil de contralar con que tiene que ser controlado y encima validado.

Bueno Louis, pensé que mismo con el código yo podria cambiar algunas cositas nomás. Pero por lo visto es un trabajo grande. O al menos yo no sé resolverte con tu mismo código. Pero espero que mis consejos te hayan servido de algo.

Otro consejo, muy importante: pasá a usar la ultima version HMG. Por ahora es la 3.4.3 (no usé las versiones viejas).
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
LOUIS
Posts: 209
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: GRID RELEASE O HIDE ?

Post by LOUIS »

Estimado Amigo Pablo :

El problema es que no entiendo muy bien esos Array (ni lo virtual :oops: ), mis inicios fueron en Fox y de ahí pasé a Clipper siempre en modo procedural.

Si me ayudases con un ejemplo para pasar de la primera dbf a la segunda y capturar los datos para ponerlos en la primera ... sería fantástico.

Disculpad si os pido mucho :roll:

Se os agradece.

Code: Select all

#include <hmg.ch>

Function Main

PUBLIC COD,NOM,PVP
QU=''

	* Grid Column Controls Definitions

	aCtrl_1 := {'TEXTBOX','CHARACTER','99'}
	aCtrl_2 := {'TEXTBOX','CHARACTER'}
	aCtrl_3 := {'TEXTBOX','CHARACTER'}
	aCtrl_4 := {'TEXTBOX','NUMERIC','99999.99'}
	aCtrl_5 := {'TEXTBOX','NUMERIC','99999.99'}
	aCtrl_6 := {'TEXTBOX','NUMERIC','99.99'}
	aCtrl_7 := {'TEXTBOX','NUMERIC','99999.99'}

SELE 1
	USE FACTURA
SELE 2
	USE ITEMS
SELE 1
	GOTO TOP

   DEFINE WINDOW SAMPLE AT 0,0 WIDTH 1280 HEIGHT 768 MAIN
      @ 00,0 LABEL Label_1 PARENT SAMPLE VALUE "GENERANDO UNA FACTURA DE VENTA" WIDTH 1280 HEIGHT 768 FONT "CALIBRI" SIZE 48 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
      @ 64,0 LABEL Label_2 PARENT SAMPLE VALUE "PRINCIPAL DE PRODUCTOS        DETALLE DE LA FACTURA    " WIDTH 1280 HEIGHT 704 FONT "CALIBRI" SIZE 36 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE

      @ 115,575 GRID GRID_1 PARENT SAMPLE ;
        WIDTH 700 HEIGHT 658 ;
	HEADERS {'BD','C O D I G O','D E S C R I P C I O N','CANT.','PRECIO','DSCTO %','A PAGAR'} ;
        WIDTHS {30,99,275,70,70,70,70} ;
	COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 , aCtrl_7 } ;
        COLUMNVALID { {|| .t. }, {|| X1() }, {|| X2() }, {|| .t. }, {|| X3() }, {|| .t. }, {|| .t. } } ;
	ROWSOURCE "FACTURA" ;
	COLUMNFIELDS {'BD','CODIGO','DETALLE','CANTIDAD','PRECIO','DSCTO','TOTAL'} ;
	FONTCOLOR {160,240,20} ;
	BACKCOLOR {0,100,180} ;
        EDIT ;
	ALLOWAPPEND ;
	ALLOWDELETE 

   END WINDOW

   sample.activate

commit
USE
SELE 2			&& ITEMS
USE
release all like *

   RETURN

*-------------
Procedure X1()

QU = ALLTRIM(THIS.CELLValue)
QU = ALLTRIM(QU)

SELE 2				&& ITEMS
GOTO TOP
LOCA FOR CODIGO=QU

IF FOUN()
*OK
 ELSE
   MSGINFO ('CODIGO NO EXISTE !!!')
   GOTO TOP
   @ 115,0 GRID GRID_2 PARENT SAMPLE ;
    WIDTH 570 HEIGHT 658 ;
    HEADERS {'CODIGO','D E S C R I P C I O N','S T O C K','PRECIO'} ;
    WIDTHS {100,300,70,100} ;
    ROWSOURCE "ITEMS" ;
    FONTCOLOR {160,240,20} ;
    BACKCOLOR {0,100,180} ;
    COLUMNFIELDS {'CODIGO','NOMBRE','STOCK','PRECIO'}

ENDIF

NOM=NOMBRE
MSGINFO ('&NOM')
COD=CODIGO
PVP=PRECIO

SELE 1				&& FACTURA
This.CellValue := COD

Return

*-------------
Procedure X2()

IF Empty ( This.CellValue )
   This.CellValue := NOM
ENDIF

RETURN

*---------------
Procedure X3()

IF Empty ( This.CellValue )
   This.CellValue := PVP
ENDIF

RETURN
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

GRID RELEASE O HIDE ?

Post by Pablo César »

Hola Louis, disculpame pero no tengo ese tiempo.

Podria aprender a dominar los arrays. Olvidate sobre Grid virtual (no era eso que queria decir) sinó que hicieras pruebas con Grid con array. hay vários ejemplos em controls\grid.

Este em particular mezcla 2 grid (rowsource con grid de arrays):

C:\hmg.3.4.3\SAMPLES\Miscellaneous\PEDIDOS
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
LOUIS
Posts: 209
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: GRID RELEASE O HIDE ?

Post by LOUIS »

Estimados Amigos:

He modificado el código para hacerlo "funcional" a mi manera como diría Frank Sinatra :) , sin embargo, si alguien de Uds. desea mejorarlo sería muy bueno para aprender otra opción :geek:

Code: Select all

#include <hmg.ch>

Function Main

SET CENT ON
SET DATE FREN

PUBLIC COD,NOM,PVP
PASE=0
QU=''
FACT='001001000012345'
CLI='1234567890123'
VEN='123'
FEC=DTOC(DATE())

	aCtrl_1 := {'TEXTBOX','CHARACTER','99'}
	aCtrl_2 := {'TEXTBOX','CHARACTER'}
	aCtrl_3 := {'TEXTBOX','CHARACTER'}
	aCtrl_4 := {'TEXTBOX','NUMERIC','99999.99'}
	aCtrl_5 := {'TEXTBOX','NUMERIC','99999.99'}
	aCtrl_6 := {'TEXTBOX','NUMERIC','99.99'}
	aCtrl_7 := {'TEXTBOX','NUMERIC','99999.99'}

SELE 1
	USE FACTURA
SELE 2
	USE ITEMS
SELE 1
	GOTO TOP

   DEFINE WINDOW SAMPLE AT 0,0 WIDTH 1280 HEIGHT 768 MAIN NOCAPTION
      @ 00,0 LABEL Label_1 PARENT SAMPLE VALUE "GENERANDO UNA FACTURA DE VENTA" WIDTH 1280 HEIGHT 768 FONT "CALIBRI" SIZE 48 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
      @ 64,0 LABEL Label_2 PARENT SAMPLE VALUE "PRINCIPAL DE PRODUCTOS        DETALLE DE LA FACTURA    " WIDTH 1280 HEIGHT 704 FONT "CALIBRI" SIZE 36 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE

      @ 115,575 GRID GRID_1 PARENT SAMPLE ;
        WIDTH 700 HEIGHT 658 ;
	HEADERS {'BD','C O D I G O','D E S C R I P C I O N','CANT.','PRECIO','DSCTO %','A PAGAR'} ;
        WIDTHS {30,99,275,70,70,70,70} ;
	COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 , aCtrl_7 } ;
        COLUMNVALID { {|| .t. }, {|| X1() }, {|| X2() }, {|| .t. }, {|| X3() }, {|| .t. }, {|| .t. } } ;
	ROWSOURCE "FACTURA" ;
	COLUMNFIELDS {'BD','CODIGO','DETALLE','CANTIDAD','PRECIO','DSCTO','TOTAL'} ;
	FONTCOLOR {160,240,20} ;
	BACKCOLOR {0,100,180} ;
        EDIT ;
	ALLOWAPPEND ;
	ALLOWDELETE 

   ON KEY ESCAPE ACTION FIN()

   END WINDOW

   sample.activate

   RETURN

*----------------
Procedure FIN()

commit
USE
SELE 2			&& ITEMS
USE
release all like *

USE FACTURA
   IF FLOCK()
      REPLA ALL FACTURA WITH FACT FOR EMPT(FACTURA)
      REPLA ALL FECHA WITH DATE()
      REPLA ALL TOTAL WITH CANTIDAD*PRECIO*(100-DSCTO)/100
      REPLA CLIENTE WITH CLI FOR EMPT(CLIENTE)
      REPLA VENDEDOR WITH VEN FOR EMPT(VENDEDOR)
   ENDIF
SUM ALL CANTIDAD*PRECIO TO VALO1
SUM ALL CANTIDAD*PRECIO*DSCTO/100 TO VALO2
VALO3 := VALO1-VALO2
VALO4 := (VALO1-VALO2)*.14
SUM ALL TOTAL TO VALO5
VALO5 := VALO5+VALO4
CLOS ALL
SAMPLE.hide

DEFINE WINDOW SAMPLE2 AT 0,0 WIDTH 1280 HEIGHT 768 NOCAPTION
   @ 000,0 LABEL Label_1  PARENT SAMPLE2 VALUE "RESUMEN DE LA FACTURA DE VENTA # &FACT" WIDTH 1280 HEIGHT 768 FONT "CALIBRI" SIZE 36 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 100,0 LABEL Label_2  PARENT SAMPLE2 VALUE "FECHA: &FEC" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 140,0 LABEL Label_3  PARENT SAMPLE2 VALUE "CLIENTE: &CLI" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 180,0 LABEL Label_4  PARENT SAMPLE2 VALUE "VENDEDOR: &VEN" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 240,000 LABEL Label_5  PARENT SAMPLE2 VALUE "VALOR BRUTO:" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 240,250 LABEL Label_M  VALUE (Transform(VALO1,'$99,999,999.99')) FONT "TAHOMA" SIZE 24 FONTCOLOR YELLOW BOLD WIDTH 250 HEIGHT 120 TRANSP
   @ 280,000 LABEL Label_6  PARENT SAMPLE2 VALUE "DESCUENTO:" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 280,250 LABEL Label_N  VALUE (Transform(VALO2,'$99,999,999.99')) FONT "TAHOMA" SIZE 24 FONTCOLOR YELLOW BOLD WIDTH 250 HEIGHT 120 TRANSP
   @ 320,0 LABEL Label_7  PARENT SAMPLE2 VALUE "----------------------------------------------" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 360,000 LABEL Label_8  PARENT SAMPLE2 VALUE "SUBTOTAL:" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 360,250 LABEL Label_O  VALUE (Transform(VALO3,'$99,999,999.99')) FONT "TAHOMA" SIZE 24 FONTCOLOR YELLOW BOLD WIDTH 250 HEIGHT 120 TRANSP
   @ 400,000 LABEL Label_9  PARENT SAMPLE2 VALUE "IMPUESTO:" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 400,250 LABEL Label_P  VALUE (Transform(VALO4,'$99,999,999.99')) FONT "TAHOMA" SIZE 24 FONTCOLOR YELLOW BOLD WIDTH 250 HEIGHT 120 TRANSP
   @ 440,0 LABEL Label_10 PARENT SAMPLE2 VALUE "----------------------------------------------" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 480,000 LABEL Label_11 PARENT SAMPLE2 VALUE "TOTAL A COBRAR:" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   @ 480,250 LABEL Label_Q  VALUE (Transform(VALO5,'$99,999,999.99')) FONT "TAHOMA" SIZE 24 FONTCOLOR YELLOW BOLD WIDTH 250 HEIGHT 120 TRANSP
   @ 520,0 LABEL Label_12 PARENT SAMPLE2 VALUE "=============================" WIDTH 1280 HEIGHT 30 FONT "CALIBRI" SIZE 24 BOLD ITALIC FONTCOLOR WHITE BACKCOLOR BLUE
   ON KEY ESCAPE ACTION FIN2()
END WINDOW

   sample2.activate

   RETURN

*---------------
Procedure FIN2()

SAMPLE2.RELEASE
SAMPLE.RELEASE

RETURN

*---------------
Procedure X1()

QU = ALLTRIM(THIS.CELLValue)
QU = ALLTRIM(QU)

SELE 2				&& ITEMS
GOTO TOP
LOCA FOR CODIGO=QU

IF FOUN()
*OK
 ELSE
   MSGINFO ('CODIGO NO EXISTE !!!')
   GOTO TOP
IF PASE=0
   @ 115,0 GRID GRID_2 PARENT SAMPLE ;
    WIDTH 570 HEIGHT 658 ;
    HEADERS {'CODIGO','D E S C R I P C I O N','S T O C K','PRECIO'} ;
    WIDTHS {100,300,70,100} ;
    ROWSOURCE "ITEMS" ;
    FONTCOLOR {160,240,20} ;
    BACKCOLOR {0,100,180} ;
    COLUMNFIELDS {'CODIGO','NOMBRE','STOCK','PRECIO'}

PASE=1
ENDIF
ENDIF

NOM=NOMBRE
MSGINFO ('&NOM')
COD=CODIGO
PVP=PRECIO

SELE 1				&& FACTURA
This.CellValue := COD

Return

*---------------
Procedure X2()

IF Empty ( This.CellValue )
   This.CellValue := NOM
ENDIF

RETURN

*---------------
Procedure X3()

IF Empty ( This.CellValue )
   This.CellValue := PVP
ENDIF

RETURN
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

GRID RELEASE O HIDE ?

Post by Pablo César »

Hola Louis,

No me gusta entregar algo asi inacabado y más por la idea que uno tiene que entregar la caña de pescar: no el pescado...

Debes dominar. Esto no es una buena forma de empezar. Tienes que conocer HMG. Empieza por entender los SAMPLES, te vá ayudar mucho.

Te entrego de la forma que yo lo haria. Claro hay mucho que hacer... pero con dos condiciones:

1. Usá la ultima version 3.4.3 por favorrrrr...
2. Disponibilizálo, cuando lo termines

Fijate el contenido de los archivo forms (los fmg). Puedes transpasarlos a tu código PRG. Pero de esta forma es mejor cuando tienes que arreglar/posicionar los controles... Me puse en poco tiempo, usá la IDE para crear ventanas de mejor calidad.

Espero que te guste. Me debes un Arroz marinero // Arroz con mariscos, cuando vaya algun dia a Ecuador, te lo voy a cobrar (eso si vives en la costa)... :lol:
Attachments
GRID_VTAS.rar
Source Files
(18.01 KiB) Downloaded 177 times
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
LOUIS
Posts: 209
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: GRID RELEASE O HIDE ?

Post by LOUIS »

OK MR PABLO, SERÁ UN GUSTO CONOCERLO E INVITARLO :D
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

GRID RELEASE O HIDE ?

Post by Pablo César »

Si, será un gusto para mi tambien. Pero estaba embromando sobre el arroz marinero.

Los mariscos y el preparado se ve muy bien en las fotos...

No me dijiste si está a tu gusto el código o si erias empezar con 3.4.3
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
Post Reply