Suma por cada página en impresión

Hola experto ante todo un cordial saludo, quisiera me apoyaras con lo siguiente: Tengo un reporte "Registro de Ventas" que me imprime en papel continuo todas las ventas del mes, ahora me están pidiendo que al final de cada hoja se sume las cantidades y al comienzo de la siguiente traiga la suma de la hoja anterior no se si me explico. El reporte seria así: solo me faltaría los van y los vienen. Espero tu ayuda. El reporte lo he hecho en visual fox 8 desde un PRG.
Fecha Monto Página 1
01/01/2008     200.00
01/10/2008       50.00 
                Van: 250.00
Fecha Monto Página 2
            Vienen 250.00
25/10/2008     100.00
28/10/2008       50.00 
              Total 400.00
¿No se si debo proporcionarte el PRG?. Gracias de antemano.

1 Respuesta

Respuesta
1

lo que se debe hacer es, cada vez que imprima la linea de detalle el valor se acumula en una variable y la imprima cuando cambia la página, en el PRG que te envío tiene lo que estas necesitando, si tienes alguna duda, por favor avisame, gracias
PROCEDURE imprime
******************
** L=Contador de lineas
** PAG=Contador de Paginas
** Totales=Acumulador de importes de tu archivo
**File_in=Nombre de tu archivo
**********************************************************************************
SET DEVICE TO PRINTER
STORE 0 TO L, PAG, Totales
SELECT("file_in")
=cabecera(0)
SCAN
IF l>56
=cabecera(1)
ENDIF
Totales=Totales+file_in.importe && acumula importes
l=l+1 && Imprime linea detalle
@ l, 01 SAY file_in. Fecha
@ l,PCOL()+1 SAY TRANSFORM(file_in. Importe,"@KZ 999,999.99")
ENDSCAN
l=l+1 && Imprime pagina Final
@ l, 01 SAY "TOTAL Final"
@ l, PCOL()+1 SAY TRANSFORM(totales,"@KZ 999,999.99")
l=0
@ l,01 SAY SPACE(10)
SET DEVICE TO SCREEN
ENDPROC
**********************************************************************************
FUNCTION cabecera
PARAMETERS prt_opcion && El parametro es para saber si es la primera vez;
y no imprimir el van y el vienen
IF prt_opcion=1
l=l+1
@ l,01 SAY "VAN..."
@ l,PCOL()+1 SAY TRANSFORM(totales,"@KZ 999,999.99")
ENDIF
STORE 1 TO l && Coloco en 1 para no usar EJECT
pag=pag+1
@ l,01 SAY "TITULOS EL REPORTE "
@ l,PCOL()+1 SAY "Pagina "+TRANSFORM(pag,"@KZ 999")
IF prt_opcion=1
l=l+1
@ l, 01 SAY "VIENEN..."
@ l, PCOL()+1 SAY TRANSFORM(totales,"@KZ 999,999.99")
Endif
Endfunc

Este es el PRG ojala y me puedas ayudar solo eso me falta:
Clear
close all
SET CONSOLE OFF
SET CENTURY OFF
SET DEVICE TO PRINTER
set printer to name solotexto
linea=1
SELECT 1
USE h:\sicofi\pr_tesor\temp\tempefec.Dbf SHARED
GO TOP
STORE 0 TO d,a
SUM deudor TO d
SUM acreedor TO a
scan all
      if linea=1
          =Cabecera()
     endif
     =imprimeLinea()
     linea=linea+1
     if linea >= 58
         EJECT &&Antes de saltar a la pagina 2 debe sumar la pagina 1
         linea=1
        =Cabecera1()
    endif
endscan
if linea#58
     DO totales
