Saber si una Propiedad existe en Form Y Crearla en ejecución

172 views
Skip to first unread message

Ricardo Soldini

unread,
Jun 9, 2021, 9:34:00 PM6/9/21
to Comunidad de Visual Foxpro en Español
Buenas Foxero(a)s como estan
¿Alguien puede decirme como saber si una Propiedad existe en un Form
o como referencio a un form que fue creado con el ide  para usar addproperty y agregar la propiedad que me falta?
la sintaxis es la siguiente  pero no se que oObjectName poner
ADDPROPERTY( oObjectName, cPropertyName, [, eNewValue ])
Gracias


Eliseo Ismael Oporto Díaz

unread,
Jun 9, 2021, 9:40:04 PM6/9/21
to publice...@googlegroups.com
Sería algo como :
 If vartype(thisform.mipropiedad)='U'

 thisform.addpeoperty('mipropiedad',valorpordefecto)

EndIf

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/e88eae31-8623-479c-b142-6230b4869174n%40googlegroups.com.

Dsan

unread,
Jun 9, 2021, 9:47:18 PM6/9/21
to publice...@googlegroups.com

Asi compruebas si existe, yo lo hago de esta forma:


If Not Pemstatus(_Screen,"pAutocomple",5)
_Screen.AddProperty("pAutocomple")
Endif

saludos

DSanchez


HernanCano

unread,
Jun 11, 2021, 1:07:24 AM6/11/21
to Comunidad de Visual Foxpro en Español
Ricardo:

oObjectName es el formulario.

De acuerdo a lo que indicas, puedes usar ThisForm para referirte al form.

Por ejm: en el Init del form puedes escribir algo como

ADDPROPERTY ( ThisForm, "dFechaIngreso", {} )

O tal vez:
ADDPROPERTY ( ThisForm, "dFechaIngreso", date() )

Y ya puedes dentro del form utilizar la propiedad dFechaIngreso, como si estuviera creada desde el IDE (como dices) (por que ya está creada).

Ahora: también puedes indicar otro escenario: si ya existe, no la cree. Para ello pudieras hacer lo sgte:

if type("ThisForm.dFechaIngreso")="U"
   ADDPROPERTY ( ThisForm, "dFechaIngreso", date() )
endif

O tal vez:

if not pemstatus( ThisForm, "dFechaIngreso"',5)
   ADDPROPERTY ( ThisForm, "dFechaIngreso", date() )
endif

Cualq de estas "soluciones"/propuestas, puedes utilizarla en el .Init o en un método propio cualq del form respectivo.

Ricardo Soldini

unread,
Jun 12, 2021, 9:00:09 PM6/12/21
to Comunidad de Visual Foxpro en Español
Gracias Hernan con esa sugerencia funciono perfecto
Comento que en la base de datos hay una tabla  de Impuestos que aplican dependiendo del tipo de comercio y necesitaba que se crearan las propiedades para los nuevos impuestos que el usuario pudiese agregar
entonces 
quedo asi
a partir de la consulta de los impuestos vigentes
id_estado=Thisform.id_vigente
TEXT TO _Sql_impuestos TEXTMERGE PRETEXT 7 NOSHOW
     Select id_impuestos, impuesto, tasa from impuestos where id_tab_estados = <<id_estado>>
ENDTEXT

odb.Sql(_Sql_impuestos,"impuestos", "impuestos")
Select impuestos
Go Top
ord=1
SCAN  &&recorro el cursor
i_imp='Thisform.id_impuestos'+Substr(Alltrim(Str(impuestos.id_impuestos)),1,1) &&en esta variable asigno el nombre de la propiedad
vi_imp='id_impuestos'+Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)                &&en esta variable asigno el nombre que se agregara
n_imp='Thisform.impuesto'+Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)  &&en esta variable asigno el nombre de la propiedad
vn_imp='impuesto'+Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)                   &&en esta variable asigno el nombre que se agregara
t_imp='Thisform.tasa'++Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)  &&en esta variable asigno el nombre de la propiedad
vt_imp='tasa'++Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)                   &&en esta variable asigno el nombre que se agregara
IF type("&i_imp")="U"
ADDPROPERTY(thisform,vi_imp,0)
ENDIF
IF TYPE("&n_imp") = "U"
   ADDPROPERTY(thisform,vn_imp,'')
ENDIF
IF TYPE("&t_imp") = "U"
ADDPROPERTY(thisform,vt_imp,0)
endif
&i_imp = impuestos.id_impuestos
&n_imp = impuestos.impuesto
&t_imp = impuestos.tasa
With Thisform.combo5
.AddListItem(impuestos.impuesto ,ord,1)
.AddListItem(Alltrim(Str(impuestos.tasa,2,2)),ord,2)
.AddListItem(Alltrim(Str(impuestos.id_impuestos,2)),ord,3)
.BoundColumn = 1
.ColumnCount=3
.ListIndex=1
.ColumnWidths=("200,55,35")
Endwith
ord=ord+1 
Endscan

Alexander Marquéz

unread,
Jun 12, 2021, 9:53:40 PM6/12/21
to publice...@googlegroups.com
Hola de forma directa con VARTYPE 
ejemplo 
WAIT WINDOW VARTYPE(_screen.empnom)
retorna "U" si o existe de lo contraro el tipo de datos que maneja "C" "N"  por nombrar algunos , busca en la ayuda 
saludos  

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Alexander Barreto
Valencia-Venezuela

HernanCano

unread,
Jun 12, 2021, 10:07:40 PM6/12/21
to Comunidad de Visual Foxpro en Español
Mi programación es más simple, pero tu escenario debe funcionar.

Te recomiendo cambiar

Substr(Alltrim(Str(impuestos.id_impuestos)),1,1)

por 

transform(Impuestos.Id_Impuestos)

entendiendo que lo más normal es que Impuestos.Id_Impuestos sea un campo numérico de un sólo caracter, es decir de un sólo dígito (normalmente) por lo que observo de tu escenario (¿será que nunca va a superar el valor de 9? es decir nunca llegará a 10 o más --dos dígitos--? en mi propuesta no fallaría, en tu escenario sí).

Reply all
Reply to author
Forward
0 new messages