Ejemplo de Tarifas (Jose Miguel - Valencia)

  • Archivo: miniprint_list.prg 

***Creado por Jose Miguel (Valencia)***

#include "minigui.ch"

PROCEDURE main()

   ***CODIGO DE PAGINA español***
   REQUEST HB_CODEPAGE_ESWIN
   HB_SETCODEPAGE("ESWIN")

   ***Inicializacion RDD DBFCDX Nativo***
   REQUEST DBFCDX , DBFFPT
   RDDSETDEFAULT( "DBFCDX" )

   ***DATOS DE INICIALIZACION***
   Set Navigation Extended //TAB y ENTER
   SET DATE FORMAT "dd-mm-yyyy"
   SET EPOCH TO YEAR(DATE())-50

   ***crear fichero de datos para este ejemplo***
   IF .NOT. FILE("TARIFAS.DBF")
      aArq:={}
      Aadd( aArq , { 'CODTAR'    , 'C' , 10  , 0 } )
      Aadd( aArq , { 'NOMTAR'    , 'C' , 50  , 0 } )
      Aadd( aArq , { 'IMPORTE'   , 'N' , 13  , 2 } )
      DBCreate( "TARIFAS" , aArq  )
      Use TARIFAS Alias TARIFAS new
      FOR N=1 TO 50
         APPEND BLANK
         REPLACE CODTAR WITH "E"+STRZERO(N,3)
         REPLACE NOMTAR WITH "Nombre articulo "+LTRIM(STR(N))
         REPLACE IMPORTE WITH N+1000
      NEXT
      TARIFAS->( DBCLOSEAREA() )
   ENDIF
   ***fin crear fichero de datos para este ejemplo***

   ***crear fichero indice para este ejemplo***
   IF .NOT. FILE("TARIFAS.CDX")
      FERASE('TARIFAS.CDX')
      Use TARIFAS Alias TARIFAS new shared
      Index on CODTAR TAG ORDEN1 to TARIFAS.CDX
      TARIFAS->( DBCLOSEAREA() )
   ENDIF
   ***fin crear fichero indice para este ejemplo***

Lis_TarCodigo()

procedure Lis_TarCodigo()
   TituloImp:="Listado de tarifas"

   DEFINE WINDOW W_Imp1 ;
      AT 10,10 ;
      WIDTH 400 HEIGHT 275 ;
      TITLE 'Imprimir: '+TituloImp ;
      MAIN      ;
      ON RELEASE CloseTables()

      @ 15,10 LABEL L_CodTar1 ;
              VALUE 'Desde codigo' ;
              WIDTH 90 HEIGHT 25
      @ 10,100 TEXTBOX T_CodTar1 ;
              WIDTH 100 ;
              VALUE '' ;
              TOOLTIP 'Codigo tarifa' ;
              MAXLENGTH 10

      @ 45,10 LABEL L_CodTar2 ;
              VALUE 'Hasta codigo' ;
              WIDTH 90 HEIGHT 25
      @ 40,100 TEXTBOX T_CodTar2 ;
              WIDTH 100 ;
              VALUE 'ZZZZZZZZZZ' ;
              TOOLTIP 'Codigo tarifa' ;
              MAXLENGTH 10

      @ 70,10 CHECKBOX C_Cuadro ;
            CAPTION 'Imprimir cuadros en lineas' ;
            WIDTH 200 VALUE .F.


draw rectangle in window W_Imp1 at 110,010 to 112,390 fillcolor{255,0,0} //Rojo
      aIMP:=Impresoras("LISTADO")
      @125,10 LABEL L_Impresora ;
              VALUE 'Impresora' ;
              WIDTH 90 HEIGHT 25
      @120,100 COMBOBOX C_Impresora ;
            WIDTH 280 ;
            ITEMS aIMP[1] ;
            VALUE aIMP[3] ;
            TOOLTIP 'Impresora' NOTABSTOP

      @150, 10 CHECKBOX nImp CAPTION 'Seleccionar impresora' ;
               width 150 value .f. ;
               ON CHANGE W_Imp1.C_Impresora.Enabled:=IF(W_Imp1.nImp.Value=.T.,.F.,.T.)

      @180, 10 CHECKBOX nVer CAPTION 'Previsualizar documento' ;
               width 150 value .f.

      @210, 10 BUTTON B_Imp CAPTION 'Imprimir' WIDTH 90 HEIGHT 25 ;
               ACTION Lis_TarCodigoi("IMPRESORA")

      @210,110 BUTTON B_Excel CAPTION 'Hoja excel' WIDTH 90 HEIGHT 25 ;
               ACTION Lis_TarCodigoi("EXCEL")

      @210,210 BUTTON B_Can CAPTION 'Cancelar'  WIDTH 90 HEIGHT 25 ;
               ACTION W_Imp1.release

      END WINDOW
      CENTER WINDOW W_Imp1
      ACTIVATE WINDOW W_Imp1

Return Nil

Function CloseTables()
   DBCOMMITALL()
   DBUNLOCKALL()
   CLOSE DATABASES
Return NIL


procedure Lis_TarCodigoi(LLAMADA)
   IF FILE("FIN.DBF")
      IF SELEC("FIN")<>0
         FIN->( DBCLOSEAREA() )
      ENDIF
      ERASE FIN.DBF
      ERASE FIN.CDX
   ENDIF

   Use TARIFAS index TARIFAS Alias TARIFAS new shared

   SET FILTER TO
   COPY TO FIN FOR ;
   CODTAR>=W_Imp1.T_CodTar1.value .AND. CODTAR<=W_Imp1.T_CodTar1.value
   Use FIN Alias FIN new shared
   INDEX ON CODTAR TO FIN

   GO TOP
   IF LASTREC()=0
      MsgExclamation("No hay datos en las fecha introducidas","Informacion")
      FIN->( DBCLOSEAREA() )
      RETURN
   ENDIF

   IF LLAMADA="EXCEL"
      Lis_TarCodigoiE()
   ELSE
      Lis_TarCodigoiF()
   ENDIF


procedure Lis_TarCodigoiF(LLAMADA)
   dirimp:=GetCurrentFolder()

   IF W_Imp1.nImp.value=.t.
      IF W_Imp1.nVer.value=.t.
         SELECT PRINTER GetPrinter() ORIENTATION PRINTER_ORIENT_PORTRAIT PREVIEW
      ELSE
         SELECT PRINTER GetPrinter() ORIENTATION PRINTER_ORIENT_PORTRAIT
      ENDIF
   ELSE
      IF W_Imp1.C_Impresora.ItemCount=0 .OR. ;
         W_Imp1.C_Impresora.Value<=0 .OR. ;
         W_Imp1.C_Impresora.Value>W_Imp1.C_Impresora.ItemCount
         MSGSTOP("No hay impresoras instaladas","Error")
         SetCurrentFolder(dirimp)
         RETURN
      ENDIF
      IF W_Imp1.nVer.value=.t.
         SELECT PRINTER W_Imp1.C_Impresora.Item(W_Imp1.C_Impresora.Value) ORIENTATION PRINTER_ORIENT_PORTRAIT PREVIEW
      ELSE
         SELECT PRINTER W_Imp1.C_Impresora.Item(W_Imp1.C_Impresora.Value) ORIENTATION PRINTER_ORIENT_PORTRAIT
      ENDIF
   ENDIF

   START PRINTDOC NAME TituloImp
   START PRINTPAGE


GO TOP
PAG:=0
LIN:=0
DO WHILE .NOT. EOF()
   IF LIN>=260 .OR. PAG=0
      IF PAG<>0
         @ LIN+5,105 PRINT "SIGUE EN LA HOJA: "+LTRIM(STR(PAG+1)) CENTER
         END PRINTPAGE
         START PRINTPAGE
      ENDIF
      PAG=PAG+1

      @ 20,20 PRINT "SUIZO ejemplos"
      @ 20,190 PRINT "Hoja: "+LTRIM(STR(PAG)) RIGHT
      @ 25,20 PRINT DATE()

      @ 25,105 PRINT "Nombre de la empresa" CENTER
      @ 35,105 PRINT TituloImp FONT "ft18" CENTER

      @ 40,20 PRINT 'desde: '+W_Imp1.T_CodTar1.value
      @ 45,20 PRINT 'hasta: '+W_Imp1.T_CodTar2.value

      LIN:=55
      IF W_Imp1.C_Cuadro.Value=.T.
         @ LIN, 19 PRINT RECTANGLE TO LIN+5, 39
         @ LIN, 39 PRINT RECTANGLE TO LIN+5,109
         @ LIN,109 PRINT RECTANGLE TO LIN+5,141
      ELSE
         @ LIN+4,20 PRINT LINE TO LIN+4,140
      ENDIF
      @ LIN,20 PRINT "Codigo"
      @ LIN,40 PRINT "Descripcion"
      @ LIN,140 PRINT "Importe" RIGHT

      LIN:=LIN+5
   ENDIF

   IF W_Imp1.C_Cuadro.Value=.T.
      @ LIN, 19 PRINT RECTANGLE TO LIN+5, 39
      @ LIN, 39 PRINT RECTANGLE TO LIN+5,109
      @ LIN,109 PRINT RECTANGLE TO LIN+5,141
   ENDIF
   @ LIN,20 PRINT CODTAR
   @ LIN,40 PRINT NOMTAR
   @ LIN,140 PRINT TRANSFORM( IMPORTE , "@E 9,999,999.99" ) RIGHT

   LIN:=LIN+5
   SKIP

ENDDO

   SELEC FIN
   FIN->( DBCLOSEAREA() )

   END PRINTPAGE
   END PRINTDOC
   SetCurrentFolder(dirimp)

   W_Imp1.release


Return Nil


procedure Lis_TarCodigoiE(LLAMADA)
   LOCAL oExcel, oHoja
   oExcel := TOleAuto():New( "Excel.Application" )
   oExcel:WorkBooks:Add()
   oExcel:Sheets("Hoja1"):Name := "Listado"
*   oExcel:Sheets("Hoja2"):Name := "Resumen"
   oHoja := oExcel:Get( "ActiveSheet" )
   oHoja:Cells:Font:Name := "Arial"
   oHoja:Cells:Font:Size := 10

   LIN:=8

oHoja:Cells( LIN, 1 ):Value := "Codigo"
oHoja:Cells( LIN, 1 ):HorizontalAlignment:= -4152  //Derecha
oHoja:Cells( LIN, 2 ):Value := "Descripcion"
oHoja:Cells( LIN, 3 ):Value := "Importe"
oHoja:Cells( LIN, 3 ):Set( "NumberFormat", "#.##0,00 €" )

oHoja:Range(CHR(64+1)+LTRIM(STR(LIN))+":"+CHR(64+3)+LTRIM(STR(LIN))):Font:Bold := .T.
oHoja:Range(CHR(64+1)+LTRIM(STR(LIN))+":"+CHR(64+3)+LTRIM(STR(LIN))):Interior:ColorIndex := 36 //sombrear celdas
oHoja:Range(CHR(64+1)+LTRIM(STR(LIN))+":"+CHR(64+3)+LTRIM(STR(LIN))):Borders(4):LineStyle:= 1  //linea inferior
oHoja:Range(CHR(64+1)+LTRIM(STR(LIN))+":"+CHR(64+3)+LTRIM(STR(LIN))):HorizontalAlignment := -4108  //Centrar

   LIN++

PAG:=0
*LIN:=0
DO WHILE .NOT. EOF()

   oHoja:Cells( LIN, 1 ):Value := CODTAR
   oHoja:Cells( LIN, 2 ):Value := NOMTAR
   oHoja:Cells( LIN, 3 ):Value := IMPORTE
   oHoja:Cells( LIN, 3 ):Set( "NumberFormat", "#.##0,00" )

   LIN++
   SKIP

ENDDO

   oHoja:Cells( 1, 1 ):Value := "SUIZO ejemplos"
   oHoja:Cells( 2, 1 ):Value := DATE()
   oHoja:Cells( 4, 1 ):Value := 'desde:'
   oHoja:Cells( 4, 2 ):Value := W_Imp1.T_CodTar1.value
   oHoja:Cells( 5, 1 ):Value := 'hasta:'
   oHoja:Cells( 5, 2 ):Value := W_Imp1.T_CodTar2.value
   oHoja:Range("A1:B6"):HorizontalAlignment:= -4131  //Izquierda

   FOR nCol:=1 TO FCOUNT()
      oHoja:Columns( nCol ):AutoFit()
   NEXT

 

*Guardar como
*oHoja:SaveAs( TituloImp )

oHoja:Cells( 1, 1 ):Select()
oExcel:Visible := .T.

oHoja:End()
oExcel:End()

   SELEC FIN
   FIN->( DBCLOSEAREA() )

   W_Imp1.release

Return Nil

 

procedure Impresoras(LLAMADA)
   aIMP1:=aPrinters()
   ASORT(aIMP1,,, { |x, y| UPPER(x) < UPPER(y) })
   aIMP2:=GetDefaultPrinter()
   aIMP3:=ASCAN(aIMP1, {|aVal| aVal == aIMP2})
   aIMP:={aIMP1,aIMP2,aIMP3}
RETURN(aIMP)