Tengon un pequeño problema aritmetica
Publicado por es_binario (757 intervenciones) el 08/09/2010 01:14:45
Resulta que hice un programita muy sencillo que unicamente imprime las facturas de un cliente y solo calcula el subtotal, el iva y el total
bueno pues resulta que al cliente le permito re-imprimir una factura ya hecha y el caso que en alguna ocacion me hizo el calculo mal, algo asi
el problema y es que ya no recuerdo bien pero fue algo asi:
Cant Descripcion p.unitario importe
1 rectificacion de poleas 577 577
sub-total 1052
iva 168.32
total 1220.32
ahi en el sub-total todo bien, pero no encuentro el error en mi codigo.
el comando es el siguiente tengo un metodo que dispara la impresion de factura usando variables y un cursor pero no usa, data enviroment en el reporte.
lo raro es que no lo hace siempre. eso si es muy raro, tal vez me puedan ayudar a dar con el error. gracias por su apoyo.
la forma en que lo llamo es algo asi:
thisformset.imprime_factura(2,1,.f.)
con este comando le digo que imprima la factura no.2 una sola copia y que no sea vista previa sino directa impresion a la impresora.
gracias.-----------------------------
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(isi.CANT_I * isi.P_UNITARIO_I) 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(isi.CANT_I * isi.P_UNITARIO_I) 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
*// 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
bueno pues resulta que al cliente le permito re-imprimir una factura ya hecha y el caso que en alguna ocacion me hizo el calculo mal, algo asi
el problema y es que ya no recuerdo bien pero fue algo asi:
Cant Descripcion p.unitario importe
1 rectificacion de poleas 577 577
sub-total 1052
iva 168.32
total 1220.32
ahi en el sub-total todo bien, pero no encuentro el error en mi codigo.
el comando es el siguiente tengo un metodo que dispara la impresion de factura usando variables y un cursor pero no usa, data enviroment en el reporte.
lo raro es que no lo hace siempre. eso si es muy raro, tal vez me puedan ayudar a dar con el error. gracias por su apoyo.
la forma en que lo llamo es algo asi:
thisformset.imprime_factura(2,1,.f.)
con este comando le digo que imprima la factura no.2 una sola copia y que no sea vista previa sino directa impresion a la impresora.
gracias.-----------------------------
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(isi.CANT_I * isi.P_UNITARIO_I) 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(isi.CANT_I * isi.P_UNITARIO_I) 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
*// 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
Valora esta pregunta


0