GET y READ Vs TEXTBOX

HMG en Español

Moderator: Rathinagiri

Post Reply
SALINETAS24
Posts: 79
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 1 time
Been thanked: 1 time

GET y READ Vs TEXTBOX

Post by SALINETAS24 » Thu Jun 14, 2018 9:40 pm

Hola, tengo una aplicación CLIPPER que utilizo para dar de alta las cuentas de Mayor de Plan Contable y tiene el siguiente código.

Code: Select all

	@ 1,1 GET xCuenta PICTURE "#########"
	READ
	IF !EMPTY(xCuenta)
	    FOR nFor=1 TO MIN(4,LEN(ALLTRIM(xCuenta)))
	   	  aField[1]=SUBSTR(xCuenta,1,nFor)+SPACE(10-nFor)
                  @ nFor+5,1 SAY aField[1]
                  @ nFor+5,12 GET aField[2]  PICTURE "@S25"
                  READ
                  // -->  y ahora actualizo registro
                  // ....
            NEXT
         ENDIF
Osease, si el usuario introduce la cuenta 430000001, el programa le pedira la cuenta 4, la 43, la 430 y la 4300.

Puen no consigo hacerlo en HMG, supongo que lo facil es hacer una nueva declaración de una Windows para cada uno de ellos, pero no es eso lo que quiero. Me gustaría mostrarlo en la misma pantalla.

Code: Select all


DEFINE WINDOW Win_1				;
		AT 0,0					;
		WIDTH 800				;
		HEIGHT 360				;
		TITLE 'Mantenimiento de Cuentas';	
		MODAL   				;
		BACKCOLOR   COLOR_P 
		
		@ 96 , 405 TEXTBOX GET_1 WIDTH 85 VALUE aField[1] MAXLENGTH 10;
					ON ENTER (Graba_macu(this.value))
				
		@ 136 , 490 TEXTBOX GET_3 WIDTH 270 VALUE aField[2] MAXLENGTH 30
		@ 166 , 490 TEXTBOX GET_4 WIDTH 270 VALUE aField[2] MAXLENGTH 30 
		@ 196 , 490 TEXTBOX GET_5 WIDTH 270 VALUE aField[2] MAXLENGTH 30
		@ 226 , 490 TEXTBOX GET_6 WIDTH 270 VALUE aField[2] MAXLENGTH 30	
		
		Desact_Gets()     //-> ACTIVAMOS SOLO EL PRIMER TEXTBOX
		CENTER WINDOW Win_1
		ACTIVATE WINDOW Win_1
RETURN

//--------------------
STATIC FUNCTION  Desact_Gets
LOCAL n, cn

	For n=1 to 6
		cn="GET_"+str(n,1)
		Win_1.&cn..Enabled := .F.
	NEXT
	Win_1.GET_1.Enabled		:= .T. 
	Win_1.GET_1.SetFocus
	
RETURN Nil

// -------------------------------------------------------------
// --> ACTULIZA EL REGISTRO - GRABA
// -------------------------------------------------------------
STATIC FUNCTION Graba_macu(xcuenta)
	Local nNuevoRecNo, cn, n
	Local cCuenta

	IF !empty(xCuenta)
		Win_1.GET_1.Enabled		:= .F.
		Win_1.GET_2.Enabled		:= .F.
	
		//--> Graba niveles de 1 al 4
		// ESTO SERIA EL GET DE CLIPPER DENTRO DE UN BUCLE FOR/NEXT
		// Pero no se para 
		FOR nFor=1 TO MIN(4,LEN(ALLTRIM(xCuenta)))
			cng="GET_"+str(nFor+2,1)
			//--> SI NO EXISTE TENGO QUE PEDIR Y GRABAR.
			Win_1.&cng..Show
			Win_1.&cng..Enabled		:= .T.
			Win_1.&cng..SetFocus
	       		Win_1.&cng..Enabled		:= .F.
		NEXt
	ENDIF

	

RETURN Nil


Alguna idea de como salir del entuerto...
Gracias de antemano

User avatar
andyglezl
Posts: 930
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 13 times
Been thanked: 36 times
Contact:

Post by andyglezl » Thu Jun 14, 2018 11:43 pm

No entendía tu pregunta porque no veo relacion en el título de tu post
con lo que deseas...


Recuerdas este Post que tiene otro Post...

viewtopic.php?f=24&t=5646&p=55106&hilit=for+next#p55106
Andrés González López
Desde Guadalajara, Jalisco. México.

SALINETAS24
Posts: 79
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 1 time
Been thanked: 1 time

Post by SALINETAS24 » Fri Jun 15, 2018 9:28 am

