FoxPro/Visual FoxPro - problemas cursor delete set on

 
Vista:

problemas cursor delete set on

Publicado por es_binario (757 intervenciones) el 19/07/2011 18:35:42
Tengo problemas con un cursor, el caso es que me imprime de un cursor el caso es que es un sencillo formulario de facturacion, por ejemplo tengo el formulario con un boton de eliminar articulo con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
*// ver que exista una venta
IF Thisformset.form1.txtsubTotal.Value > 0
	*// temp
	LOCAL des_ as String
	LOCAL pre_ as Double
 
	SELECT mi_venta_actual
	des_ = mi_venta_actual.descrip
	pre_ = mi_venta_actual.p_unitario
 
	*// borra el registro
	DELETE FROM detalle_venta;
		where detalle_venta.descrip = des_ and detalle_venta.p_unitario = pre_
 
	*// limpia al form
	Thisformset.refresca_form()
 
ENDIF


lo cual hace totalmente bien, despues hay un boton que manda imprimir la factura despues de que esta fue grabada.

1
2
3
4
5
6
7
8
LOCAL vista_previa_o_no as Boolean
IF Thisform.optiongroup1.Value = 1
	*// no
	vista_previa_o_no = .F.
ELSE
	vista_previa_o_no = .T.
ENDIF
Thisformset.imprime_factura(Thisform.txtPedido.Value, Thisform.txtCopias.Value, vista_previa_o_no)


este es el codigo que realiza la funcion, el caso es que me imprime los borrados

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
LPARAMETERS pedido_imprime as Integer, no_copias as Integer, imprime_vista_previa as Boolean
*// imprime una determinada factura
PUBLIC FECHA_I 			as Date
PUBLIC NOMBRE_I 		as String
PUBLIC RFC_I			as string
PUBLIC DOM_I			as string
PUBLIC COL_I			as string
PUBLIC CIUD_I			as string
PUBLIC CP_I				as string
PUBLIC TEL_I			as string
PUBLIC SUB_TOTAL_I		as double
PUBLIC IVA_I			as double
PUBLIC RET_IVA_I		as double
PUBLIC TOTAL_I			as double
 
*// ver que la venta este registrada
SELECT * FROM ventas WHERE ventas.pedido = pedido_imprime;
	INTO CURSOR mi_venta_imprime
SELECT mi_venta_imprime
IF RECCOUNT() > 0
	*// procede una vez encontrada la venta
	FECHA_I = mi_venta_imprime.fecha
 
	LOCAL cliente_imprime as Integer
	cliente_imprime = mi_venta_imprime.cliente
	SELECT * FROM clientes WHERE clientes.cliente = cliente_imprime;
		INTO CURSOR mi_cliente_imprime
	*// datos del cliente
	NOMBRE_I = ALLTRIM(mi_cliente_imprime.nombre	)
	RFC_I	 = ALLTRIM(mi_cliente_imprime.rfc		)
	DOM_I	 = ALLTRIM(mi_cliente_imprime.domicilio	)
	COL_I	 = ALLTRIM(mi_cliente_imprime.colonia	)
	CIUD_I	 = ALLTRIM(mi_cliente_imprime.ciudad	)
	CP_I	 = ALLTRIM(mi_cliente_imprime.cp		)
	TEL_I	 = ALLTRIM(mi_cliente_imprime.tel		)
 
	*// detalle de la venta
 
	SELECT cantidad as CANT_I, descripcion as DESCRIP_I, p_unitario as P_UNITARIO_I, pedido;
		FROM detalleventa WHERE detalleventa.pedido = pedido_imprime;
			INTO CURSOR isi READWRITE
 
	*// si se desglosa o no el iva
	*//
	IF !EMPTY(RFC_I) 	&& desglosa iva
		*// el cursor se mantiene igual
 
		*// subtotal
		SELECT SUM(ROUND(isi.CANT_I * isi.P_UNITARIO_I,2)) as subtotal_imprime FROM isi;
			INTO CURSOR cur_tot_sub_a
		SUB_TOTAL_I	= ROUND(cur_tot_sub_a.subtotal_imprime,2)
 
		*// totales
		IVA_I 		= ROUND(SUB_TOTAL_I * (iva_/100),2)
		RET_IVA_I 	= 0
		TOTAL_I		= ROUND(SUB_TOTAL_I * (1+(iva_/100)),2)
 
 
	ELSE				&& no desglosa el iva
		*// el cursor se le agrega el iva
		UPDATE isi SET isi.P_UNITARIO_I = ROUND((isi.P_UNITARIO_I * (1 + (iva_/100))),2)
		*// subtotal
		SELECT SUM(ROUND(isi.CANT_I * isi.P_UNITARIO_I,2)) as subtotal_imprime FROM isi;
			INTO CURSOR cur_tot_sub_b
		SUB_TOTAL_I	= ROUND(cur_tot_sub_b.subtotal_imprime,2)
 
		*// totales
		IVA_I 		= 0
		RET_IVA_I 	= 0
		TOTAL_I		= SUB_TOTAL_I
 
	ENDIF
 
	SELECT isi
	GO top
	*// listo todo para mandar imprimir
	IF imprime_vista_previa = .T.
		*// una sola vez
		Report form "C:\SISSERPCFACTUR\REPORTS\factura.frx" preview
	ELSE && manda a la impresora
		*// las veces que el cliente indique
		FOR a = 1 TO no_copias
			Report form "C:\SISSERPCFACTUR\REPORTS\factura.frx" to print noeject noconsole
		ENDFOR
	ENDIF
 
