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:
lo cual hace totalmente bien, despues hay un boton que manda imprimir la factura despues de que esta fue grabada.
este es el codigo que realiza la funcion, el caso es que me imprime los borrados
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.
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
0