Impresion de informes (L&L, PDF, Access, ...)?

Post Reply
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Impresion de informes (L&L, PDF, Access, ...)?

Post by ermatica »

Hasta ahora tenia un informe que es un impreso pre-impreso y que se rellenaba con una impresora matricial (oPrn:Say(...) ).Me ha surgido la necesidad de realizar el informe en A4 (completo), imprimirlo con laser que incluye campos, sus casillas, así como anagrama y texto en vertical. Consultando en este foro he visto una posible solución y es convertir el documento en pdf y rellenarlo con .xml:

Code: Select all

 Local cFicheroXML:= "C:\Temp\Prueba.xml" 
 Local cLugarAcrobat:="C:\Archivos de programa\Adobe\Reader 8.0\Reader\AcroRd32.exe /p/h"
 
 Local Proceso := "acrord32.exe"
 
 Winexec(cLugarAcrobat+" "+cFicheroXML)

 WaitSeconds(10)

  if file("KillProc.exe")
      waitrun("KillProc.exe " + ["] + Proceso + ["] ,1)
  end
Con esto abro el adobe reader, cargo el documento, imprimo y para cerrarlo, despues de 10 segundo utilizo una utilidad que tambien estaba mencionada en el foro.
Funciona, pero es algo lenta y quisiera saber de algun generador de informes que permita realizar este tipo de informes pero teniendo un mayor control (copias,impresora,etc.). Alguien con experiencia con este tipo de informes, valoro incluso la posibilidad de comprar algun generador de informes pero manejable desde FWH.

Gracias de antemano a todos.
Un cordial saludo.

FW 8.01 + Harbour + Borland
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Fast Report

Post by ermatica »

Hola a todos,

Alguien ha probado la version Beta de Fast Report para [x]Harbour?.
Me parece interesante pero me gustaria tener vuestra opinion.

Un cordial saludo
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Impresion de informes (L&L, PDF, Access, ...)?

Post by FiveWiDi »

ermatica wrote:Hasta ahora tenia un informe que es un impreso pre-impreso y que se rellenaba con una impresora matricial (oPrn:Say(...) ).Me ha surgido la necesidad de realizar el informe en A4 (completo), imprimirlo con laser que incluye campos, sus casillas, así como anagrama y texto en vertical. Consultando en este foro he visto una posible solución y es convertir el documento en pdf y rellenarlo con .xml:

Code: Select all

 Local cFicheroXML:= "C:\Temp\Prueba.xml" 
 Local cLugarAcrobat:="C:\Archivos de programa\Adobe\Reader 8.0\Reader\AcroRd32.exe /p/h"
 
 Local Proceso := "acrord32.exe"
 
 Winexec(cLugarAcrobat+" "+cFicheroXML)

 WaitSeconds(10)

  if file("KillProc.exe")
      waitrun("KillProc.exe " + ["] + Proceso + ["] ,1)
  end
Con esto abro el adobe reader, cargo el documento, imprimo y para cerrarlo, despues de 10 segundo utilizo una utilidad que tambien estaba mencionada en el foro.
Funciona, pero es algo lenta y quisiera saber de algun generador de informes que permita realizar este tipo de informes pero teniendo un mayor control (copias,impresora,etc.). Alguien con experiencia con este tipo de informes, valoro incluso la posibilidad de comprar algun generador de informes pero manejable desde FWH.

Gracias de antemano a todos.
Un cordial saludo.

FW 8.01 + Harbour + Borland
No se si entendido bien lo que pretendes pero, con las herramientas de que disponemos hoy en día creo que te estas compliando la vida.
No lo he probado pero yo lo enfocaría así: creo el documento con TUtilprn (o Timprime, no recuerdo como se llama) de The Full y además para el código de barras utilizas BarLib de Cayetano, lo escaneo y lo pongo de fondo de una ventana o diálogo, y los controles de la ventana/diálogo en modo transparente.

A ver.
Que alguién opine no sea que haya dicho alguna barbaridad.

Saludos
Carlos G.
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Me explico

Post by ermatica »

