FoxPro/Visual FoxPro - Expresion IIF en formulario de factura

   
Vista:

Expresion IIF en formulario de factura

Publicado por Luis (4 intervenciones) el 13/03/2014 21:20:57
Saludos Amigos,

Como puedo utilizar la funcion IIF para reemplazar el itbis cuando esta (.T.) en la base de datos y me presente el valor del itbis en ese momento?
ejemplo:

Replace itbis with iif (mercancias.itbis=(.T.),
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauricio

Expresion IIF en formulario de factura

Publicado por Mauricio (1368 intervenciones) el 14/03/2014 00:22:06
Puedes ampliar lo que pides:
Quieres reemplazar el valor de itbis, cuando es cierto(.T.) por falso(.F.) y viceversa?
Porque eso es lo que entiendo.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por saul (676 intervenciones) el 14/03/2014 06:41:13
1
2
3
4
5
6
7
8
9
10
**Obvio que tu itbis tiene que ser boolean
 
Replace itbis with iif (mercancias.itbis=.T.,.T.,.F.)
 
** Otra opcion
IF mercancias.itbis
    Replace itbis with .T.
ELSE
    Replace itbis with .F.
ENDIF

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por Fidel José (558 intervenciones) el 14/03/2014 12:12:58
No es más sencillo
REPLACE itbis with mercancias.itbis
Distinto sería si el campo itbis de la tabla mercancías, acepta valores nulos y este ibis que reemplazamos no.
En ese caso podría ser:
REPLACE itbis WITH IIF(ISNULL(mercancias.itbis),.F.,mercancias.itbis)

Esta forma de hacer la comparación de un boolean
IF mercancias.itbis=(.T.) ó IF mercancias.itbis=.T.
no es adecuada

La forma es
IF mercancias.itbis (nada más que eso) ó lnValor=IIF(mercancias.itbis,1,0)

Fundamento: Las comparaciones IF y IIF() requieren un valor boolean (veradero o falso). Esto debe surgir de la expresión que acompaña a IF, o de la misma variable o campo si son expresiones lógicas.
SI TalCosaVerdadero ENTONCES PonEsto SINO ponAquello
Como itbis es un booleano, ya está implícita la condición.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por Luis (4 intervenciones) el 14/03/2014 13:56:39
Saludos, es más sencillo, en la tabla de mercancias tengo a itbis con true or false pero lo que quiero conseguir es que cuando sea true en la tabla de mercancias, cuando llamo la mercancia me presente el valor del itbis en el momento y cuando es falso ponga 0. (por ejemplo: Replace itbis with iif (mercancias.itbis=(.T.),18.00,0.00) ) eso es lo que quiero hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por Fidel José (558 intervenciones) el 14/03/2014 14:35:40
Y puedes hacerlo
REPLACE itbis WITH IIF(mercancias.itbis, 18 , 0 )

O también puede venir el valor de una variable o propiedad. Ej
Addproperty(thisform,"tasaIbis",18) && en el Init del form agrego una propiedad "Tasaibis"

REPLACE itIbis with IIF(Mercancia.itIbis, thisform.tasaIbis , 0 )

* Por ejemplo, puedes hacer algo así (trabajando con IIF() )
LOCAL lnGravado, lnImpuesto ,lnTotal
lnGravado=1000
lnImpuesto = Round( lnGravado * IIF(mercancia.ItIbis , thisform.tasaIbis , 0 ), 2 )
lnTotal=lnGravado + lnImpuesto

Lo que nos confunde es el nombre de los campos. Como consejo, no uses el mismo nombre de campos para campos que tienen significado distinto o que tienen distinto tipo de valor. Te llevará a errores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por Luis (4 intervenciones) el 14/03/2014 15:27:37
he aqui la parte del problema en el formulario, tanto el descuento como el itbis lo estoy poniendo por linea, el descuento se pone manual pero el itbis quiero ponerlo que cuando la mercancia sea con itbis ponga el 18 y si no ponga el 0, siendo en la tabla de mercancias el itbis logico ( T o F ) y en la tabla de factura tengo el campo numerico :

parameter lnmerc
if !thisform.editar
return
endif

=seek(lnmerc,'mercancias','codigo')
sele vmovim_de

calcExist=existe(movim_ma.almacen,mercancias.codigo)
if calcExist=0
wait window 'Esta Mercancia no esta en Existencia en este almacen' nowait
endif
if type("evaluate('mercancias.precio'+alltrim(str(sgpreciode)))")='U'
sgpreciode=1
endif

replace merc with mercancias.codigo;
descrip with mercancias.descrip;
referencia with mercancias.referencia;
cantidad with 0;
itbis with (la parte del itbis que aqui quiero que aparezca en el form el 18 o el 0)
precio with ROUND(evaluate('mercancias.precio'+alltrim(str(sgpreciode)))/;
iif(sgitbiinc,1+(movim_de.itbilin/100),1),2)
=thisform.ctotal()
ThisForm.grdVmovim_de.refresh
abajo imagen del form :

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Expresion IIF en formulario de factura

Publicado por Saul (676 intervenciones) el 15/03/2014 17:28:43
Tu problema Luis es que no te sabes explicar que es loq ue necesitas realmente, y todo mundo piensa según lo que tu explicas.

segun veo lo que tu quieres es sumamante facil, tomado de tu codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
PARAMETERS lnmerc
 
*.- Si mi propiedad no es editar no enta
if !thisform.editar
return
endif
 
 
IF SEEK(lnmerc,'mercancias','codigo')
	SELECT vmovim_de
 
    **Retorna la Existencia
	calcExist = existe(movim_ma.almacen,mercancias.codigo)
 
	if calcExist > 0
		wait window 'Esta Mercancia no esta en Existencia en este almacen' nowait
		RETURN 0
	ELSE
		if type("evaluate('mercancias.precio'+alltrim(str(sgpreciode)))")='U'
			sgpreciode=1
		endif
 
		REPLACE merc 		WITH mercancias.codigo,;
				descrip 	WITH mercancias.descrip,;
				referencia  WITH mercancias.referencia,;
				cantidad    WITH 0,;
				itbis       WITH 0,;
				precio 		WITH ROUND(evaluate('mercancias.precio'+alltrim(str(sgpreciode)))/;
												iif(sgitbiinc,1+(movim_de.itbilin/100),1),2) IN TuCursorFactua
 
		**Sigues Grabando
		IF mercancias.itbis
			REPLACE	itbis 	WITH 18.00  && O dende obtengas ese precio puede ser mercancias.precio
		ENDIF
	ENDIF		&&Viene si tiene Existencia
ENDIF		&&Viene si Encuentra la Mercaderia
 
 
ThisForm.grdVmovim_de.refresh
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Expresion IIF en formulario de factura

Publicado por Luis (4 intervenciones) el 20/03/2014 20:17:04
Le doy las gracias a todos (en especial a Saul)

Ya que por via de él pude dar con la solución.
Les cuento que hice todo lo que me habias puesto Saul y todavia no daba con la respuesta pero, después me puse a analizar paso por paso y me di cuenta de un error de mi parte (ustedes no tuvieron nada de culpa, fue mia por no saber explicarme bien), el problema estaba en que el itbis en la tabla de mercancias esta logico (true o false), y al momento de llamar la mercancia en el formulario, quería que si fuera TRUE me pusiera 18 y FALSE "0", pero olvidé que en la tabla de factura y en el mismo formulario utilizaba "ITBILIN" o sea que la respuesta que Saul me dió fué la que mejor me funcionó, solo tuve que arreglarle una cosita:

IF mercancias.itbis=.T.
REPLACE vmovim_de.itbilin WITH 18 && O dende obtengas ese precio puede ser mercancias.precio
else
replace vmovim_de.itbilin with 0
ENDIF
Le doy las gracias a todos, gracias por su apoyo a todos!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar