Ayuda -imprimir factura con columna texto tipo memo

Ayuda -imprimir factura con columna texto tipo memo

Postby carlos vargas » Mon Sep 09, 2013 10:20 pm

Asi estimados, me urge su asistencia en esto, el tipico caso de imprimir una factura, con encabezado y detalle.
pero aca la particularidad es que una de las columnas es un campo texto con tamaño variable. y es muy importante.

Code: Select all  Expand view  RUN

Cantidad   Descripcion                                                               Precio Unit.    Precio Total.
=======   ============================================   ===========   ===========
     1         Este campo es una descripcion con un tamaño vari-        1,200.00          1,200.00
               able, a como puede tener una fila de alto, puede te-
                ner cuatro, cinco, seis. :-(
     1         Este es otro campo es un tamaño variable                         200.00            200.00
 

he aquí mi dilema, como hacer esto?, lo he intentado de varias formas, campos cortados en piezas. etc.
tomando en cuenta que la fuentes es ancho variable, he usado para mis prueba la clase tprinter ya que es la que me permite
ubicar los campos en posiciones en cm especificas.

creo que a tprinter le falta un metodo para imprimir en un area definida y haga un corte automático de palabra.

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby noe aburto » Mon Sep 09, 2013 11:08 pm

Que tal, ojala te sirva, yo lo uso para imprimir textos justificados, tipo DOS.


cDesc:='***('+upper(DescNum(abs(tot_car)))+')***, CANTIDAD ABONADA A NUESTRA'+;
' CUENTA NO. '+alltrim(ban->num_cta)+' DE '+alltrim(ban->nom_ban)+;
' SEGUN COPIA DE FICHA DE DEPOSITO DEL DIA '+ceros(day(dFecPag),2)+' DE '+MesLetra(dFecPag)+' DEL '+str(year(dFecPag),4)+;
' Y QUE APLICAMOS A LO SIGUIENTE:'


inicia impresion con fuente tipo texto

aTexto:=ParteMemo(cDesc,55) // ABAJO LA FUNCION

for i:=1 to len(aTexto)
if substr(aTexto[i],len(aTexto[i]),1)==chr(20)
@ nSup+i,nIzq+05 dato substr(aTexto[i],1,len(aTexto[i])-1) en oReci
else
@ nSup+i,nIzq+05 dato Justifica(aTexto[i],55,i%3) en oReci // ABAJO LA FUNCION
endif
next

termina pagina
termina impresion


// --- Parte memo
function ParteMemo(mTex,nLong)
local aTex:={},cTex,i,nPrinc,nUltEsp

cTex:=memotran(mTex,chr(20),chr(29))
nPrinc:=nUltEsp:=1
for i:=1 to len(cTex)
while substr(cTex,i,1)==chr(29)
cTex:=stuff(cTex,i,1,'')
if i>len(cTex)
exit
endif
end
if i>len(cTex)
exit
endif
if substr(cTex,i,1)==chr(20)
aadd(aTex,substr(cTex,nPrinc,i-nPrinc+1))
nPrinc:=nUltEsp:=i+1
loop
endif
if substr(cTex,i,1)==' '
nUltEsp:=i
endif
if i-nPrinc+1>nLong
do case
case nUltEsp==nPrinc
aadd(aTex,substr(cTex,nPrinc,nLong))
nPrinc:=nUltEsp:=i
case nUltEsp==i
aadd(aTex,substr(cTex,nPrinc,nLong))
nPrinc:=nUltEsp:=i+1
otherwise
aadd(aTex,substr(cTex,nPrinc,nUltEsp-nPrinc))
nPrinc:=nUltEsp:=nUltEsp+1
endcase
endif
next
if len(trim(substr(cTex,nPrinc)))<>0
aadd(aTex,substr(cTex,nPrinc))
endif
if substr(aTex[len(aTex)],len(aTex[len(aTex)]),1)<>chr(20)
aTex[len(aTex)]+=chr(20)
endif
return aTex


// --- Justifica un texto
function Justifica(cTex,nLong,nDonde)
local aEspacio:={},i,j,nFaltante,lEspacio

default nDonde:=1
cTex:=trim(cTex)
if len(cTex)>=nLong
return substr(cTex,1,nLong)
endif
nFaltante:=nLong-len(cTex)
lEspacio:=.f.
for i:=1 to len(cTex)
if substr(cTex,i,1)==' '
if lEspacio;aadd(aEspacio,i);endif
lEspacio:=.f.
else
lEspacio:=.t.
endif
next
if len(aEspacio)==0
return padr(cTex,nLong,'-')
endif
do case
case nDonde==0;j:=len(aEspacio)
case nDonde==1;j:=min(len(aEspacio),nFaltante)
otherwise; j:=min(int((len(aEspacio)+nFaltante)/2),len(aEspacio))
endcase
for i:=1 to min(len(aEspacio),nFaltante)
cTex:=substr(cTex,1,aEspacio[j])+substr(cTex,aEspacio[j])
j--
next
cTex:=Justifica(cTex,nLong)
return cTex
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
User avatar
noe aburto
 
Posts: 418
Joined: Wed Nov 26, 2008 6:33 pm
Location: Morelia, Mich. Mexico.

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby noe aburto » Mon Sep 09, 2013 11:23 pm

Se me pasaba, si usas estas funciones en tu impresion, para que no tengas problema con las fuentes usa una font:

DEFINE FONT oFontN NAME "SUPER DRAFT 10CPI" SIZE 0,-9

DEFINE FONT oFontC NAME "SUPER DRAFT 17CPI" SIZE 0,-5

y te quedara de lujo justificado con el texto que quieras automatico
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
User avatar
noe aburto
 
Posts: 418
Joined: Wed Nov 26, 2008 6:33 pm
Location: Morelia, Mich. Mexico.

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Antonio Linares » Tue Sep 10, 2013 8:42 am

Carlos,

Puedes usar la función DrawText() del API de Windows incluida en FWH

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx

prueba con el flag DT_WORDBREAK
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Francisco Horta » Wed Sep 11, 2013 3:40 pm

Carlos,
yo lo hago asi:

prueba a usar la font "ARIAL" ó "LUCIDA CONSOLE"

nxLen := 50
nxLineas := MlCount( ::oQry:FieldGet("comentarios"), nxLen )
pRen := 3.80 + 00.20
for x := 1 to nxLineas
cLine := MemoLine( ::oQry:FieldGet("comentarios"), nxLen, x )
oPrn:cmSay( pRen, 14.30, cLine, oFnt[5] )
pRen += 00.20
next

saludos
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby groiss » Wed Sep 11, 2013 5:06 pm

Antonio Linares wrote:Carlos,

Puedes usar la función DrawText() del API de Windows incluida en FWH

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx

prueba con el flag DT_WORDBREAK

Antonio:
¿Como se usaría desde fivewin?.
veo esta función muy interesante,mas cuando he tenido que imprimir observaciones de un tratamiento en un box del objeto printer, y veo que con esto quedaría perfectamente justificado.
Un saludo y mil gracias
groiss
 
Posts: 225
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Antonio Linares » Wed Sep 11, 2013 7:48 pm

Jose Luis,

En el código fuente de FWH se usa en diversos sitios. Un ejemplo:

#define DT_TOP 0x00000000
#define DT_LEFT 0x00000000
#define DT_CENTER 0x00000001
#define DT_RIGHT 0x00000002
#define DT_VCENTER 0x00000004
#define DT_BOTTOM 0x00000008
#define DT_WORDBREAK 0x00000010
#define DT_SINGLELINE 0x00000020
#define DT_EXPANDTABS 0x00000040
#define DT_TABSTOP 0x00000080
#define DT_NOCLIP 0x00000100
#define DT_EXTERNALLEADING 0x00000200
#define DT_CALCRECT 0x00000400
#define DT_NOPREFIX 0x00000800

DrawText( hDC, cText, { nRow + 35, nCol - 5, nRow + 48, nCol + 40 }, DT_WORDBREAK )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Armando » Thu Sep 12, 2013 2:33 pm

Antonio:

A partir de que versión se incluyó la función DrawText() ??

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Antonio Linares » Thu Sep 12, 2013 4:34 pm

Armando,

Desde casi el principio :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Armando » Thu Sep 12, 2013 5:13 pm

Gracias maestro !

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby groiss » Thu Sep 12, 2013 5:22 pm

Muchas gracias, Antonio, en cuanto me incorpore de las vacacionesme pongo con ella, pues el ema me ha creado mas de un dolor de cabeza.
Un saludo y mil gracias
José Luis
groiss
 
Posts: 225
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Manuel Valdenebro » Fri Apr 18, 2014 4:51 pm

Tengo un documento con Tprinter, don he sustituido un campo caracter por otro Memo (mas grande) y logicamente no funciona con el siguiente código:

oPrn:CmSay ( nFilReg+0.5, 4.5, mcomer->NOTAS, oFon3, , ROJO )

Si le pongo ancho,se puede ver solo la primera linea del memo oPrn:CmSay ( nFilReg+0.5, 4.5, mcomer->NOTAS, oFon3, 2500, ROJO )

Logicamente debería usar DrawText.

He probado con nAltoTexto := DrawText( hdc, mcomer->NOTAS, { nFilReg + 0.5, 4.5, nFilReg + 10, 2500 }, DT_WORDBREAK ) y compruebo que me devuelve siempre un valor superior a cero, con el número de lineas del DRAWTEXT con la cual la función es correcta. Pero no aparece nada en el documento.

He probado con oPrn:CmSay ( nFilReg+0.5, 4.5, DrawText( hdc, mcomer->NOTAS, { nFilReg + 0.5, 4.5, nFilReg + 10, 2500 }, DT_WORDBREAK ), oFon3, , NEGRO )

Pero nada. ¿que tengo que hacer para que aparezca en el documento)
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby Manuel Valdenebro » Tue Apr 22, 2014 5:36 am

