Impresión

Hola buen día, ya he logrado hacer la impresión del reporte pero me piden lo siguiente:
Yo tengo esta impresión y en mi tabla temporal tengo lo mismo con estos campos:
nAsiento descrip debe haber
1 xxxxxxxxxxxx
1 xxxxxxxxxxxx
1 xxxxxxxxxxxx
2 xxxxxxxxxxxxx
2 xxxxxxxxxxxxx
2 xxxxxxxxxxxxx
3 xxxxxxxxxxxxx
3 xxxxxxxxxxxxx
3 xxxxxxxxxxxxx
...
...
Tengo una tabla docs con los campos:
cod Descripción
1 Ingresos
2 Caja Bancos
3 Otros
Me piden que la impresión se así:
nAsiento descrip debe haber
Ingresos
1 xxxxxxxxxxxxx
1 xxxxxxxxxxxxx
1 xxxxxxxxxxxxx
Caja Bancos
2 xxxxxxxxxxxxxxx
2 xxxxxxxxxxxxxxxx
2 xxxxxxxxxxxxxxxx
Otros
3 xxxxxxxxxxxx
3 xxxxxxxxxxxx
3 xxxxxxxxxxxxxx
La relación seria entre nAsiento de la tamba temporal y cod de la tabla docs. ¿Hay forma de hacer esta impresión?

1 Respuesta

Respuesta
1
Si los campos tienen las mismas características y el campo cod
es el código principal de la tabla docs se pueden relacionar
primero ordena la tabla docs por su clave principal, luego
selecciona la tabla temporal y la relacionas con la tabla docs
y simplemente imprimes
SELECT("tabla_temporal")
SET RELATION TO nAsiento INTO docs ADDITIVE
GO TOP
*** rutina de lectura e impresion
mi_asiento=SPACE(10)
l=0
SCAN
IF l>55
=titula()
ENDIF
IF nAsiento#mi_asiento
=q_asiento()
ENDIF
l=l+1
@ l, 01 say nAsiento
@ l, pcol()+1 say descrip
@ l, pcol()+1 say debe
@ l, pcol()+1 say haber
Endscan
FUNCTION q_asiento
mi_asiento=nAsiento
l=l+1
@ l, 01 say docs. Cod
@ l, pcol()+1 say docs. Descripcion
Endfunc
FUNCTION TITULA
Endfunc
Titula es la rutina de los títulos, l=contador de lineas, suerte
Bueno este el prg que genera la impresión en donde puedo incluir el código para que me imprima la descripción del documento por cada asiento, espero no quitart tu tiempo.
set console off
set century off
set device to printer
set printer to name solotexto
linea=1
select 1
USE h:\librosvarios\data\tmpdiario SHARED
go top
store 0 to pag,sum_debe, sum_haber,total
scan all
     if linea=1
        =Cabecera()
     ENDIF
    =imprimeLinea()
ENDSCAN
if linea#60
      do totales
endif
set printer to defa
*******************
PROCEDURE cabecera
*******************
pag=pag+1
...............
..............
linea=linea+22
return
*******************
PROCEDURE cabecera1
*******************
pag=pag+1
..............
..............
??? SPACE(100)+"VIENEN ......."+SPACE(21)+TRANSFORM(sum_debe,'#,###,###.##')+SPACE(4)+TRANSFORM(sum_haber,'#,###,###.##')+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
linea=linea+23
return
***********************
procedure imprimeLinea
***********************
linea=linea+1
if linea > 60
??? ' '+chr(13)+chr(10)
??? SPACE(100)+"VAN ......."+SPACE(24)+TRANSFORM(sum_debe,'#,###,###.##')+SPACE(4)+TRANSFORM(sum_haber,'#,###,###.##')
eject
linea=1
=Cabecera1()
endif
??? SPACE(6)+padr(n_asiento,8)+dtoc(fec_ope)+space(3)+padr(glosa,30)+SPACE(5)+padr(cod_libro,2)+space(2)+padr(n_corr,6)+;
space(1)+padr(n_doc,8)+space(11)+padr(cod_cta,10)+space(1)+padr(denom,31)+; &&+padr(tipo_doc,20)
SPACE(3)+transform(debe,'#,###,###.##')+SPACE(4)+transform(haber,'#,###,###.##')+chr(13)+chr(10)
sum_debe=sum_debe+debe
sum_haber=sum_haber+haber
return
******************
Procedure totales
******************
...
...
return
TU programa podría quedar así
set console off
set century off
set device to printer
set printer to name solotexto
linea=1
USE h:\librosvarios\data\docs IN 2 SHARED
SELECT 2
SET ORDER TO codigo
USE h:\librosvarios\data\tmpdiario in 1 SHARED
SET RELATION TO nAsiento INTO docs ADDITIVE
go top
store 0 to pag,sum_debe, sum_haber,total, mi_asiento
scan all
if linea=1
=Cabecera()
ENDIF
=imprimeLinea()
ENDSCAN
if linea#60
do totales
endif
set printer to defa
*******************
PROCEDURE cabecera
*******************
pag=pag+1
...............
..............
linea=linea+22
return
*******************
PROCEDURE cabecera1
*******************
pag=pag+1
..............
..............
??? SPACE(100)+"VIENEN ......."+SPACE(21)+TRANSFORM(sum_debe,'#,###,###.##')+SPACE(4)+TRANSFORM(sum_haber,'#,###,###.##')+chr(13)+chr(10)
??? ' '+chr(13)+chr(10)
linea=linea+23
return
***********************
procedure imprimeLinea
***********************
linea=linea+1
if linea > 60
??? ' '+chr(13)+chr(10)
??? SPACE(100)+"VAN ......."+SPACE(24)+TRANSFORM(sum_debe,'#,###,###.##')+SPACE(4)+TRANSFORM(sum_haber,'#,###,###.##')
eject
linea=1
=Cabecera1()
ENDIF
IF nAsiento#mi_asiento
=q_asiento()
ENDIF
??? SPACE(6)+padr(n_asiento,8)+dtoc(fec_ope)+space(3)+padr(glosa,30)+SPACE(5)+padr(cod_libro,2)+space(2)+padr(n_corr,6)+;
space(1)+padr(n_doc,8)+space(11)+padr(cod_cta,10)+space(1)+padr(denom,31)+; &&+padr(tipo_doc,20)
SPACE(3)+transform(debe,'#,###,###.##')+SPACE(4)+transform(haber,'#,###,###.##')+chr(13)+chr(10)
sum_debe=sum_debe+debe
sum_haber=sum_haber+haber
return
******************
Procedure totales
******************
............
............
return
***************************************************************************
FUNCTION q_asiento
mi_asiento=nAsiento
linea=linea+1
@ linea, 01 say docs. Cod
@ linea, pcol()+1 say docs. Descripcion
Endfunc

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas