FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Impresion de informes (L&L, PDF, Access, ...)?
Posts: 44
Joined: Mon Nov 12, 2007 01:50 PM
Impresion de informes (L&L, PDF, Access, ...)?
Posted: Tue Feb 12, 2008 03:08 PM
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:

 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
Posts: 44
Joined: Mon Nov 12, 2007 01:50 PM
Fast Report
Posted: Wed Feb 13, 2008 10:30 PM

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

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Impresion de informes (L&L, PDF, Access, ...)?
Posted: Thu Feb 14, 2008 08:03 AM
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:

 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.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44
Joined: Mon Nov 12, 2007 01:50 PM
Me explico
Posted: Thu Feb 14, 2008 10:12 AM

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

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Me explico
Posted: Thu Feb 14, 2008 06:59 PM
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.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Impresion de informes (L&L, PDF, Access, ...)?
Posted: Fri Feb 15, 2008 07:55 AM

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/
Posts: 44
Joined: Mon Nov 12, 2007 01:50 PM
Clase TUtilPrn
Posted: Fri Feb 15, 2008 12:12 PM

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

Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Impresion de informes (L&L, PDF, Access, ...)?
Posted: Sat Feb 16, 2008 01:49 PM

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(21010,29710)
//
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

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Clase TUtilPrn
Posted: Mon Feb 18, 2008 07:51 AM
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 " + ::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()

::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 := ::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
****************************************

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Continue the discussion