Es cierto, no lo expuse correctamente del todo.
Tengo un aplicativo, con varios mantenimientos en donde se introducen una serie de datos (nombres, dni, direcciones, marcas, modelos, matriculas, etc.) y desde uno de estos mantenimientos (Expedientes) debo imprimir una serie de informes, unos son en papel preimpreso copiativo, esto lo hago con (oPrn:Say...), otros son informes o listados en papel blanco, y ahora tengo la necesidad de imprimir un informe completo, es decir, no sólo los datos sino tambien la cuadricula, escudos, etc., por ejemplo, imprimir el MODEDLO 620, MODELO 110 de la Agencia Tributaria etc., pero a partir de los datos introducidos en los mantenimientos.

Saludos
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Me explico

Post by FiveWiDi »

ermatica wrote:Es cierto, no lo expuse correctamente del todo.
Tengo un aplicativo, con varios mantenimientos en donde se introducen una serie de datos (nombres, dni, direcciones, marcas, modelos, matriculas, etc.) y desde uno de estos mantenimientos (Expedientes) debo imprimir una serie de informes, unos son en papel preimpreso copiativo, esto lo hago con (oPrn:Say...), otros son informes o listados en papel blanco, y ahora tengo la necesidad de imprimir un informe completo, es decir, no sólo los datos sino tambien la cuadricula, escudos, etc., por ejemplo, imprimir el MODEDLO 620, MODELO 110 de la Agencia Tributaria etc., pero a partir de los datos introducidos en los mantenimientos.

Saludos
Entonces creo que con TUtilprn (o Timprime no recuerdo cual de los dos nombres tiene) de The Full lo podrás hacer.

Míratela con cariño y los ejemplos que dejó The Full, puedes hacer un documento como quieras (o casi al 99,99%).

El código de puntos de hacienda (España) no creo que tengamos con que obtenerlo/imprimirlo.

Saludos
Carlos G.
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

La agencia tributaria distribuye un software integrable dentro de nuestras aplicaciones que permite imprimir distintos modelos de informes(110, 115, 123, 130, 131, 202, 300, 310 , 311).

Se genera un ficehro ASCCI y se llama al programa de la AEAT que se encarga de imprimir el informe.

En teoria para tener acceso a este software se debe firmar un contrato con AEAT, donde declaras que eres una empresa desarrolladora de software y quieres incluir esa utilidad dentro de tus programas (puro formalismo).
Para mas info busca MIPF32 en el google.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Clase TUtilPrn

Post by ermatica »

Gracias por vuestra orientación (Carlos y Biel).

Me he bajado la clase que hay en UTILES de este foro. Contiene cuatro ficheros (makefile, timprime.prg, utlprn.ch y utilprn.prg):
- ¿es la ultima version de la clase?
- ¿donde podría ver algun ejemplo de su utilización? algo sencillo para empezar a trabajar con ella.

Un cordial saludo
Ernesto
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post by Manuel Aranda »

Hola ermatica:

Una forma rápida y sencilla de hacer lo que buscas es utilizando un fichero con la imagen del impreso y luego escribendo los datos encima.
Algo así como esto:

PRINTER oPrn NAME OemToAnsi("Preimpreso")
oPrn:SetSize(210*10,297*10)
//
oPrn:StartPage()
//
SayBitmap(0,0,21,29.7,"IMPRESO.BMP",oPrn)
oPrn:CmSay(6.6,3.5, Datos->Nombre, oFont4)
//
oPrn:EndPage()
//
ENDPRINT
////////////
Si quieres usar otro tipo de ficheros de imagen como PNG, JPG, etc.
entonces hazlo así:

oIT = TImage():Define( , "IMPRESO.JPG" )
aTam := oPrn:Cmtr2Pix(21,29.7)
oPrn:SayImage(0,0,oIT,aTam[1], aTam[2])

Espero te sirva.

Saludos,
Manuel Aranda
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Clase TUtilPrn

Post by FiveWiDi »

ermatica wrote:Gracias por vuestra orientación (Carlos y Biel).

Me he bajado la clase que hay en UTILES de este foro. Contiene cuatro ficheros (makefile, timprime.prg, utlprn.ch y utilprn.prg):
- ¿es la ultima version de la clase?
- ¿donde podría ver algun ejemplo de su utilización? algo sencillo para empezar a trabajar con ella.

Un cordial saludo
Ernesto
Seguro que The Full te puede decir si es la última versión.
Yo compilo y linco directamente timprime.prg y utilprn.prg junto con el resto de PRG de la aplicación, y donde los utilizo hago un include utilprn.ch

Yo creo que es una utilidad que permite realizar (casi) cualquier documento.
Vale la pena dedicarle una tarde a las clases timprimi y utilprn para ver como funcionan; mira que métodos tiene la clase y verás que puedes hacer mucho y fácil.
Debes tener en cuenta que para definir tu documento deberas crear una clase basada en TImprime, y será esta clase la que llames desde tu programa para imprimirlo.
Cuando hagas la primera las demás seran copiar y pegar modificando allá donde sea necesario.

Para imprimir el ejemplo que adjunto hago:
TFactuA1():New( JuvaArra, uIdenDocu, lSINOprevisual )

Te adjunto un ejemplo de como creo la clase:

****************************************

#include "Juva02.ch"
#INCLUDE "Utilprn.CH"
#DEFINE CLR_GREY 14671839

#DEFINE CMSEPARADOR 0.3


#ifdef __XPP__
#define Super ::TImprime
#endif


*Clase Para Imprimir Facturas.

// Fact.Pre-imprès A/Desc.+IVAs+Reten


CLASS TFACTUA1 FROM TIMPRIME

CLASSDATA lRegistered AS LOGICAL

DATA lprevisual
DATA oFnt_8
DATA oFnt_10B
DATA oFnt_10
DATA ArraJuva
DATA FileBmp
DATA oTdbfEntita
DATA oTDbfFactur
DATA oTDbfConFac
DATA oTDbfArticu
DATA oTDbfDestin

// Methods constructores
METHOD Init( cSpool)
METHOD New( JuvaArra, nNUMEFACT, lSINOprevisual ) CONSTRUCTOR

METHOD Cabecera()
METHOD Lineas()
METHOD Separator( nSpace ) // Este method es compartido por las dos clases
METHOD End( lPageCount )

ENDCLASS

METHOD Init( cSpool ) CLASS TFACTUA1


Super:Init( cSpool,,, !::lPrevisual )

DEFINE FONT ::oFnt_8 NAME "Arial" SIZE 0,-8 OF ::oPrn
DEFINE FONT ::oFnt_10B NAME "Arial" SIZE 0,-10 BOLD OF ::oPrn
DEFINE FONT ::oFnt_10 NAME "Arial" SIZE 0,-10 OF ::oPrn

Return self

METHOD End( lPageCount ) CLASS TFACTUA1

EndMsgNoWait( ::ArraJuva )

Super:End( lPageCount )

::oFnt_8:End()
::oFnt_10B:End()
::oFnt_10:End()

Self := Nil

Return Self

METHOD New( JuvaArra, nNUMEFACT, lSINOprevisual ) CLASS TFACTUA1

Local nOrden := 0
Local aFiltro := { 1, "Sense Filtre", "Recno()>0", JuvaArra[1][2][48][3] }
Local lRest := .F.

::ArraJuva := JuvaArra
::FileBmp := ::ArraJuva[1][2][43][3]


If nNUMEFACT = 0

/* Se establece el orden de la base.
-------------------------------*/
nOrden := Orden01( ::ArraJuva, Nil, "FACTUR", Nil, .F., 0 )[2]

/* Se establece el filtro de la base.
--------------------------------*/
aFiltro := Filtro01( ::ArraJuva, Nil, "FACTUR", Nil, Nil, .F., aFiltro, .F. )

Else

aFiltro := { 1, "Sense Filtre", ;
"(NUMEFACT>=Val('" + Str(nNUMEFACT) + "') .and. NUMEFACT<=Val('" + Str(nNUMEFACT) + "'))", ;
.F. }
EndIf

msgnowait2( JuvaArra, "Imprimint ...", "Cancel·lar...")

CursorWait()

/* Se comprueba que no se haya pulsado ESCAPE.
-----------------------------------------*/
If aFiltro[1] > 0

/* Se abren las bases.
-----------------*/
::oTdbfEntita := oDbfClon( ::ArraJuva, "ENTITA" )
::oTDbfEntita:GoTop():Load()
::oTdbfFactur := oDbfClon( ::ArraJuva, "FACTUR" )
::oTdbfConFac := oDbfClon( ::ArraJuva, "CONFAC" )
::oTdbfArticu := oDbfClon( ::ArraJuva, "ARTICU" )
::oTDbfDestin := oDbfClon( ::ArraJuva, "DESTIN" )

/* Se aplica el orden y el filtro a las bases.
-----------------------------------------*/
::oTDbfFactur:SetIndex( nOrden )
Aplifil( ::ArraJuva, ::oTdbfFactur, Nil, aFiltro[3] + " .and. !Deleted()" )

::oTDbfConFac:Setindex( 4 )
::oTDbfArticu:Setindex( 2 )


While ::oTdbfFactur:Locate( , , lRest ) .and. ValType( ::ArraJuva[1][1][1] ) = "O"

lRest := .T.
::oTdbfFactur:Load()

Aplifil( ::ArraJuva, ::oTdbfConFac, Nil, "NUMEFACT = Val('" + ;
AllTrim( Str( ::oTdbfFactur:NumeFact, 10,0 ) ) + ;
"') .and. !Deleted()" )


IMPRIME INIT "Impressió de la factura " + AllTrim( Str( ::oTdbfFactur:NumeFact, 15, 0 ) )

msgnowait2( JuvaArra, "Imprimint " + ::oPrn:GetModel(), "Cancel·lar...")

PAGE
::Cabecera()
::Lineas()
ENDPAGE

IMPRIME END .F.

SysRefresh()

EndDo

laTDbfEnd( ::ArraJuva, { ::oTdbfEntita, ::oTdbfFactur, ::oTdbfConFac, ::oTdbfArticu, ::oTDbfDestin } )

EndIf

CursorArrow()

Return .T.

METHOD Cabecera() CLASS TFACTUA1

Local oFont,oPen,oBrush
Local nColor := 35724527

DEFINE FONT oFont NAME "Arial" SIZE 0,-16 OF ::oPrn
DEFINE PEN oPen WIDTH 3 COLOR CLR_GREY
DEFINE BRUSH oBrush COLOR nColor

UTILPRN ::oUtil 5.8, 1.7 SAY "Factura:" + Str( ::oTdbfFactur:NumeFact, 9,0 ) FONT oFont COLOR CLR_BLACK

If ::oTdbfFactur:Totalbru < 0
UTILPRN ::oUtil 5.8, 7.0 SAY "ABONO" FONT oFont COLOR CLR_BLACK
EndIf

UTILPRN ::oUtil 6.5, 1.7 SAY "Data: " + DToC( ::oTdbfFactur:DataFact ) FONT oFont COLOR CLR_BLACK


/* Datos cliente.
-------------*/
If ::oTDbfFactur:TIPUPERS = 1
UTILPRN ::oUtil 4, 10.7 SAY RTrim( ::oTdbfFactur:NOM ) + " " + ;
RTrim( ::oTdbfFactur:COGNOM1 ) + " " + ;
RTrim( ::oTdbfFactur:COGNOM2 ) ;
FONT ::oFnt_10B COLOR CLR_BLACK
ELSE
UTILPRN ::oUtil 4, 10.7 SAY ::oTdbfFactur:COGNOM1 + ;
::oTdbfFactur:COGNOM2 + ;
::oTdbfFactur:NOM ;
FONT ::oFnt_10B COLOR CLR_BLACK
ENDIF

UTILPRN ::oUtil 4.5, 10.7 SAY ::oTdbfFactur:ADRECA FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 5, 10.7 SAY Right( Transform( ::oTdbfFactur:CODIPOST + 100000, "999999" ),5) + ;
"-" + AllTrim(::oTdbfFactur:POBLACIO) ;
FONT ::oFnt_10B COLOR CLR_BLACK

UTILPRN ::oUtil 5.5, 10.7 SAY "(" + AllTrim(::oTdbfFactur:PROVINCI) + ")" ;
FONT ::oFnt_10B COLOR CLR_BLACK

UTILPRN ::oUtil 6.0, 10.7 SAY ::oTdbfFactur:NIF FONT ::oFnt_10B COLOR CLR_BLACK


/* Cajas de la cabecera del encolumnado.
-----------------------------------*/
UTILPRN ::oUtil BOX 8, 1.5 TO 9, 3.5
UTILPRN ::oUtil BOX 8, 3.5 TO 9, 4.5
UTILPRN ::oUtil BOX 8, 4.5 TO 9, 14
UTILPRN ::oUtil BOX 8, 14 TO 9, 15.5
UTILPRN ::oUtil BOX 8, 15.5 TO 9, 17.5
UTILPRN ::oUtil BOX 8, 17.5 TO 9, 20

UTILPRN ::oUtil 8.2, 2 SAY "Mes" FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 8.2, 3.7 SAY "Dia" FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 8.2, 6.5 SAY "Descripció/Destí" FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 8.2, 14.2 SAY "Unitats" FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 8.2, 16 SAY "Preu U." FONT ::oFnt_10B COLOR CLR_BLACK
UTILPRN ::oUtil 8.2, 18.2 SAY "Total" FONT ::oFnt_10B COLOR CLR_BLACK


/* Cajas de los totales.
-------------------*/
UTILPRN ::oUtil BOX 24.6, 1.5 TO 27.1, 8

UTILPRN ::oUtil BOX 24.6, 8 TO 27.1, 14

UTILPRN ::oUtil BOX 24.6, 14 TO 27.1, 20

oFont:End()
oPen:End()
oBrush:End()

::oUtil:Reset() //Valores por defecto

::nLinea := 9.5 // comenzamos a 10 cms

RETURN NIL

METHOD Lineas() CLASS TFACTUA1

Local lRest := .F.
Local lRest2 := .F.
Local nEPreu := 0
Local nFPreu := 0
Local nImport := 0

// Sumes parcials
Local nEDescRapp := 0
Local nEDescPron := 0
Local nERetencio := 0

// Sumes totals.
Local nFDescRapp := 0
Local nFDescPron := 0
Local nFRetencio := 0
Local nFReteIRPF := 0

Local aIVA := {}
Local nIVA := 0
Local nFIVA := 0
Local nFBI := 0
Local nContador := 0
Local uDummy := 0

/* Se cambia el fin del área de impresión.
-------------------------------------*/
::nEndLine := ::nEndLine - 4

While ::oTdbfConFac:Locate( , , lRest ) .and. ValType( ::ArraJuva[1][1][1] ) = "O"

lRest := .T.
lRest2 := .F.

::oTdbfConFac:Load()

/* Se imprime mes, año, día y descripción si el precio es <> 0.
Si la cantidad es <> 0. Maite 05-02-2003
----------------------------------------------------------*/
If ::oTdbfConFac:QUANUNIT <> 0
UTILPRN ::oUtil Self:nLinea, 2 ;
SAY juvcmonth(::oTdbfConFac:DATAALBA,3,1)+"/"+right(str(year(::oTdbfConFac:DATAALBA),4,0),2) ;
FONT ::oFnt_10 COLOR CLR_BLACK
UTILPRN ::oUtil Self:nLinea, 3.8 SAY str(day(::oTdbfConFac:DATAALBA),2,0) ;
FONT ::oFnt_10 COLOR CLR_BLACK
EndIf

Aplifil( ::ArraJuva, ::oTdbfArticu, Nil, "CODIARTI = '" + ::oTdbfConFac:CODIARTI + ;
"' .and. !Deleted()" )

/* Se imprime el artículo.
---------------------*/
If ::oTdbfArticu:Locate( , , lRest2 )
lRest2 := .T.
::oTdbfArticu:Load()
UTILPRN ::oUtil Self:nLinea, 4.8 SAY ::oTdbfArticu:DESCRIPC ;
FONT ::oFnt_8 COLOR CLR_BLACK
EndIf

While ::oTdbfArticu:Locate( , , lRest2 ) .and. ValType( ::ArraJuva[1][1][1] ) = "O"

::oTdbfArticu:Load()
ISEPARATOR CMSEPARADOR
UTILPRN ::oUtil Self:nLinea, 4.8 SAY ::oTdbfArticu:DESCRIPC ;
FONT ::oFnt_8 COLOR CLR_BLACK
EndDo

Aplifil( ::ArraJuva, ::oTdbfDestin, Nil, "CODIDEST = Val('" + Str(::oTdbfConFac:CODIDEST) + ;
"') .and. !Deleted()" )

/* Se imprime el destino.
--------------------*/
lRest2 := .F.
If ::oTdbfDestin:Locate( , , lRest2 )
::oTdbfDestin:Load()
ISEPARATOR CMSEPARADOR
UTILPRN ::oUtil Self:nLinea, 4.8 SAY Left(RTrim(::oTdbfDestin:ADRECA) + "-" + ;
RTrim(::oTdbfDestin:POBLACIO) + space(50), 50 ) ;
FONT ::oFnt_8 COLOR CLR_BLACK
EndIf

/* Se imprimen otros datos si el precio es <> 0.
-------------------------------------------*/
If ::oTdbfConFac:PREUUNIT <> 0

/* Se imprime la cantidad.
---------------------*/
UTILPRN ::oUtil Self:nLinea, 15.0 SAY Transform( ::oTdbfConFac:QUANUNIT, "@E 9,999,999.99" ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

/* Se imprime tipo artículo.
-----------------------*/
UTILPRN ::oUtil Self:nLinea, 15.1 SAY ::oTdbfArticu:tipuunit ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT



/* Se calcula el precio.
-------------------*/
nEPreu := nContravalor( ::ArraJuva, ;
::oTdbfConFac:PREUUNIT, ;
::oTdbfConFac:MNDA, ;
::oTdbfFactur:MNDA )

/* Se imprime el precio.
-------------------*/
UTILPRN ::oUtil Self:nLinea, 17.2 ;
SAY Transform( nEPreu, ;
GetPicture( "N", 13, nDecMnda( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ;
) FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

/* Se imprime el total.
------------------*/
nImport := ( nEPreu * ::oTdbfConFac:QUANUNIT )

nFPreu := nFPreu + nImport

UTILPRN ::oUtil Self:nLinea, 19.7 ;
SAY Transform( nImport, ;
GetPicture( "N", 13, nDecMnda( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ;
) FONT ::oFnt_8 COLOR CLR_BLACK RIGHT


/* Se calculan los descuentos del movimiento y se añaden a los de la factura.
------------------------------------------------------------------------*/
nEDescRapp := nImport * ::oTdbfConFac:DESCRAPP / 100
nEDescPron := ( nImport - nEDescRapp ) * ::oTdbfConFac:DESCPRON / 100
nERetencio := (( nImport - nEDescRapp) - nEDescPron ) * ::oTdbfFactur:PTGRETEN / 100


nFDescRapp := nFDescRapp + nEDescRapp
nFDescPron := nFDescPron + nEDescPron
nFRetencio := nFRetencio + nERetencio


/* Se captura el tipo de IVA y la base imponible.
--------------------------------------------*/
If ( nIVA := AScan( aIVA, { |eIVA| eIVA[1] = ::oTdbfConFac:TIPUIVA } ) ) > 0
aIVA[ nIVA ][ 2 ] := aIVA[ nIVA ][ 2 ] + ( nImport - nEDescRapp - nEDescPron - nERetencio )
nIVA := 0
Else
AADD( aIVA, { ::oTdbfConFac:TIPUIVA, ( nImport - nEDescRapp - nEDescPron - nERetencio ) } )
EndIf

EndIf

ISEPARATOR CMSEPARADOR
ISEPARATOR CMSEPARADOR

SysRefresh()

End While


nFReteIRPF := (((nFPreu - nFDescRapp) - nFDescPron) - nFRetencio) * ::oTdbfFactur:PTGIRPF / 100

If ValType( ::ArraJuva[1][1][1] ) = "O"

/* Se restaura el fin del área de impresión.
---------------------------------------*/
::nEndLine := ::oPrn:nVertSiZe() / 10 - 1 // En Cms


/* Se imprime los datos el vencimiento.
----------------------------------*/
UTILPRN ::oUtil 24.7, 2 SAY "Data i import venciment:" ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.1, 2 SAY ::oTDbfFactur:VENCIMEN ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.1, 6 SAY ;
Transform( Round( ::oTDbfFactur:IMPOVENC, nDecMnda2( ::ArraJuva, ::oTDbfFactur:MNDA)), ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT


/* Se imprime la forma de pago.
--------------------------*/
UTILPRN ::oUtil 26.3, 2 SAY "Forma de pagament:" ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

If ( uDummy := AScan( ArForPagCod( ::ArraJuva ), {| e | e == ::oTDbfFactur:FORMPAGA } ) ) > 0
UTILPRN ::oUtil 26.7, 2 SAY ArForPagLit( ::ArraJuva )[uDummy] ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT
EndIf

/* Se imprime los datos del I.V.A.
-----------------------------*/
UTILPRN ::oUtil 24.7, 8.5 SAY "Tipus I.V.A." ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 24.7, 11 SAY "B.I." ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 24.7, 12 SAY "Quota I.V.A." ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT


For nContador := 1 To Len( aIVA )

UTILPRN ::oUtil 24.7 + (nContador * CMSEPARADOR), 9.5 SAY Transform( aIVA[nContador][1], "@E 999.99") + "%" ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

UTILPRN ::oUtil 24.7 + (nContador * CMSEPARADOR), 11.5 SAY Transform( aIVA[nContador][2], ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

UTILPRN ::oUtil 24.7 + (nContador * CMSEPARADOR), 13.5 ;
SAY Transform( aIVA[nContador][2] * aIVA[nContador][1] / 100 , ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

nFIVA := nFIVA + ( aIVA[nContador][2] * aIVA[nContador][1] / 100 )
nFBI := nFBI + aIVA[nContador][2]

EndFor

UTILPRN ::oUtil 26.7, 11 SAY "Imports en " + cNameMnda( ::ArraJuva, ::oTdbfFactur:Mnda) ;
FONT ::oFnt_8 COLOR CLR_BLACK CENTER

UTILPRN ::oUtil 24.7, 14.5 SAY "Total" ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 24.7, 19.7 SAY Transform( nFPreu, ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT


If nFDescRapp <> 0
UTILPRN ::oUtil 25.0, 14.5 SAY "Rappel" ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.0, 19.7 SAY Transform( -1 * nFDescRapp, ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT

EndIf


If nFDescPron <> 0
UTILPRN ::oUtil 25.3, 14.5 SAY "Pron.pag." ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.3, 19.7 SAY Transform( -1 * nFDescPron, ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT
EndIf


If nFRetencio <> 0
UTILPRN ::oUtil 25.6, 14.5 SAY "Retenció " + Transform(::oTdbfFactur:PTGRETEN, "@E 9,999.99" ) + "%";
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.6, 19.7 SAY Transform( -1 * nFRetencio, ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT
EndIf


If nFReteIRPF <> 0
UTILPRN ::oUtil 25.9, 14.5 SAY "Ret. IRPF " + Transform(::oTdbfFactur:PTGIRPF, "@E 999.99" ) + "%";
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 25.9, 19.7 SAY Transform( -1 * nFReteIRPF, ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT
EndIf


UTILPRN ::oUtil 26.3, 14.5 SAY "Quota I.V.A." ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 26.3, 19.7 SAY Transform( Round( nFIVA, nDecMnda2( ::ArraJuva, ::oTdbfFactur:MNDA ) ), ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT



UTILPRN ::oUtil 26.7, 14.5 SAY "TOTAL FACTURA" ;
FONT ::oFnt_8 COLOR CLR_BLACK LEFT

UTILPRN ::oUtil 26.7, 19.7 SAY Transform( Round( nFPreu - nFDescRapp - nFDescPron - nFRetencio - nFReteIRPF + nFIVA, ;
nDecMnda2( ::ArraJuva, ::oTdbfFactur:MNDA ) ), ;
GetPicture( "N", 13, nDecMnda2( ::ArraJuva, ::oTdbfFactur:Mnda ), .T. ) ) ;
FONT ::oFnt_8 COLOR CLR_BLACK RIGHT


EndIf

RETURN .T.

METHOD Separator( nSpace ) CLASS TFACTUA1

// Si habido un salto de pagina despues de una linea de separacion
if Super:Separator( nSpace ) // Atentos. Llamada a la TImprime.
::Cabecera()
//::nLinea := 5
endif

Return Self
****************************************
Post Reply