Amigos del foro, buenas tardes:
En una aplicación necesito un PICTURE algo especial, trataré de explicarme, por ejemplo cuando recibimos números con decimales en un get usamos un picture así "@Z 999,999.999", cuando el usuario necesita registrar solo fracciones digamos .300 pues simplemente teclea el punto luego el 3 y puede o no teclear los 0, [x]Harbour se encarga de llenarlo correctamente y queda así .300, como es de esperarse.
Pues bien yo necesito usar un picture de este tipo "999-999" entonces para registrar 001-001 el usuario debería teclear solamente 1-1 y que el programa haga los ajustes, así el usuario se ahorra teclear los 0, ojalá me haya explicado.
Saludos
Crear un PICTURE especial
Crear un PICTURE especial
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Hola Armando:
Se me ocurre que hagas una funcion que se ejecute en el valid del get ,
en esta funcion rellenas el picture , por ejemplo:
La pense a la rápida, pero deberia funcionar , es solo una idea
Saludos
Se me ocurre que hagas una funcion que se ejecute en el valid del get ,
en esta funcion rellenas el picture , por ejemplo:
Code: Select all
Function LlenaGet( cCodigo )
Local cCod := ""
cCod := Padl( Left( cCodigo, 3 ) , 3, "0" ) + "-" + Padl( Right( cCodigo, 3 ) , 3, "0" )
RETURN( cCod )
Saludos
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
- Ramon Paredes
- Posts: 215
- Joined: Fri Feb 02, 2007 3:38 pm
- Location: Managua, Nicaragua
separalos
Hola Armando,
Por que no los separa en get independientes y a cada uno de ellos los rellenas con cualquier caracter "0" u otro y despues en el reemplazo los unes si quieres con sus guiones etc.
Saludes,
Ramon Antonio Paredes
Managua, Nicaragua
Por que no los separa en get independientes y a cada uno de ellos los rellenas con cualquier caracter "0" u otro y despues en el reemplazo los unes si quieres con sus guiones etc.
Saludes,
Ramon Antonio Paredes
Managua, Nicaragua
... Desde la Tierra de lagos y Volcanes......
Amigos:
Gracias por las respuestas y sugerencias, tal vez sea posible modificar la clase TGET para meter esas carácteristicas, solo que de eso "yo solo se que no se nada", a ver si algun guru nos aporta algo para empezar a tirar.
Saludos
Gracias por las respuestas y sugerencias, tal vez sea posible modificar la clase TGET para meter esas carácteristicas, solo que de eso "yo solo se que no se nada", a ver si algun guru nos aporta algo para empezar a tirar.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Hola
Hola Armando buenos dias, tu necesitas una funcion que capture como cuentas contables verdad ? no hay necesidad de modificar la clase Tegt, yo tengo esa funcion que me rellena los ceros en el valid del get para captura de cuentas especiales de 1 a 4 niveles de cuentas, espero que te sirva.Armando wrote:Amigos:
Gracias por las respuestas y sugerencias, tal vez sea posible modificar la clase TGET para meter esas carácteristicas, solo que de eso "yo solo se que no se nada", a ver si algun guru nos aporta algo para empezar a tirar.
Saludos
//------------------------------------------------------------------------------
* FORMATO1 CON GUION 0000-0000-0000-0000 ó SIN GUION 000000000000
FUNCTION FORMATO1(VarCta, Ctaf,lGuion)
Local lcad1, lcad2, lcad3, lCad4, I, cFormCta
I := 0
lcad1 := ""
lcad2 := ""
lcad3 := ""
lcad4 := ""
//Procesa el primer campo de 4 Digitos: 0000- // Nivel 1
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad1 := lcad1 + SubStr(Ctaf, I , 1)
EndDo
//Procesa el segundo campo de 4 Digitos: 0000-0000 // Nivel 2
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad2 := lcad2 + SubStr(Ctaf, I , 1)
EndDo
//Procesa el tercer campo de 4 Digitos: 0000-0000-0000 // Nivel 3
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad3 := lcad3 + SubStr(Ctaf, I, 1)
EndDo
//Procesa el cuarto campo de 4 Digitos: 0000-0000-0000-0000 // Nivel 4
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad4 := lcad4 + SubStr(Ctaf, I, 1)
EndDo
*Nota: Tienes que indicar los 3 '-', ej: 1--, y como resultado: 00001-0000-0000-0000
IF lGuion
cFormCta := STRZERO(Val(lcad1),4) +'-'+ STRZERO(Val(lcad2),4)+'-'+ STRZERO(Val(lcad3),4)+'-'+ STRZERO(Val(lcad4),4)
ELSE
cFormCta := STRZERO(Val(lcad1),4) + STRZERO(Val(lcad2),4) + STRZERO(Val(lcad3),4) + STRZERO(Val(lcad4),4)
ENDIF
*MsgInfo(cFormCta)
RETURN (cFormCta)
Adriano C. C.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Armando,
Esto de la herencia es un patron de programación que se llama Variaciones Protegidas
http://es.wikipedia.org/wiki/Grasp#Vari ... Protegidas
Esto no es nuevo, es un modelo que usaba Visual Object en el IDE para editar los formularios. Luego tu codigo se implementaba en otra clase, sublcase del formularoi original.
Otro efecto colateral de hacer modificaciones sobre el mismo código es que tu NO PUEDES COMPARTIR tu trabajo con los demás porque no puedes redistribuir el código de la clase TGET completo, es trabajo con copyright.
En cambio, de la otra forma tu puedes distribuir tu clase ya que solo contiene los aspectos reelaborados. Ayudas a proteger a FW sin perder la libertad de hacer con el código lo que quieras.
Aunque... yo a tu caso lo resuelvo de una manera mas sencilla:
Un saludo,
Carlos.
Para añadir o cambiar el comportamiento de una clase te recomiendo que uses la herencia, porque modificar la TGet sería algo inmanejable. ¿QUe vas a hacer si sale una version nueva? Si lo haces por herencia, aun cuando cambie la clase tget tu clase seguirá manteniendo las correcciones que tu hiciste y recibirá las novedades por herencia. A la larga vas a ver que es todo más mantenible.Armando wrote:Amigos:
Gracias por las respuestas y sugerencias, tal vez sea posible modificar la clase TGET para meter esas carácteristicas, solo que de eso "yo solo se que no se nada", a ver si algun guru nos aporta algo para empezar a tirar.
Saludos
Esto de la herencia es un patron de programación que se llama Variaciones Protegidas
http://es.wikipedia.org/wiki/Grasp#Vari ... Protegidas
Esto no es nuevo, es un modelo que usaba Visual Object en el IDE para editar los formularios. Luego tu codigo se implementaba en otra clase, sublcase del formularoi original.
Otro efecto colateral de hacer modificaciones sobre el mismo código es que tu NO PUEDES COMPARTIR tu trabajo con los demás porque no puedes redistribuir el código de la clase TGET completo, es trabajo con copyright.
En cambio, de la otra forma tu puedes distribuir tu clase ya que solo contiene los aspectos reelaborados. Ayudas a proteger a FW sin perder la libertad de hacer con el código lo que quieras.
Aunque... yo a tu caso lo resuelvo de una manera mas sencilla:
Code: Select all
cVar:= Space(8) // para alojar un '001-0001'
@ ... GET cVar .... VALID Ajusta( @cVar )
...
Function Ajusta( cVar )
Local c1, c2
Local nPos:= AT( '-', cVar )
If nPos > 0
cVar:= StrZero( Val( Left( cVar, nPos - 1 ) ), 3 ) + '-' +StrZero( Val( SubStr( cVar, nPos +1 ) ), 4 )
Return .T.
Else
// ver que hace en caso de que no ponga el guion
EndIf
REturn .F.
Un saludo,
Carlos.
Adriano:
Sip, efectivamente son cuentas contables.
Carlos, muchas gracias por los comentarios y el ejemplo.
Voy a probar ambos ejemplos y veré cual me ajusta mejor, ya les contare.
Saluds
Sip, efectivamente son cuentas contables.
Carlos, muchas gracias por los comentarios y el ejemplo.
Voy a probar ambos ejemplos y veré cual me ajusta mejor, ya les contare.
Saluds
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Ejemplo...
Buenos dias amigo, te pongo un ejemplo de como funciona la funcion dentro de un solo campo get, espero que te sirva de gran ayuda, y si alguien la puede mejorar el codigo sera bienvenido.Armando wrote:Adriano:
Sip, efectivamente son cuentas contables.
Carlos, muchas gracias por los comentarios y el ejemplo.
Voy a probar ambos ejemplos y veré cual me ajusta mejor, ya les contare.
Saluds
En ese ejemplo uso la clase BtnGet o lo puedes aplicar al get normal.
cCtaIni := SPACE(19)
REDEFINE BTNGET oGet[01] VAR cCtaIni ID 101 OF oDlg RESOURCE "AYUDA" PICTURE "@K ###################";
ACTION (ListCat(@cCtaIni,S07,"cCtaIni",oGet[01]));
VALID V_FormCta("cCtaIni",cCtaIni)
//------------------------------------------------------------------------------
Static FUNCTION V_FormCta(VarCta, CtAf)
Local FormCtas
IF EMPTY(Ctaf)
MsgAlert("Error: Campo no puede quedar vacío")
RETURN .F.
ENDIF
FormCtas := FORMATO1(VarCta, Ctaf,.T.)
DO CASE
CASE VarCta == "cCtaIni"
cCtaIni := FormCtas
CASE VarCta == "cCtaFin"
cCtaFin := FormCtas
IF cCtaIni > cCtaFin
MsgInfo('ERROR: Cuenta debe ser mayor o igual que el inicial')
RETURN .F.
ENDIF
ENDCASE
oGet[01]:Refresh()
oGet[02]:Refresh()
Release FormCtas
RETURN (.T.)
Saludos
Atte: Adriano C. C.