Manuel Valdenebro wrote:Tengo un documento con Tprinter, don he sustituido un campo caracter por otro Memo (mas grande) y logicamente no funciona con el siguiente código:

oPrn:CmSay ( nFilReg+0.5, 4.5, mcomer->NOTAS, oFon3, , ROJO )

Si le pongo ancho,se puede ver solo la primera linea del memo oPrn:CmSay ( nFilReg+0.5, 4.5, mcomer->NOTAS, oFon3, 2500, ROJO )

Logicamente debería usar DrawText.

He probado con nAltoTexto := DrawText( hdc, mcomer->NOTAS, { nFilReg + 0.5, 4.5, nFilReg + 10, 2500 }, DT_WORDBREAK ) y compruebo que me devuelve siempre un valor superior a cero, con el número de lineas del DRAWTEXT con la cual la función es correcta. Pero no aparece nada en el documento.

He probado con oPrn:CmSay ( nFilReg+0.5, 4.5, DrawText( hdc, mcomer->NOTAS, { nFilReg + 0.5, 4.5, nFilReg + 10, 2500 }, DT_WORDBREAK ), oFon3, , NEGRO )

Pero nada. ¿que tengo que hacer para que aparezca en el documento)


¿Alguna alma caritativa que me dé una ayudita?
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby hmpaquito » Tue Apr 22, 2014 6:25 am