endif
set printer to defa
*******************
PROCEDURE cabecera
*******************
.................
..................
return
*******************
PROCEDURE cabecera1
*******************
................................
................................
return
***********************
procedure imprimeLinea
***********************
................................
................................
return
******************
Procedure totales
******************
...
...
RETURN
Hola buen día gracias por contestar en realidad este es el prg completo que tengo no se como acoplarlo lo que me enviaste,
Clear
close all
set console off
set century off
set device to printer
set printer to name solotexto
linea=1
select 1
USE h:\libros\datos\final SHARED
go top
store 0 to d,h,ac,ac1,bc,bc1,d1,h1,totd,toth,totd1,toth1
sum deudor to d
sum acreedor to ac for lcaja="2"
sum acreedor to ac1 for lcaja="1"
h=ac-ac1
sum acreedor1 to bc for lcaja1="1"
sum acreedor1 to bc1 for lcaja1="2"
h1=bc-bc1
toth=h+a+b+c
toth1=h1+a+e+f
scan all
if linea=1
=Cabecera()
endif
=imprimeLinea()
linea=linea+1
if linea >= 58
eject
linea=1
=Cabecera1()
endif
ENDSCAN
if linea#58 
do totales
endif
set printer to defa
*******************
PROCEDURE cabecera
*******************
??? ' '+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
? ------
? ------
??? space(105)+CHR(18)+Chr(14)+'Libro caja - Bancos'+Chr(15)+Chr(27)+chr(13)+chr(10)
------
? -------
?-------
?-------
?-------
?-------
?-------
?-------
? '³ ³ ³ Operaciones Bancarias ³ Cuenta Contable Asociada ³Saldos y Movimientos ³ ³ ³ Operaciones Bancarias ³ Cuenta Contable Asociada ³Ssaldos y'+' Movimientos'+'³'+chr(13)+chr(10)
? -----
? -----
? '³ Num. ³ Fecha ³Medio³Descripción de la³ Apellidos y Nombres ³ Numero de ³ ³ ³ ³ ³ Num. ³ Fecha ³Medio³Descripción de la³ Apellidos y Nombres ³ NUMERO DE ³ ³ ³ ³'+' '+'³'+chr(13)+chr(10)
??? '³Correl³ Oper. ³Pago ³ Operacion ³Denominacion o Razon Social³ Transaccion ³ Codigo ³ Denominacion ³ Deudor ³ Acrredor ³Correl³ Oper. ³Pago ³ Operacion ³Denominacion o Razon Social³ Transaccion ³ Codigo ³ Denominacion ³ Deudor ³'+' Acreedor '+'³'+chr(13)+chr(10)
??? -------
??? space(33)+'saldo inicial caja chica'+space(27)+'10201001'+SPACE(1)+'Caja y Bco Fondo Fijo'+space(6)+TRANSFORM(a,'#,###,###.##')+chr(13)+chr(10)
??? space(33)+'saldo inicial banco de credito'+SPACE(4)+'290-010083-040'+space(3)+'10401001'+space(1)+'Caja y Bco Cta Cte'+space(9)+transform(b,'#,###,###.##')+chr(13)+chr(10)
??? space(33)+'saldo inicial banco de la nacion'+space(2)+'00261-017229'+space(5)+'10401003'+space(1)+'Caja y Bco Cta Cte'+space(9)+transform(c,'#,###,###.##')+chr(13)+chr(10)
??? ---------
linea=linea+22
return
*******************
PROCEDURE cabecera1
*******************
??? ' '+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
? ----
? ----
? -----
? -----
? ------
? ------
? -----
? -----
? -----
? ------
? ----
? '³ ³ ³ Operaciones bancarias ³ cuenta contable asociada ³saldos y movimientos ³ ³ ³ operaciones bancarias ³ cuenta contable asociada ³ saldos y'+' movimientos'+'³'+chr(13)+chr(10)
? ----
? '³ num. ³ fecha ³medio³descripción de la³ apellidos y nombres ³ numero de ³ ³ ³ ³ ³ num. ³ fecha ³medio³descripción de la³ apellidos y nombres ³ numero de ³ ³ ³ ³'+' '+'³'+chr(13)+chr(10)
??? '³correl³ oper. ³pago ³ operacion ³denominacion o razon social³ transaccion ³ codigo ³ denominacion ³ deudor ³ acrredor ³correl³ oper. ³pago ³ operacion ³denominacion o razon social³ transaccion ³ codigo ³ denominacion ³ deudor ³'+' acreedor '+'³'+chr(13)+chr(10)
??? ----
linea=linea+18
return
***********************
procedure imprimeLinea
***********************
??? padr(ncorr,8)+dtoc(fec_ope)+space(2)+padr(m_pago,5)+padr(desc_oper,16)+space(2)+padr(r_social,27)+;
space(1)+padr(numero,14)+space(1)+padr(codigo,8)+space(1)+padr(denom,15)+transform(deudor,'#,###,###.##')+transform(acreedor,'#,###,###.##')+space(2)+padr(ncorr1,7)+dtoc(fec_ope1)+space(2)+padr(m_pago1,5)+padr(desc_oper1,16)+space(2)+padr(r_social1,27)+space(1)+padr(numero1,14)+space(1)+padr(codigo1,8)+space(1)+padr(denom1,16)+transform(deudor1,'#,###,###.##')+transform(acreedor1,'#,###,###.##')+chr(13)+chr(10)
return
******************
Procedure totales
******************
??? ' '+chr(13)+chr(10)
??? space(169)+'saldo final caja chica'+space(26)+'10201001'+space(1)+'Caja y Bco Fondo Fijo'+space(7)+transform(a,'#,###,###.##')+chr(13)+chr(10)
??? space(169)+'saldo final banco d credito'+space(4)+''+SPACE(2)+'10401001'+SPACE(1)+'Caja y Bco Cta Cte'+space(10)+transform(e,'#,###,###.##')+chr(13)+chr(10)
??? space(169)+'saldo final banco de la nacion' +space(2)+ ''+space(4) + '10401003' +space(1)+'Caja y Bco Cta Cte'+space(10)+transform(f,'#,###,###.##')+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
??? space(1)+replicate('=',265)+chr(13)+chr(10)
??? space(80)+padr('t o t a l e s',13) +space(26) +transform(toth,'#,###,###.##') +space(123) +transform(toth1,'#,###,###.##')+chr(13)+chr(10)
??? space(1)+replicate('=',265)+chr(13)+chr(10)
return
El programa que te envíe es una estructura Standard de impresión, y funciona desde la época del COBOL o RPG
Te recomiendo lo siguiente:
Reemplazar los signos de interrogación "?" por un contador de lineas una calusula @ SAY
@ Linea, 01 SAY "Primer campo"
@ linea, pcol()+1 SAY "segundo campo"
@ linea, pcol()+1 SAY "segundo campo"
Al usar el contador de lineas ya no es necesario usar CH(13)+CHR(10)=CRLF, para el salto de linea,
de igual manera que EJECT, al colocar el contador de lineas en 1 la impresora salta a la siguiente página
Tu programa se vera más limpio
Trata de usar la estructura que te envíe
Ahi va tu programa modificado, espero te sirva
set console off
set century off
set device to printer
set printer to name solotexto
linea=1
select 1
USE h:\libros\datos\final SHARED
go top
store 0 to d,h,ac,ac1,bc,bc1,d1,h1,totd,toth,totd1,toth1
STORE 0 TO sum_deudor, sum_acreedor, ..... && Acumuladores para los campos
sum deudor to d
sum acreedor to ac for lcaja="2"
sum acreedor to ac1 for lcaja="1"
h=ac-ac1
sum acreedor1 to bc for lcaja1="1"
sum acreedor1 to bc1 for lcaja1="2"
h1=bc-bc1
toth=h+a+b+c
toth1=h1+a+e+f
scan all
if linea=1
=Cabecera()
ENDIF
=imprimeLinea()
ENDSCAN
if linea#58
do totales
endif
set printer to defa
*******************
PROCEDURE cabecera
*******************
??? ' '+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
? ------
? ------
??? space(105)+CHR(18)+Chr(14)+'Libro caja - Bancos'+Chr(15)+Chr(27)+chr(13)+chr(10)
------
? -------
?-------
?-------
?-------
?-------
?-------
?-------
? '³³³ Operaciones Bancarias³ Cuenta Contable Asociada³Saldos y Movimientos³³³ Operaciones Bancarias³ Cuenta Contable Asociada³Ssaldos y'+' Movimientos'+'³'+chr(13)+chr(10)
? -----
? -----
? '³ Num.³ Fecha³Medio³Descripción de la³ Apellidos y Nombres³ Numero de³³³³³ Num.³ Fecha³Medio³Descripción de la³ Apellidos y Nombres³ NUMERO DE³³³³'+' '+'³'+chr(13)+chr(10)
? '³Correl³ Oper.³Pago³ Operacion³Denominacion o Razon Social³ Transaccion³ Codigo³ Denominacion³ Deudor³ Acrredor³Correl³ Oper.³Pago³ Operacion³Denominacion o Razon Social³ Transaccion³ Codigo³ Denominacion³ Deudor³'+' Acreedor '+'³'+chr(13)+chr(10)
? -------
??? space(33)+'saldo inicial caja chica'+space(27)+'10201001'+SPACE(1)+'Caja y Bco Fondo Fijo'+space(6)+TRANSFORM(a,'#,###,###.##')+chr(13)+chr(10)
??? space(33)+'saldo inicial banco de credito'+SPACE(4)+'290-010083-040'+space(3)+'10401001'+space(1)+'Caja y Bco Cta Cte'+space(9)+transform(b,'#,###,###.##')+chr(13)+chr(10)
??? space(33)+'saldo inicial banco de la nacion'+space(2)+'00261-017229'+space(5)+'10401003'+space(1)+'Caja y Bco Cta Cte'+space(9)+transform(c,'#,###,###.##')+chr(13)+chr(10)
??? ---------
linea=linea+22
return
*******************
PROCEDURE cabecera1
*******************
??? ' '+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
? ----
? ----
? -----
? -----
? ------
? ------
? -----
? -----
? -----
? ------
? ----
? '³³³ Operaciones bancarias³ cuenta contable asociada³saldos y movimientos³³³ operaciones bancarias³ cuenta contable asociada³ saldos y'+' movimientos'+'³'+chr(13)+chr(10)
? ----
? '³ Num.³ fecha³medio³descripción de la³ apellidos y nombres³ numero de³³³³³ num.³ fecha³medio³descripción de la³ apellidos y nombres³ numero de³³³³'+' '+'³'+chr(13)+chr(10)
? '³Correl³ oper.³Pago³ operacion³denominacion o razon social³ transaccion³ codigo³ denominacion³ deudor³ acrredor³correl³ oper.³pago³ operacion³denominacion o razon social³ transaccion³ codigo³ denominacion³ deudor³'+' acreedor '+'³'+chr(13)+chr(10)
? ----
??? "Vienen......."+TRANSFORM(sum_deudor,'#,###,###.##')+TRANSFORM(sum_acreedor,'#,###,###.##')
linea=linea+18
return
***********************
procedure imprimeLinea
***********************
linea=linea+1
if linea > 57
??? "Van......."+TRANSFORM(sum_deudor,'#,###,###.##')+TRANSFORM(sum_acreedor,'#,###,###.##')
eject
linea=1
=Cabecera1()
endif
??? padr(ncorr,8)+dtoc(fec_ope)+space(2)+padr(m_pago,5)+padr(desc_oper,16)+space(2)+padr(r_social,27)+;
space(1)+padr(numero,14)+space(1)+padr(codigo,8)+space(1)+padr(denom,15)+transform(deudor,'#,###,###.##')+transform(acreedor,'#,###,###.##')+space(2)+padr(ncorr1,7)+dtoc(fec_ope1)+space(2)+padr(m_pago1,5)+padr(desc_oper1,16)+space(2)+padr(r_social1,27)+space(1)+padr(numero1,14)+space(1)+padr(codigo1,8)+space(1)+padr(denom1,16)+transform(deudor1,'#,###,###.##')+transform(acreedor1,'#,###,###.##')+chr(13)+chr(10)
&& Aqui coloca la suma de los campos acumuladores
sum_deudor=sum_deudor+deudor
sum_acreedor=sum_acreedor+acreedor
sum_.....=sum_.....+....
return
******************
Procedure totales
******************
??? ' '+chr(13)+chr(10)
??? space(169)+'saldo final caja chica'+space(26)+'10201001'+space(1)+'Caja y Bco Fondo Fijo'+space(7)+transform(a,'#,###,###.##')+chr(13)+chr(10)
??? space(169)+'saldo final banco d credito'+space(4)+''+SPACE(2)+'10401001'+SPACE(1)+'Caja y Bco Cta Cte'+space(10)+transform(e,'#,###,###.##')+chr(13)+chr(10)
??? space(169)+'saldo final banco de la nacion' +space(2)+ ''+space(4) + '10401003' +space(1)+'Caja y Bco Cta Cte'+space(10)+transform(f,'#,###,###.##')+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
??? space(1)+replicate('=',265)+chr(13)+chr(10)
??? space(80)+padr('t o t a l e s',13) +space(26) +transform(toth,'#,###,###.##') +space(123) +transform(toth1,'#,###,###.##')+chr(13)+chr(10)
??? space(1)+replicate('=',265)+chr(13)+chr(10)
return

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas