Impresion de Facturas Continuas

172 views
Skip to first unread message

Arnaldo Toledano

unread,
Mar 17, 2017, 10:26:40 AM3/17/17
to publice...@googlegroups.com

Gente, necesito si alguien me puede ayudar con lo siguiente.
Espero poder explicarme bien.

Para imprimir Facturas tengo el siguiente código.
paso un seudo código.

nCopias=_Parametros.ParCopias

For x=1 To nCopias

            REPORT FORM Factura

endfor       

Supongamos dos copias.
Invoco dos veces REPORT FORM

Lo que quiero hacer, es directamente invocar una sola vez REPORT FORM y
que este se encargue de repetir la factura dos veces o la que el usuario defina, dos, tres, cuatro copias.
No encuentro la manera lógica de hacerlo.
Si alguien lo hace, por favor me puede pasar como lo hace.

Gracias


Arnaldo Toledano

Ing. Bernardo José Martínez Pérez

unread,
Mar 17, 2017, 10:59:56 AM3/17/17
to publice...@googlegroups.com
Porque no le pones report form reporte to print prompt preview y que el usuario ponga la cantidad de copias que requiera.

Enviado desde mi Windows Phone

-----Mensaje original-----
De: "Arnaldo Toledano" <arnaldo....@gmail.com>
Enviado el: ‎17/‎03/‎2017 08:26
Para: "publice...@googlegroups.com" <publice...@googlegroups.com>
Asunto: [vfp] Impresion de Facturas Continuas

Arnaldo Toledano

unread,
Mar 17, 2017, 11:11:03 AM3/17/17
to publice...@googlegroups.com
Muchos clientes prefieren imprimir PDF, por lo factura electrónica.
Y es común, que hagan 30 o mas facturas juntas.
Es muy engorroso para ellos interactuar con el PREVIEW

Gracias Bernardo

Arnaldo Toledano

Jose Antonio Blasco

unread,
Mar 17, 2017, 12:10:21 PM3/17/17
to Comunidad de Visual Foxpro en Español
Arnaldo, con la siguiente función, le puedes establecer en numero de copias al propio formato del report, con lo que no necesitarías mostrar la seleccion de impresora.

Function NumCopias
    *------------------------------------------
    * Parametros:
    *  lcFRX    = archivo frx con el formato
    *  lnCopies = nº de copias
    *
    * Uso:
    *    =NumCopias('mireport',3)
    *------------------------------------------
    Lparameter lcFRX, lnCopies
    Local lcNewExpr, lnStartCopiesLine, lcStartAtCopiesLine, lnEndCopiesLine, ;
        lnLenCopiesLine, lcTop, lcBottom, lcAlias
    #Define vfCRLF Chr(13) + Chr(10)

    lcAlias=Alias()

    lcFRX = Forceext(lcFRX, 'frx')

    Use (lcFRX) In 0 Alias FrxCopias
    Select FrxCopias
    Goto Top
    Locate For objtype = 1 And objCode = 53

    If Empty(Expr)
        lcNewExpr = "COPIES=" + Allt(Str(lnCopies)) + vfCRLF
    Else
        lnStartCopiesLine = Atc("COPIES", Expr)

        If lnStartCopiesLine <> 0
            lcStartAtCopiesLine = Substr(Expr, lnStartCopiesLine)
            lnEndCopiesLine = Atc(vfCRLF, lcStartAtCopiesLine)
            lnLenCopiesLine = Len(Substr(lcStartAtCopiesLine, 1, lnEndCopiesLine))
            lcTop = Substr(Expr, 1, lnStartCopiesLine - 1)
            lcBottom = Substr(Expr, (Len(lcTop) + lnLenCopiesLine))
            lcNewExpr  = lcTop + "COPIES=" + Allt(Str(lnCopies)) + lcBottom
        Else
            lcNewExpr = Expr + "COPIES=" + Allt(Str(lnCopies)) + vfCRLF
        Endif
    Endif

    Replace Expr With lcNewExpr
    Use In FrxCopias

    If !Empty(lcAlias)
        Select &lcAlias
    Endif
Endfunc



Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


El 17 de marzo de 2017, 16:10, Arnaldo Toledano <arnaldo....@gmail.com> escribió:
Muchos clientes prefieren imprimir PDF, por lo factura electrónica.
Y es común, que hagan 30 o mas facturas juntas.
Es muy engorroso para ellos interactuar con el PREVIEW

Gracias Bernardo

Arnaldo Toledano


El 17/03/2017 a las 11:59 a.m., Ing. Bernardo José Martínez Pérez escribió:
Porque no le pones report form reporte to print prompt preview y que el usuario ponga la cantidad de copias que requiera.

Enviado desde mi Windows Phone

-----Mensaje original-----
De: "Arnaldo Toledano" <arnaldo....@gmail.com>
Enviado el: ‎17/‎03/‎2017 08:26

Arnaldo Toledano

unread,
Mar 17, 2017, 4:19:16 PM3/17/17
to publice...@googlegroups.com

José,
Funciona la FUNCION, valga la redundancia, pero en el caso que imprimas un PDF, con FoxyPreviewer,
imprime solo una copia.

Segure investigando.

Gracias José, muy buena tu función.
Lo que no me he fijado, es si vuelve la cantidad de copias al original, una vez impreso.
Supongo que NO.


Arnaldo Toledano

Idalberto Gonzalez

unread,
Mar 17, 2017, 5:46:35 PM3/17/17
to Comunidad de Visual Foxpro en Español

Hola.

Prueba con esto:

nCopias=_Parametros.ParCopias
_pcopies=nCopias

printjob
REPORT FORM factura
endprintjob

_pcopies=1

Arnaldo Toledano

unread,
Mar 20, 2017, 10:19:40 AM3/20/17
to publice...@googlegroups.com

Gracias Idalberto
No me funciona.


Arnado Toledano

Idalberto Gonzalez

unread,
Mar 20, 2017, 11:19:48 AM3/20/17
to Comunidad de Visual Foxpro en Español
No se que puede estar pasando. Uso estos comandos y siempre me ha funcionado bien de esa manera.

Arnaldo Toledano

unread,
Mar 20, 2017, 11:21:35 AM3/20/17
to publice...@googlegroups.com
OJO.

Estoy imprimiendo en un archivo PDF.

Gracias Idalberto


Arnaldo Toledano

Marcos Godoy

unread,
Mar 20, 2017, 2:21:26 PM3/20/17
to publice...@googlegroups.com
Arnaldo, esta es una solución fea pero funciona perfecta,
creas un cursor  con todos los datos de renglones de las facturas y de las cabeceras juntos, 
creas otro cursor identico  pero vacio con un campo numerico  copia n(5), 
haces un loop n veces sobre el primer cursor, poblando el segundo, pero con el numero de copia  agregado
en el reporte haces cambiar de hora cada vez que cambie este valor y de paso lo usas para poner (original o copia) 
segun sea, 

Saludos

Marcos Godoy

unread,
Mar 20, 2017, 2:22:07 PM3/20/17
to publice...@googlegroups.com
perdon cambiar de pagina, jaaja

Arnaldo Toledano

unread,
Mar 20, 2017, 3:22:32 PM3/20/17
to publice...@googlegroups.com

algo por el estilo se me habia ocurrido hacer unos dias.
Pero no le encontraba la vuelta para saltar a la proxima pagina.
Voy a probar con ejectar la hoja, como vos indicas, cuando cambia el nro. de copias


Gracias Marcos


Arnaldo Toledano

Message has been deleted

Mario López

unread,
Mar 20, 2017, 6:26:33 PM3/20/17
to Comunidad de Visual Foxpro en Español

@Arnaldo: lo más sencillo es hacer algo como

nCopias = 5        && Cantidad de copias

sCursorOri = [Acum]
SELECT 0000 AS Nro_Copia, * FROM (sCursorOri) WHERE .F. INTO CURSOR c_Cur_Report READWRITE

FOR nCopia = 1 TO nCopias
    SELECT nCopia AS Nro_Copia, * FROM (sCursorOri) INTO CURSOR c_Tmp
    SELECT c_Cur_Report
    APPEND FROM (DBF("c_Tmp"))
    USE IN c_Tmp
NEXT

SELECT c_Cur_Report
* BROWSE NOCAPTION 
REPORT FORM .....

Con lo que te quedaría en c_Cur_Report el cursor de reporte multiplicado por la cantidad de copias, después creás en el reporte un grupo por Nro_Copia tildando la opción de iniciar el grupo en una nueva página, pasá todo lo que tenés en Header a ese Group Header, lo mismo con el Group Footer y listo.

HTH
Mario

---

Arnaldo Toledano

unread,
Mar 21, 2017, 11:42:36 AM3/21/17
to publice...@googlegroups.com
Gracias Mario.
Interesante.
Vere si lo de Original, duplicado, etc, etc, lo asocio al grupo o lo coloco directamente como un campo mas en el nuevo cursor.
Tengo algunas otras cosillas mas por el estilo.
Ya lo analizo.
Gracias nuevamente Mario

Arnaldo Toledano
Reply all
Reply to author
Forward
0 new messages