Manuel,

Para imprimir yo utilizo la estupenda clase UtilPrn de Rafa Thefull. Esa clase lleva impresion de campos memo. La clase lleva los fuentes, por lo que debe ser facil coger "lo que se necesite" para adaptarlo a tu situacion.

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Ayuda -imprimir factura con columna texto tipo memo

Postby cnavarro » Tue Apr 22, 2014 11:43 am

Manuel,
tendrás que fabricarte una funcion para imprimir los memos
Basado en el codigo que puso el compañero Francisco Horta unos post más arriba
Code: Select all  Expand view  RUN

Function PintaMemo( oPrn, nRow, nCol, nWidth, cMemo, oFont )
Local cLine  := ""
Local nLineas := 0
Local x
Local nAvanza  := 0
    //nWidth ancho de columna
    nLineas := MlCount( cMemo, nWidth  )
    nAvanza := nRow
    for x := 1 to nLineas
        cLine := MemoLine( cMemo, nWidth, x )
        oPrn:cmSay( nAvanza, nCol, cLine, oFont )
        nAvanza += oFont:nHeight + 0.2    // Esto será lo más dificil aunque con oFont:nHeight podrás calcular algo
   next
Return nLineas
 


No lo he probado, pero espero te de por lo menos alguna luz
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 21 guests