Acortar mi codigo con algun update where
Publicado por es_binario (757 intervenciones) el 16/11/2009 18:42:35
Tengo una tabla donde guardo la captura de los abonos de unas tarjetas de cobro, bueno, todo bien, voy agregando a esta tabla todos los folios banados, asi como su abono, pero tengo una tabla ventas, en donde actualizo El saldo Actual, El saldo Anterior y El ultimo pago, solo que no lo hago con cada registro que gravo, para esto creo un cursor a partir de una consulta sql de la tabla ventas, y le doy el readwrite para ahi en ese cursor guardar los cambios, el caso es que al final el usuario tiene un boton que finaliza el proceso de recepcion de tarjetas para cada cobrador, entonces lo que hago es leer toda la tabla para actualizar la tabla original llamada venta, a partir de la tabla venta_b. les pongo el codigo.
La pregunta, no podria hacerlo mas corto el codigo con alguna instruccion sql.
De antemano gracias.
DO case
CASE This.Caption = "Comenzar"
this.BackColor = RGB(255,0,0)
This.Caption = "Terminar"
Thisformset.form1.txtPago.Enabled = .T.
Thisformset.form1.cmbCobrador.Enabled = .t.
Thisformset.form1.txtfecha.Enabled = .t.
thisformset.form1.txtFolio.Enabled = .t.
thisformset.form1.txtFolio.SetFocus
CASE This.Caption = "Terminar"
LOCAL cobrador
STORE ALLTRIM(thisformset.form1.CmbCobrador.Value) TO cobrador
*// seguro
msgboxseg = MESSAGEBOX("Seguro de recibir este cobro a: " + cobrador,4+32+256,"Desea continuar recibiendo el cobro")
IF msgboxseg = 6 && es un si
*// acepta el cobro como normal
UPDATE abonos SET tipo = "A" WHERE tipo = "t"
this.BackColor = RGB(0,64,0)
This.Caption = "Comenzar"
Thisformset.form1.txtPago.Enabled = .F.
Thisformset.form1.cmbCobrador.Enabled = .F.
Thisformset.form1.txtfecha.Enabled = .F.
thisformset.form1.txtFolio.Enabled = .F.
*// llama al guardado de los abonos
SELECT * FROM venta_b ;
WHERE venta_b.folio in (SELECT folio FROM abonos WHERE abonos.tipo = "t");
INTO CURSOR Mis_cambios_en_ventas
WAIT "Espere..." nowait
SELECT Mis_cambios_en_ventas
LOCAL cambi_os
STORE RECCOUNT() TO cambi_os
*// solo si tiene registros
LOCAL sal_ant, sal_act, ult_pagoo, fol_update
IF RECCOUNT() > 0
FOR ve = 1 TO RECCOUNT()
SELECT Mis_cambios_en_ventas
GO ve
STORE Mis_cambios_en_ventas.folio TO fol_update
STORE Mis_cambios_en_ventas.saldo_act TO sal_act
STORE Mis_cambios_en_ventas.saldo_ant TO sal_ant
STORE Mis_cambios_en_ventas.ult_pago TO ult_pagoo
UPDATE venta SET venta.saldo_act = sal_act, venta.saldo_ant = sal_ant, ;
venta.ult_pago = ult_pagoo WHERE venta.folio = fol_update
ENDFOR
ENDIF
*// termina
MESSAGEBOX("Se han actualizado correctamente " + ALLTRIM(STR(cambi_os)) + " Registros Exitosamente",64,"")
RETURN
ELSE && desea revisar o cambiar al vendedor
RETURN
ENDIF
ENDCASE
La pregunta, no podria hacerlo mas corto el codigo con alguna instruccion sql.
De antemano gracias.
DO case
CASE This.Caption = "Comenzar"
this.BackColor = RGB(255,0,0)
This.Caption = "Terminar"
Thisformset.form1.txtPago.Enabled = .T.
Thisformset.form1.cmbCobrador.Enabled = .t.
Thisformset.form1.txtfecha.Enabled = .t.
thisformset.form1.txtFolio.Enabled = .t.
thisformset.form1.txtFolio.SetFocus
CASE This.Caption = "Terminar"
LOCAL cobrador
STORE ALLTRIM(thisformset.form1.CmbCobrador.Value) TO cobrador
*// seguro
msgboxseg = MESSAGEBOX("Seguro de recibir este cobro a: " + cobrador,4+32+256,"Desea continuar recibiendo el cobro")
IF msgboxseg = 6 && es un si
*// acepta el cobro como normal
UPDATE abonos SET tipo = "A" WHERE tipo = "t"
this.BackColor = RGB(0,64,0)
This.Caption = "Comenzar"
Thisformset.form1.txtPago.Enabled = .F.
Thisformset.form1.cmbCobrador.Enabled = .F.
Thisformset.form1.txtfecha.Enabled = .F.
thisformset.form1.txtFolio.Enabled = .F.
*// llama al guardado de los abonos
SELECT * FROM venta_b ;
WHERE venta_b.folio in (SELECT folio FROM abonos WHERE abonos.tipo = "t");
INTO CURSOR Mis_cambios_en_ventas
WAIT "Espere..." nowait
SELECT Mis_cambios_en_ventas
LOCAL cambi_os
STORE RECCOUNT() TO cambi_os
*// solo si tiene registros
LOCAL sal_ant, sal_act, ult_pagoo, fol_update
IF RECCOUNT() > 0
FOR ve = 1 TO RECCOUNT()
SELECT Mis_cambios_en_ventas
GO ve
STORE Mis_cambios_en_ventas.folio TO fol_update
STORE Mis_cambios_en_ventas.saldo_act TO sal_act
STORE Mis_cambios_en_ventas.saldo_ant TO sal_ant
STORE Mis_cambios_en_ventas.ult_pago TO ult_pagoo
UPDATE venta SET venta.saldo_act = sal_act, venta.saldo_ant = sal_ant, ;
venta.ult_pago = ult_pagoo WHERE venta.folio = fol_update
ENDFOR
ENDIF
*// termina
MESSAGEBOX("Se han actualizado correctamente " + ALLTRIM(STR(cambi_os)) + " Registros Exitosamente",64,"")
RETURN
ELSE && desea revisar o cambiar al vendedor
RETURN
ENDIF
ENDCASE
Valora esta pregunta


0