Hola Andy y gracias por tu colaboración.
Si que recuerdo el post, pero lo que quiero ahora es activar de manera secuencial el Textbox.
Utlizando un bucle que va desde 1 hasta 4, igual que hacia en Clipper como en el primer ejemplo. El objeto es que el sistema pida al usuario 4 títulos para el desglose de una cuenta introducida previamente.
Si el usuario en el primer Textbox introduce la cuenta 43000001 cuya descripcion sera CLIENTES VARIOS, seguidamente el sistema pedirá la cuenta 4 el usuario pondrá CLIENTES Y PROVEEDORES. Después la cuenta 43 y el usuario pondra CLIENTES... la 430.. y por ultimo la 4300..
No se si ahora me he explicado mejor...
Saludos desde Petrer City

EduardoLuis
Posts: 558
Joined: Tue Jun 04, 2013 6:33 pm
Location: Argentina
Been thanked: 33 times

Post by EduardoLuis » Fri Jun 15, 2018 1:54 pm

Hola Salinetas:

Me permito recomendarte que para pasar tus aplicaciones a HMG, descartes los modos o procedimientos que utilizabas en Clipper, en primer término porque HMG posee controles y funciones que no existen en Clipper, y además porque HMG apunta a un entorno gráfico que Clipper no poseia.- Esto importa que, la metodología de diseño de una aplicación es ahora con HMG mucho mas sencilla y al mismo tiempo mas poderosa.-
Yendo a tu consulta, creo que el método mas conveniente es utilizar un control COMBOBOX que contiene ó exhibe el numero de la cuenta y su especificación.- Así el usuario en un solo acto selecciona la cuenta específica que desea editar ó visualizar.-
El control COMBOBOX lo asocias a la tabla de datos de cuentas y a un conjunto de TEXTBOX que le exhiban y en su caso le permita - si el usuario lo desea - editar el contenido y actualizar la tabla.- Todo esto lo puedes ubicar en una misma pantalla.-
El control COMBOBOX, asimismo, debe estar asociado a una función por la cual ante cualquier cambio que efectue el usuario actualiza el contenido de los TEXTBOX.-

Los campos de texto, deben estar siempre READONLY := .T. o ENABLED := .F.
Debes agregar un botón para que el usuario pulse si desea editar esos campos de TEXTO, y otros eventualmente para grabar la actualización o cancelarla.-

Al pulsar el botón editar, debes pasar a READONLY := .F. ó ENABLED := .T. los campos de texto.-
Al pulsar el botón grabar o cancelar, debes pasar a READONLY := .F. ó ENABLED := .F. los campos de texto.-

A modo de ejemplo:

@ 308,110 COMBOBOX COMBO_PROF ;
WIDTH 220 ;
HEIGHT 100 ;
ITEMSOURCE CUENTAS->NROCTA , CUENTAS->NOMBRECTA ;
FONT "Arial" SIZE 9 ;
BOLD ;
ON CLOSEUP seledata_cta() ;
ON CHANGE seledata_cta()


FUNCTION SELEDATA_CTA
nu_cuenta := 0
nu_cuenta := Form_W01.COMBO_PROF.Value
cuentas->(dbgoto(nu_cuenta))

FORM_W01.TEXTO1.VALUE := cuentas->nrocta
FORM_W01.TEXTO2.VALUE := cuentas->nombrecta
FORM_W01.TEXTO3.VALUE := SUBSTR(cuentas->nrocta , 1, 4 ) // toma los 4 primeros caracteres
FORM_W01.TEXTO4.VALUE := SUBSTR(cuentas->nrocta , 5, 2 ) // toma los siguientes 2 caracteres
FORM_W01.TEXTO5.VALUE := RIGHT(cuentas->nrocta , 5) // toma los ultimos cinco caracteres
RETURN

Espero que esta alternativa te ayude.-
Cordialmente
Eduardo

User avatar
dragancesu
Posts: 542
Joined: Mon Jun 24, 2013 11:53 am
DBs Used: DBF, MySQL, Oracle
Location: Subotica, Serbia
Has thanked: 11 times
Been thanked: 97 times

Post by dragancesu » Fri Jun 15, 2018 2:55 pm

There's one proverb "when you're in Rome be Roman"

Me too like some things in the clipper, but everything can be done in HMG

I think it's better if you stop thinking about how you worked in the clippers, and you start thinking about how to do it in HMG

SALINETAS24
Posts: 79
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 1 time
Been thanked: 1 time

Post by SALINETAS24 » Fri Jun 15, 2018 4:37 pm

Vaya....tengo que cambiar el modo de pensar.... jajaja.
Muchas gracias

Post Reply