Code: Select all
/*---------------------------------------------------------------------------------------*/
/* Archivo: Proc3054.PRG */
/* Descripcion: Listado de Apuntes de Gastos y Ingresos */
/* Fecha: 15-09-2010 */
/* Release: 19-09-2011 */
/* Autor: Jose Javier LLoris Roig */
/* */
/* Funcion: ListaApuntesGI( cModoImp, cDesde, cHasta, cPDF, nTypeL, lColor ) */
/* */
/* Parametros recibidos: */
/* */
/* cModoImp => Modo de impresion P = pantalla I = impresora */
/* cDesde => Desde fecha */
/* cHasta => Hasta fecha */
/* cPDF => Nombre del fichero PDF a generar */
/* nTypeL => Tipo de listado */
/* 1.- Todos los apuntes con importe neto */
/* 2.- Todos los apuntes con importe total */
/* lCeros => Si imprimimos valores nulos ( ceros ). */
/* Recibe .T. = Si .F. = No */
/* */
/* Notas: Este informe se imprime en apaisado. */
/*---------------------------------------------------------------------------------------*/
#Include "FiveWin.CH"
#Define CLR_GASTOS RGB( 255,64,64 )
#Define CLR_INGRESOS RGB( 76,127,185 )
STATIC nTypeList
/*------------------------------------------------------------------------------*/
Function ListaApuntesGI( cModoImp, cDesde, cHasta, cPDF, nTypeL, lColor )
/*------------------------------------------------------------------------------*/
MsgRun( "Imprimiendo apuntes de gastos y ingresos.",;
"Espere por Favor...",;
{ || Lista( cModoImp, cDesde, cHasta, cPDF, nTypeL, lColor ) } )
Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function Lista( cModoImp, cDesde, cHasta, cPDF, nTypeL, lColor )
/*------------------------------------------------------------------------------*/
LOCAL oPrn, oFontC, oFontD, oFontT, oPen, oFontB
LOCAL nRow := 0, nLen := 0, nConta := 0
LOCAL lOk := .F.
LOCAL aTotal := ARRAY( 3 )
DEFAULT cPDF := "" ,;
lColor := .F.
/*-----------------------------------------*/
/* nTypeList = Tipo de listado de apuntes */
/*-----------------------------------------*/
/* 1.- Todos los apuntes con importe neto */
/* 2.- Todos los apuntes con importe total */
/*-----------------------------------------*/
nTypeList := nTypeL
aTotal[1] := 0 // Total apuntes
aTotal[2] := 0 // Total importe gastos
aTotal[3] := 0 // Total importe ingresos
/* Controlamos si es por pantalla o impresora */
If cModoImp == "P"
PRINT oPrn NAME "Impresión de Apuntes G/I" PREVIEW MODAL
Else
PRINT oPrn NAME "Impresión de Apuntes G/I"
End
/* Controlamos si se ha creado el objeto PRINT */
If Empty( oPrn:hDC )
Return NIL
End
/* Asignamos el nombre del fichero PDF a generar*/
/* En la nueva version esto sobra */
*If !Empty( cPDF )
* oPrn:cDocument := AllTrim( cPDF )
*End
/* Impresion en horizontal */
oPrn:SetLandscape()
/* Definimos los FONT */
DEFINE FONT oFontC NAME "Tahoma" SIZE 0, -8 BOLD OF oPrn
DEFINE FONT oFontD NAME "Tahoma" SIZE 0, -7 OF oPrn
DEFINE FONT oFontT NAME "Tahoma" SIZE 0, -7 BOLD OF oPrn
DEFINE FONT oFontB NAME "3 of 9 barcode" SIZE 0, -30 OF oPrn
DEFINE PEN oPen WIDTH 5 OF oPrn
PAGE
nRow := 1
/* Imprimimos la cabecera del listado */
Cabeceras( oPrn, @nRow, oFontD, oFontC, oPen, cDesde, cHasta, oFontB )
/* NOTA: El indice que usamos para generar este informe es ApuCon01.NTX que esta */
/* ordenado por Numero de Apunte */
/* Leemos hasta final de fichero */
WHILE ! ApuConta->( Eof() )
/* Controlamos la impresion por rangos de fecha */
IF ApuConta->ApuFec >= cDesde .AND. ApuConta->ApuFec <= cHasta
/* Controlamos que tipo de apunte es Gasto o Ingresos para acumular el */
/* importe neto o importe total */
IF ApuConta->ApuTip == "G"
/* 1.- Todos los apuntes con importe neto */
IF nTypeList == 1
aTotal[2] := aTotal[2] + ApuConta->ApuImp // Totalizamos gastos neto
ELSE
/* 2.- Todos los apuntes con importe total */
aTotal[2] := aTotal[2] + ApuConta->ApuTot // Totalizamos gastos total
END
ELSE
/* 1.- Todos los apuntes con importe neto */
IF nTypeList == 1
aTotal[3] := aTotal[3] + ApuConta->ApuImp // Totalizamos ingresos neto
ELSE
/* 2.- Todos los apuntes con importe total */
aTotal[3] := aTotal[3] + ApuConta->ApuTot // Totalizamos ingresos total
END
END
/* Imprimimos los detalles */
Detalle( oPrn, @nRow, oFontD, oPen, lColor )
/* Controlamos los numeros de linea a imprimir */
IF nConta >= 30 .AND. ! ApuConta->( Eof() )
oPrn:CmSay( nRow+=0.5,3, "Sigue en página siguiente...",oFontC,,CLR_BLACK )
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
nConta := 0
Cabeceras( oPrn, @nRow, oFontD, oFontC, oPen, cDesde, cHasta, oFontB )
END
/* Aumentamos el valor del numero de lineas impresas y si hemos leido al */
/* menos un registro para poder imprimir los totales */
nConta++
aTotal[1]++
lok := .T.
END
ApuConta->( DbSkip() )
SysRefresh()
END
/* Impirmimos los totales generales */
Totales( oPrn, nRow, oFontT, oPen, aTotal, lOk, lColor )
ENDPAGE
ENDPRINT
/* Finalizamos los objetos utilizados */
oFontC:End()
oFontD:End()
oFontT:End()
oFontB:End()
oPen:End()
/* Borramos los objetos utilizados */
DeleteObject( oPrn )
DeleteObject( oFontC )
DeleteObject( oFontD )
DeleteObject( oFontT )
DeleteObject( oFontB )
DeleteObject( oPen )
Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function Cabeceras( oPrn, nRow, oFontD, oFontC, oPen, cDesde, cHasta, oFontB )
/*------------------------------------------------------------------------------*/
LOCAL cTitValor
/* Impresion de la Cabecera del listado */
oPrn:CmSay( nRow+=1, 3, "Procedimiento: PROC3054.PRG" ,oFontD )
oPrn:CmSay( nRow, 11.6, "LISTADO DE APUNTES DE GASTOS/INGRESOS" ,oFontC )
oPrn:CmSay( nRow, 23, "Pagina: " + AllTrim( Str( oPrn:nPage ) ),oFontD )
oPrn:CmSay( nRow, 24.8, "Fecha: " + dToc( Date() ) ,oFontD )
oPrn:CmSay( nRow+=0.3, 3, Replicate( "-", 270 ) ,oFontD )
/* Imprimimos configuracion del listado */
oPrn:CmSay( nRow+=0.5, 3, "Desde Periodo:" ,oFontC )
/* Codigo de Barra 3of9 Barcode */
oPrn:CmSay( nRow, 24.5, "3058" ,oFontB )
oPrn:CmSay( nRow, 5.3, TransForm( cDesde, "99-99-9999" ),oFontD )
oPrn:CmSay( nRow+=0.5, 3, "Hasta Periodo:" ,oFontC )
oPrn:CmSay( nRow, 5.3, TransForm( cHasta, "99-99-9999" ),oFontD )
oPrn:CmSay( nRow+=0.5, 3, "Actividad:" ,oFontC )
oPrn:CmSay( nRow, 5.3, "Todas las actividades" ,oFontD )
nRow+=0.3
LinePrint( oPrn, nRow+=0.5, 3, nRow, 27, oPen )
nRow+=0.2
/* Controlamos el titulo a imprimir si es por importe neto o por importe total */
DO CASE
CASE nTypeList == 1
cTitValor := "Neto"
CASE nTypeList == 2
cTitValor := "Total"
ENDCASE
oPrn:CmSay( nRow,25.8, "Importe" ,oFontC )
nRow+=0.3
oPrn:CmSay( nRow, 3, "Apunte" ,oFontC )
oPrn:CmSay( nRow, 4.2, "G/I" ,oFontC )
oPrn:CmSay( nRow, 5, "Fecha" ,oFontC )
oPrn:CmSay( nRow, 6.4, "Doc" ,oFontC )
oPrn:CmSay( nRow, 8, "Actividad" ,oFontC )
oPrn:CmSay( nRow, 12, "Concepto" ,oFontC )
oPrn:CmSay( nRow,16.8, "Tipo Ingreso/Gasto",oFontC )
oPrn:CmSay( nRow,20.8, "Forma Cobro/Pago" ,oFontC )
oPrn:CmSay( nRow,25.8, cTitValor ,oFontC )
nRow+=0.5
LinePrint( oPrn, nRow, 3, nRow, 27, oPen )
Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function Detalle( oPrn, nRow, oFontC, oPen, lColor )
/*------------------------------------------------------------------------------*/
LOCAL nCLR := CLR_INGRESOS
/* Controlamos en que tipo de color imprimimos */
IF ApuConta->ApuTip == "G"
nCLR := CLR_GASTOS
END
/* Controlamos si imprimimos en color o en escala de grisis */
IF !lColor
nCLR := CLR_BLACK
END
nRow+=0.2
oPrn:CmSay( nRow, 3, ApuConta->ApuNum ,oFontC,,CLR_BLACK )
oPrn:CmSay( nRow, 4.4, ApuConta->ApuTip ,oFontC,,CLR_BLACK )
oPrn:CmSay( nRow, 5, TransForm( ApuConta->ApuFec, "99-99-9999" ),oFontC,,CLR_BLACK )
oPrn:CmSay( nRow, 6.4, ApuConta->ApuFac ,oFontC,,CLR_BLACK )
/* Actividad */
IF MiDosBuscar( "Activida", 1, ApuConta->ApuCac )
oPrn:CmSay( nRow, 8, StrCapFirst( SubStr( Activida->DesAct, 1, 30 ) ) ,oFontC,,CLR_BLACK )
END
/* Concepto */
oPrn:CmSay( nRow, 12, StrCapFirst( SubStr( ApuConta->ApuCon, 1, 40 ) ) ,oFontC,,CLR_BLACK )
/* Si es un tipo de apunte de Gastos */
IF ApuConta->ApuTip == "G"
IF MiDosBuscar( "TGasto", 1, ApuConta->ApuTga )
oPrn:CmSay( nRow, 16.8, StrCapFirst( SubStr( TGasto->TgDes, 1, 30 ) ) ,oFontC,,CLR_BLACK )
END
ELSE
/* Si es un tipo de apunte de Ingreso */
IF MiDosBuscar( "TIngreso", 1, ApuConta->ApuTin )
oPrn:CmSay( nRow, 16.8, StrCapFirst( SubStr( TIngreso->TiDes, 1, 30 )) ,oFontC,,CLR_BLACK )
END
END
/* Formas de pago/cobro */
IF MiDosBuscar( "FormaPC", 1, ApuConta->ApuFpa )
oPrn:CmSay( nRow, 20.8, StrCapFirst( SubStr( FormaPC->DesFpc, 1, 35 ) ) ,oFontC,,CLR_BLACK )
END
/* Imprimimos importe neto o importe total segun sea un Gasto o un Ingreso */
DO CASE
/* Importe neto */
CASE nTypeList == 1
oPrn:CmSay( nRow, 27, TransForm( ApuConta->ApuImp, "99,999,999.99" ) ,oFontC,,nCLR,,1 )
/* Importe total */
CASE nTypeList == 2
oPrn:CmSay( nRow, 27, TransForm( ApuConta->ApuTot, "99,999,999.99" ) ,oFontC,,nCLR,,1 )
ENDCASE
nRow+=0.2
Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function Totales( oPrn, nRow, oFont, oPen, aTotal, lOk, lColor )
/*------------------------------------------------------------------------------*/
LOCAL nCLR
LOCAL nTotal := 0
/* Si no hay registros a imprimir se muestra un mesaje y no imprimimos totales */
IF !lOk
nRow+=0.2
oPrn:CmSay( nRow,12, "*** No existen apuntes a imprimir ***",oFont,,CLR_BLACK )
Return NIL
END
/* Calculamos el saldo de gastos y ingresos */
nTotal := aTotal[3] - aTotal[2]
nRow+=0.2
LinePrint( oPrn, nRow, 3, nRow, 27, oPen )
nRow+=0.2
/* Impirmimos total de apuntes */
oPrn:CmSay( nRow, 3, "Total apuntes: " + LTrim( TransForm( aTotal[1], "999,999" ) ),oFont,, CLR_BLACK )
If aTotal[2] > aTotal[3]
nCLR := CLR_GASTOS
Else
If aTotal[2] < aTotal[3]
nCLR := CLR_INGRESOS
Else
nCLR := CLR_BLACK
End
End
/* Controlamos si imprimimos en color o en escala de grisis */
IF !lColor
nCLR := CLR_BLACK
END
oPrn:CmSay( nRow,20.8, "Saldo:",oFont,,CLR_BLACK )
oPrn:CmSay( nRow, 27, TransForm( nTotal, "99,999,999.99" ),oFont,, nCLR,,1 )
Return NIL