ENDIF


les voy a ser honesto, esto lo resolvi hace tiempo pero perdi el programa y lo resolvi de una manera mas bien ingeniosa y no tanto legal, creando cursores apartir de las ventas pero si alguno de ustedes me da una opcion mejor, se los agradeceria, tambien le voy a cranear yo.

saludos.
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
sin imagen de perfil

problemas cursor delete set on

Publicado por Juan Manuel Cruz (512 intervenciones) el 20/07/2011 11:33:20
Recuerda poner

SET DELETED ON, como norma general.

Pero además, los SQL SELECT deben llevar una condición !DELETED() para que no te tomen en cuenta los registros borrados (de manera lógica, aunque físicamente sigan estan presentes en la tabla origen hasta un pack o zap)


SELECT * FROM ventas WHERE !DELETED() and ventas.pedido = pedido_imprime;
INTO CURSOR mi_venta_imprime
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
sin imagen de perfil

problemas cursor delete set on

Publicado por Juan Manuel Cruz (512 intervenciones) el 20/07/2011 11:35:21
Quise decir:

SELECT cantidad as CANT_I, descripcion as DESCRIP_I, p_unitario as P_UNITARIO_I, pedido;
FROM detalleventa ;
WHERE !DELETED() AND detalleventa.pedido = pedido_imprime;
INTO CURSOR isi READWRITE

El principio es el mismo.
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

problemas cursor delete set on

Publicado por es_binario (757 intervenciones) el 21/07/2011 15:16:22
Sigo con el mismo problema de que me muestra los datos borrados del cursor, este es mi projecto.

link de la descarga no tiene pass:
http://www.megaupload.com/?d=5T5LV39T

gracias.
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

problemas cursor delete set on

Publicado por xx (378 intervenciones) el 21/07/2011 18:54:49
No lo inspeccione muy a fondo pero la causa parece estar el momento de grabar el comprobante es decir cuando grabas la factura no existe ninguna condicion de filtro de registros borrados es decir:

SELECT detalle_venta1
FOR a = 1 TO RECCOUNT()
SELECT detalle_venta1
GO a
*// aqui se deberia filtrar los registros marcados con DELETED() y omitirlos
*// caso contrario tambien seran insertados en la tabla detalles_venta y por supuesto
*// seran impresos
d_descrip = ALLTRIM(detalle_venta1.descrip)
d_p_unita = detalle_venta1.p_unitario
d_cant = detalle_venta1.cantidad

*// graba los datos en el detalle de venta
INSERT INTO detalleventa values ( v_pedido, ;
d_cant, ;
d_descrip, ;
d_p_unita, ;
iva_ )
*// verifica si la descripcion existe en articulos
SELECT * FROM productos WHERE productos.descrip = d_descrip;
INTO CURSOR mi_articulo_existe
SELECT mi_articulo_existe
IF RECCOUNT() > 0 && existe
UPDATE productos SET p_unitario = d_p_unita;
WHERE productos.descrip = d_descrip
ELSE && es nuevo
*// obtiene el nuevo codigo de producto
LOCAL nva_clave as Integer
SELECT productos
SET ORDER TO clave
GO bottom
nva_clave = productos.clave + 1

INSERT INTO productos values( nva_clave, ;
d_descrip, ;
d_p_unita, ;
v_activa )
ENDIF
ENDFOR
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

problemas cursor delete set on

Publicado por es_binario (757 intervenciones) el 21/07/2011 23:49:15
Muchas gracias a ambos, efectivamente xx el problema estaba a la hora de registrar los articulos en la tabla detalle.

gracias por la ayudota a los 2.
Saludos de Mexico.
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