FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Bug en Clase Printer?
Posts: 446
Joined: Mon Dec 26, 2005 09:11 PM
Bug en Clase Printer?
Posted: Wed May 03, 2006 05:46 PM

Amigos

Acabo de fijarme que al utilizar la clase tprinter tanto en FW2.0d as铆 como en FW24 (modificado para correr con xHarbour 0.99.6 - gracias a Patrick Fan) en la confecci贸n de un listado se "come" los primeros registros de la DBF y envia el siguiente mensaje "the temporal metafile could not be created". Despu茅s sigue y crea las p谩ginas siguientes pero a partir de la No. 1 normalmente.

No se a qu茅 se debe este comportamiento, pero me hace pensar que debe ser un bug.

Agradecer茅 muchissssimo a quien me oriente a c贸mo solucionar la falla ya que es urgente!!! :cry:

Por si las moscas... envi贸 mi codigo:

/ Listar la base de datos del padron /

include "fivewin.ch"

include "report.ch"

PROCEDURE listar( oDlg )
LOCAL nReg := 1
LOCAL Fil := 5
LOCAL Col := 0
LOCAL nCol := 115 // columnas que tiene el papel
LOCAL nFil := 64 // filas que tiene el papel
LOCAL LstCol := 112 // ultima columna a utilizar
LOCAL LstFil := 59 // ultima fila para datos
LOCAL nFil1 := 0
LOCAL c, f, cMedio
LOCAL oFnt1, oFnt2, oFnt3, oPen1
*
LOCAL nPag := 0
LOCAL oPrn
LOCAL cDate := STR( DAY( DATE() )) + " de " + ;
sp_mes( MONTH( DATE() ) ) + " del " +;
str(Year(DATE()))
LOCAL TITULO:="LISTADO GENERAL DE REPUESTOS"
LOCAL nLongTit, nMedio
LOCAL aPagos //:= {}

DBSELECTAREA("STOCK")
nReg := RECNO()

PRINTER oPrn PrEVIEW MODAL

  oPrn:setup()

  IF EMPTY(oPrn:hDC)
     MsgStop("Impresora no lista","ATENTO")
     RETURN NIL
  ENDIF

  * caracter铆sticas del papel
  oPrn:SetPage( 10 )     // Papel A4==>10
  oPrn:SetLandScape()   // Orientacion echada

  * Factor de resoluci贸n para columnas y filas
  c:= oPrn:nHorzRes()/nCol
  f:= oPrn:nVertRes()/nFil
  cMedio := INT(LstCol / 2) + 1

  DEFINE FONT oFnt1 NAME "Sans Serif" SIZE 0,-16 OF oPrn
  DEFINE FONT oFnt2 NAME "Sans Serif" SIZE 0,-12 OF oPrn
  DEFINE FONT oFnt3 NAME "Sans Serif" SIZE 0,-9 OF oPrn

  DBGOTOP()
  DO WHILE !EOF()

     DO CASE

        CASE Fil == 0

           oPrn:Startpage()
           Fil++
           Fil++
           Fil++
           Fil++
           nPag := oPrn:nPage
           oPrn:Say(Fil*f, (cMedio - ( LEN(TITULO)/2 ))*c, TITULO, oFnt2)
           Fil++
           Fil++
           oPrn:Say(Fil*f, (cMedio - ( LEN(oApp:membrete)/2 ))*c, oApp:membrete, oFnt2)
           Fil++
           Fil++
           * Linea separador de titulo - encabezados
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)
           nFil1 := Fil
           Fil++
           * cabecera de columnas
           oPrn:Say(Fil*f,  001*c, "ANDM"      , oFnt3 )  // ANDAMIO
           oPrn:Say(Fil*f,  005*c, "CASL"      , oFnt3 )  // CASILLA
           oPrn:Say(Fil*f,  011*c, "CODIGO"    , oFnt3 )  // CODIGO
           oPrn:Say(Fil*f,  024*c, "PROC"      , oFnt3 )  // PROCEDENCIA
           oPrn:Say(Fil*f,  030*c, "NOMBRE"    , oFnt3 )  // NOMBRE
           oPrn:Say(Fil*f,  061*c, "UNIDAD"    , oFnt3 )  // UNIDAD DE MEDIDA
           oPrn:Say(Fil*f,  069*c, "PREC.VTA"  , oFnt3 )  // PRECIO DE VENTA
           oPrn:Say(Fil*f,  079*c, "DSCTO"     , oFnt3 )  // DESCUENTO EN VALOR
           oPrn:Say(Fil*f,  089*c, "IGV"       , oFnt3 )  // IGV DE PRECIO-DCTO
           oPrn:Say(Fil*f,  099*c, "PREC.PUBLICO.", oFnt3 )  // PRECIO FACTURADO
           Fil++
           oPrn:Say(Fil*f,  069*c, " US$    "  , oFnt3 )  // PRECIO DE VENTA
           oPrn:Say(Fil*f,  079*c, " US$ "     , oFnt3 )  // DESCUENTO EN VALOR
           oPrn:Say(Fil*f,  089*c, "US$"       , oFnt3 )  // IGV DE PRECIO-DCTO
           oPrn:Say(Fil*f,  099*c, "  US$     ", oFnt3 )  // PRECIO FACTURADO
           Fil++
           Fil++
           * Linea separadora entre encabezados e impresion de datos
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)
           Fil++

        CASE Fil > LstFil
           Fil++
           * Linea de cierre de impresion de datos
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)

           * Linea verticales de impresion de datos
           oPrn:Line(nFil1*f,000*c, Fil*f,000*c)
           oPrn:Line(nFil1*f,005*c, Fil*f,005*c)
           oPrn:Line(nFil1*f,009*c, Fil*f,009*c)
           oPrn:Line(nFil1*f,022*c, Fil*f,022*c)
           oPrn:Line(nFil1*f,028*c, Fil*f,028*c)
           oPrn:Line(nFil1*f,059*c, Fil*f,059*c)
           oPrn:Line(nFil1*f,067*c, Fil*f,067*c)
           oPrn:Line(nFil1*f,077*c, Fil*f,077*c)
           oPrn:Line(nFil1*f,087*c, Fil*f,087*c)
           oPrn:Line(nFil1*f,097*c, Fil*f,097*c)
           oPrn:Line(nFil1*f,LstCol*c, Fil*f,LstCol*c)

           * Fin cuadro de impresion de datos
           Fil++
           oPrn:Say(Fil*f,  002*c, "Pag. No. : ", oFnt3 )
           oPrn:Say(Fil*f,  014*c, ALLTRIM(STR(nPag,10,0)), oFnt3 )
           Fil++
           oPrn:endpage()
           Fil := 0

        OTHER
            oPrn:Say(Fil*f,  002*c, STOCK->ANDAMIO, oFnt3 )
            oPrn:Say(Fil*f,  006*c, STOCK->CASILLA, oFnt3 )
            oPrn:Say(Fil*f,  010*c, STOCK->CODIGO , oFnt3 )
            oPrn:Say(Fil*f,  023*c, STOCK->ORIG   , oFnt3 )
            oPrn:Say(Fil*f,  029*c, STOCK->NOMBRE , oFnt3 )
            oPrn:Say(Fil*f,  060*c, STOCK->UNIDAD , oFnt3 )
            oPrn:Say(Fil*f,  075*c, TRANSFORM(STOCK->XPRECIOV,"@ 99,999.999"), oFnt3,,,,1 )  // PRECIO DE VENTA
            oPrn:Say(Fil*f,  085*c, TRANSFORM(STOCK->XDCTO   ,"@ 99,999.999"), oFnt3,,,,1 )  // DESCUENTO EN VALOR
            oPrn:Say(Fil*f,  095*c, TRANSFORM(STOCK->XIGV    ,"@ 99,999.999"), oFnt3,,,,1 )  // IGV DE PRECIO-DCTO
            oPrn:Say(Fil*f,  105*c, TRANSFORM(STOCK->XPRECIOF,"@ 999,999.99"), oFnt3,,,,1 )  // PRECIO FACTURADO

            Fil++
            SKIP

     ENDCASE

  ENDDO
  *
  Fil++
  * Linea de cierre de impresion de datos
  oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)

  * Linea verticales de impresion de datos
  oPrn:Line(nFil1*f,000*c, Fil*f,000*c)
  oPrn:Line(nFil1*f,005*c, Fil*f,005*c)
  oPrn:Line(nFil1*f,009*c, Fil*f,009*c)
  oPrn:Line(nFil1*f,022*c, Fil*f,022*c)
  oPrn:Line(nFil1*f,028*c, Fil*f,028*c)
  oPrn:Line(nFil1*f,059*c, Fil*f,059*c)
  oPrn:Line(nFil1*f,067*c, Fil*f,067*c)
  oPrn:Line(nFil1*f,077*c, Fil*f,077*c)
  oPrn:Line(nFil1*f,087*c, Fil*f,087*c)
  oPrn:Line(nFil1*f,097*c, Fil*f,097*c)
  oPrn:Line(nFil1*f,LstCol*c, Fil*f,LstCol*c)
  * Fin cuadro de impresion de datos
  Fil++
  oPrn:Say(Fil*f,  002*c, "Pag. No. : ", oFnt3 )
  oPrn:Say(Fil*f,  014*c, ALLTRIM(STR(nPag,10,0)), oFnt3 )
  oPrn:endpage()

ENDPRINT

oFnt1:End()
oFnt2:End()
oFnt3:End()
oPrn:SetPortrait() // Orientacion parada
oPrn:End()

DBGOTOP()
DBGOTO( nReg )

RETURN
*

/
脷脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脗脛驴
鲁ANDM CASL CODIGO PROC NOMBRE UNIDAD PREC.VTA DSCTO IGV PREC.FACT.鲁鲁
脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脕脛脵
12 123 123456789012 12345 123456789012345678901234567890 1234567 12345.789 12345.789 12345.789 123457.89
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
1 2 3 4 5 6 7 8 9 0 1
/
/*
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
1 2 3 4 5 6 7 8 9 0 1


 ITEMS        DATOS

Cliente----: 12345678901 123456789012345678901234567890123456789012345
Direcci贸n--: 123456789012345678901234567890123456789012345
             123456789012345678901234567890123456789012345
             123456789012345678901234567890123456789012345
Tel茅fono---: 123456789012

Loc.Entrega: 123456789012345678901234567890123456789012345
Direcci贸n--: 123456789012345678901234567890123456789012345
Tel茅fono---: 123456789012

NOM_CLIENT" ,"C", 45,0},; // nombre del cliente
DIR_CLIENT" ,"C", 45,0},; // direccion1 del cliente
DIR_CLIEN2" ,"C", 45,0},; // direccion2 del cliente
DIR_CLIEN3" ,"C", 45,0},; // direccion3 del cliente
LOC_CLIENT" ,"C", 45,0},; // local de entrega
LOC_DIRCLI" ,"C", 45,0},; // direc. local de entrega
TF1_CLIENT" ,"C", 12,0},; // telefono cliente
TF2_CLIENT" ,"C", 12,0} ; // telefono local de entrega

*/

FWH + BCC582 + WorkShop 4.5 + Resource Hacker + Mingw
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicaci贸n via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
Posts: 446
Joined: Mon Dec 26, 2005 09:11 PM
Re: Bug en Clase Printer?
Posted: Fri May 05, 2006 10:09 PM

Amigos, pido perd贸n por la falsa alarma. No es un bug sino un error mio (no inicializ茅 correctamente la variable "Fil").

El codigo puede ser utilizado como plantilla ejemplo cuando tengan que elaborar una lista de productos, con formato utilizando la clase tprinter.

/ Listar la base de datos del padron de productos
Autor: Econ. Armando Pic贸n S., Lima, Per煤
/

include "fivewin.ch"

include "report.ch"

PROCEDURE listar( oDlg )
LOCAL nReg := 1
LOCAL Fil := 0 // aqui estuvo el error
LOCAL Col := 0
LOCAL nCol := 115 // columnas que tiene el papel
LOCAL nFil := 64 // filas que tiene el papel
LOCAL LstCol := 112 // ultima columna a utilizar
LOCAL LstFil := 59 // ultima fila para datos
LOCAL nFil1 := 0
LOCAL c, f, cMedio
LOCAL oFnt1, oFnt2, oFnt3, oPen1
*
LOCAL nPag := 0
LOCAL oPrn
LOCAL cDate := STR( DAY( DATE() )) + " de " + ;
sp_mes( MONTH( DATE() ) ) + " del " +;
str(Year(DATE()))
LOCAL TITULO:="LISTADO GENERAL DE REPUESTOS"
LOCAL nLongTit, nMedio
//LOCAL aPagos //:= {} // esto tambi茅n fue error, no se utiliza

DBSELECTAREA("STOCK")
nReg := RECNO()

PRINTER oPrn PrEVIEW MODAL

  oPrn:setup()

  IF EMPTY(oPrn:hDC)
     MsgStop("Impresora no lista","ATENTO")
     RETURN NIL
  ENDIF

  * caracter铆sticas del papel
  oPrn:SetPage( 10 )     // Papel A4==>10
  oPrn:SetLandScape()   // Orientacion echada

  * Factor de resoluci贸n para columnas y filas
  c:= oPrn:nHorzRes()/nCol
  f:= oPrn:nVertRes()/nFil
  cMedio := INT(LstCol / 2) + 1

  DEFINE FONT oFnt1 NAME "Sans Serif" SIZE 0,-16 OF oPrn
  DEFINE FONT oFnt2 NAME "Sans Serif" SIZE 0,-12 OF oPrn
  DEFINE FONT oFnt3 NAME "Sans Serif" SIZE 0,-9 OF oPrn

  DBGOTOP()
  DO WHILE !EOF()

     DO CASE

        CASE Fil == 0

           oPrn:Startpage()
           Fil++
           Fil++
           Fil++
           Fil++
           nPag := oPrn:nPage
           oPrn:Say(Fil*f, (cMedio - ( LEN(TITULO)/2 ))*c, TITULO, oFnt2)
           Fil++
           Fil++
           oPrn:Say(Fil*f, (cMedio - ( LEN(oApp:membrete)/2 ))*c, oApp:membrete, oFnt2)
           Fil++
           Fil++
           * Linea separador de titulo - encabezados
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)
           nFil1 := Fil
           Fil++
           * cabecera de columnas
           oPrn:Say(Fil*f,  001*c, "ANDM"      , oFnt3 )  // ANDAMIO
           oPrn:Say(Fil*f,  005*c, "CASL"      , oFnt3 )  // CASILLA
           oPrn:Say(Fil*f,  011*c, "CODIGO"    , oFnt3 )  // CODIGO
           oPrn:Say(Fil*f,  024*c, "PROC"      , oFnt3 )  // PROCEDENCIA
           oPrn:Say(Fil*f,  030*c, "NOMBRE"    , oFnt3 )  // NOMBRE
           oPrn:Say(Fil*f,  061*c, "UNIDAD"    , oFnt3 )  // UNIDAD DE MEDIDA
           oPrn:Say(Fil*f,  069*c, "PREC.VTA"  , oFnt3 )  // PRECIO DE VENTA
           oPrn:Say(Fil*f,  079*c, "DSCTO"     , oFnt3 )  // DESCUENTO EN VALOR
           oPrn:Say(Fil*f,  089*c, "IGV"       , oFnt3 )  // IGV DE PRECIO-DCTO
           oPrn:Say(Fil*f,  099*c, "PREC.PUBLICO.", oFnt3 )  // PRECIO FACTURADO
           Fil++
           oPrn:Say(Fil*f,  069*c, " US$    "  , oFnt3 )  // PRECIO DE VENTA
           oPrn:Say(Fil*f,  079*c, " US$ "     , oFnt3 )  // DESCUENTO EN VALOR
           oPrn:Say(Fil*f,  089*c, "US$"       , oFnt3 )  // IGV DE PRECIO-DCTO
           oPrn:Say(Fil*f,  099*c, "  US$     ", oFnt3 )  // PRECIO FACTURADO
           Fil++
           Fil++
           * Linea separadora entre encabezados e impresion de datos
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)
           Fil++

        CASE Fil > LstFil
           Fil++
           * Linea de cierre de impresion de datos
           oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)

           * Linea verticales de impresion de datos
           oPrn:Line(nFil1*f,000*c, Fil*f,000*c)
           oPrn:Line(nFil1*f,005*c, Fil*f,005*c)
           oPrn:Line(nFil1*f,009*c, Fil*f,009*c)
           oPrn:Line(nFil1*f,022*c, Fil*f,022*c)
           oPrn:Line(nFil1*f,028*c, Fil*f,028*c)
           oPrn:Line(nFil1*f,059*c, Fil*f,059*c)
           oPrn:Line(nFil1*f,067*c, Fil*f,067*c)
           oPrn:Line(nFil1*f,077*c, Fil*f,077*c)
           oPrn:Line(nFil1*f,087*c, Fil*f,087*c)
           oPrn:Line(nFil1*f,097*c, Fil*f,097*c)
           oPrn:Line(nFil1*f,LstCol*c, Fil*f,LstCol*c)

           * Fin cuadro de impresion de datos
           Fil++
           oPrn:Say(Fil*f,  002*c, "Pag. No. : ", oFnt3 )
           oPrn:Say(Fil*f,  014*c, ALLTRIM(STR(nPag,10,0)), oFnt3 )
           Fil++
           oPrn:endpage()
           Fil := 0

        OTHER
            oPrn:Say(Fil*f,  002*c, STOCK->ANDAMIO, oFnt3 )
            oPrn:Say(Fil*f,  006*c, STOCK->CASILLA, oFnt3 )
            oPrn:Say(Fil*f,  010*c, STOCK->CODIGO , oFnt3 )
            oPrn:Say(Fil*f,  023*c, STOCK->ORIG   , oFnt3 )
            oPrn:Say(Fil*f,  029*c, STOCK->NOMBRE , oFnt3 )
            oPrn:Say(Fil*f,  060*c, STOCK->UNIDAD , oFnt3 )
            oPrn:Say(Fil*f,  075*c, TRANSFORM(STOCK->XPRECIOV,"@ 99,999.999"), oFnt3,,,,1 )  // PRECIO DE VENTA
            oPrn:Say(Fil*f,  085*c, TRANSFORM(STOCK->XDCTO   ,"@ 99,999.999"), oFnt3,,,,1 )  // DESCUENTO EN VALOR
            oPrn:Say(Fil*f,  095*c, TRANSFORM(STOCK->XIGV    ,"@ 99,999.999"), oFnt3,,,,1 )  // IGV DE PRECIO-DCTO
            oPrn:Say(Fil*f,  105*c, TRANSFORM(STOCK->XPRECIOF,"@ 999,999.99"), oFnt3,,,,1 )  // PRECIO FACTURADO

            Fil++
            SKIP

     ENDCASE

  ENDDO
  *
  Fil++
  * Linea de cierre de impresion de datos
  oPrn:Line(Fil*f,000*c, Fil*f, LstCol*c)

  * Linea verticales de impresion de datos
  oPrn:Line(nFil1*f,000*c, Fil*f,000*c)
  oPrn:Line(nFil1*f,005*c, Fil*f,005*c)
  oPrn:Line(nFil1*f,009*c, Fil*f,009*c)
  oPrn:Line(nFil1*f,022*c, Fil*f,022*c)
  oPrn:Line(nFil1*f,028*c, Fil*f,028*c)
  oPrn:Line(nFil1*f,059*c, Fil*f,059*c)
  oPrn:Line(nFil1*f,067*c, Fil*f,067*c)
  oPrn:Line(nFil1*f,077*c, Fil*f,077*c)
  oPrn:Line(nFil1*f,087*c, Fil*f,087*c)
  oPrn:Line(nFil1*f,097*c, Fil*f,097*c)
  oPrn:Line(nFil1*f,LstCol*c, Fil*f,LstCol*c)
  * Fin cuadro de impresion de datos
  Fil++
  oPrn:Say(Fil*f,  002*c, "Pag. No. : ", oFnt3 )
  oPrn:Say(Fil*f,  014*c, ALLTRIM(STR(nPag,10,0)), oFnt3 )
  oPrn:endpage()

ENDPRINT

oFnt1:End()
oFnt2:End()
oFnt3:End()
oPrn:SetPortrait() // Orientacion parada
oPrn:End()

DBGOTOP()
DBGOTO( nReg )

RETURN
*

/*
Formulario de la lista Productos

脷脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脗脛驴
鲁ANDM CASL CODIGO PROC NOMBRE UNIDAD PREC.VTA DSCTO IGV PREC.FACT.鲁鲁
脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脕脛脵
12 123 123456789012 12345 123456789012345678901234567890 1234567 12345.789 12345.789 12345.789 123457.89
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
1 2 3 4 5 6 7 8 9 0 1

Caracteristicas de la base de datos

Cliente----: 12345678901 123456789012345678901234567890123456789012345
Direcci贸n--: 123456789012345678901234567890123456789012345
             123456789012345678901234567890123456789012345
             123456789012345678901234567890123456789012345
Tel茅fono---: 123456789012

Loc.Entrega: 123456789012345678901234567890123456789012345
Direcci贸n--: 123456789012345678901234567890123456789012345
Tel茅fono---: 123456789012

NOM_CLIENT" ,"C", 45,0},; // nombre del cliente
DIR_CLIENT" ,"C", 45,0},; // direccion1 del cliente
DIR_CLIEN2" ,"C", 45,0},; // direccion2 del cliente
DIR_CLIEN3" ,"C", 45,0},; // direccion3 del cliente
LOC_CLIENT" ,"C", 45,0},; // local de entrega
LOC_DIRCLI" ,"C", 45,0},; // direc. local de entrega
TF1_CLIENT" ,"C", 12,0},; // telefono cliente
TF2_CLIENT" ,"C", 12,0} ; // telefono local de entrega

*/

FWH + BCC582 + WorkShop 4.5 + Resource Hacker + Mingw
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicaci贸n via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com

Continue the discussion