Aqui tienes un programa que calcula y muestra amortizaciones de cr茅ditos con diferentes opciones de c谩lculo.
* Programa que calcula amortizaciones de cr茅ditos
* Autor Manuel Mercado G贸mez
* Ultima actualizaci贸n 15/09/2009
#include "FiveWin.ch"
#include "TSButton.ch"
#include "TSBrowse.ch"
#define CLR_HBROWN nRGB( 205, 192, 176 )
MemVar nTotInt, nTotTot, nDayAnt
Static aTasas
//--------------------------------------------------------------------------------------------------------------------//
Function Principal()
聽 聽Local oWnd, oBar, oIco, oMenu, aCtl[ 14 ], oFont, nCapital, nTipInt, nTasa, nPagos, ;
聽 聽 聽 聽 聽dFecIni, nGracia, ;
聽 聽 聽 聽 聽aInt 聽 := { "Tasa fija sobre saldos insolutos con amortizaci贸n variable", ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Tasa fija sobre saldos insolutos con amortizaci贸n fija", ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Tasa variable sobre saldos insolutos con amortizaci贸n fija", ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Tasa fija sobre operaci贸n global con amortizaci贸n fija" }, ;
聽 聽 聽 聽 聽aCalen := { { "", "", "", "", "", "", "", "" } }
聽 聽Private nTotInt := 0, ;
聽 聽 聽 聽 聽 聽nTotTot := 0, ;
聽 聽 聽 聽 聽 聽nDayAnt := 0
聽 聽SET CONFIRM ON
聽 聽SET DATE BRITISH
聽 聽SET EPOCH TO 1980
聽 聽SetHandleCount( 20 )
聽 聽Set( _SET_INSERT, .T. )
聽 聽nCapital := 0
聽 聽nTipInt 聽:= 1
聽 聽nTasa 聽 聽:= 0
聽 聽nPagos 聽 := 0
聽 聽dFecIni 聽:= Date()
聽 聽nGracia 聽:= 0
聽 聽MENU oMenu
聽 聽 聽 MENUITEM "&Excel" ;
聽 聽 聽 聽 聽 ACTION ( If( Len( aCtl[ 12 ]:aArray ) > 1, fExcel( aCtl[ 12 ] ), Nil ) ) ;
聽 聽 聽 聽 聽 MESSAGE "Transferir calendario de pagos a Excel"
聽 聽 聽 MENUITEM "&Salir" ACTION oWnd:End() MESSAGE "Salir del programa"
聽 聽ENDMENU
聽 聽DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -17
聽 聽DEFINE ICON oIco RESOURCE "Money"
聽 聽DEFINE WINDOW oWnd FROM 0, 0 TO 454, 620 PIXEL ;
聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN MENU oMenu ICON oIco ;
聽 聽 聽 聽 聽 TITLE "C谩lculo de amortizaci贸n de cr茅ditos"
聽 聽DEFINE SBUTTONBAR oBar 3D SIZE 36, 36 OF oWnd OFFICE
聽 聽DEFINE SBUTTON aCtl[ 13 ] OF oBar RESOURCE "Excel" ;
聽 聽 聽 聽 聽 ACTION ( If( Len( aCtl[ 12 ]:aArray ) > 1, fExcel( aCtl[ 12 ] ), Nil ) ) ;
聽 聽 聽 聽 聽 TOOLTIP "Transferir calendario de pagos a Excel"
聽 聽DEFINE SBUTTON OF oBar RESOURCE "Calc" GROUP ;
聽 聽 聽 聽 聽 ACTION WinExec( "Calc" ) ;
聽 聽 聽 聽 聽 TOOLTIP "Calculadora" ;
聽 聽 聽 聽 聽 MESSAGE "La calculadora de Windows"
聽 聽DEFINE SBUTTON OF oBar RESOURCE "Calen" GROUP ;
聽 聽 聽 聽 聽 ACTION WinExec( "Calendar" ) ;
聽 聽 聽 聽 聽 TOOLTIP "Calendario"
聽 聽DEFINE SBUTTON OF oBar RESOURCE "Quit" GROUP PIXELS ;
聽 聽 聽 聽 聽 ACTION oWnd:End() ;
聽 聽 聽 聽 聽 TOOLTIP "Salir del programa"
聽 聽@ 42, 10 SAY aCtl[ 1 ] PROMPT "Importe del Cr茅dito:" OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 155, 20 PIXEL
聽 聽@ 42,225 GET aCtl[ 2 ] VAR nCapital OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont 聽UPDATE ;
聽 聽 聽 聽 聽 聽 PICTURE "@K #########.##" COLORS CLR_BLACK, CLR_WHITE SIZE 116, 20 PIXEL ;
聽 聽 聽 聽 聽 聽 VALID ( fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni ), .T. )
聽 聽aCtl[ 2 ]:bGotFocus := {||aCtl[ 2 ]:SetColor( CLR_WHITE, CLR_BLUE ) }
聽 聽aCtl[ 2 ]:bLostFocus := {||aCtl[ 2 ]:SetColor( CLR_BLACK, CLR_WHITE ) }
聽 聽@ 65, 10 SAY aCtl[ 4 ] PROMPT "Inter茅s Anual:" OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 99, 20 PIXEL
聽 聽@ 65,225 GET aCtl[ 5 ] VAR nTasa OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont 聽UPDATE ;
聽 聽 聽 聽 聽 聽 PICTURE "@K ###.## %" COLORS CLR_BLACK, CLR_WHITE SIZE 43, 20 PIXEL ;
聽 聽 聽 聽 聽 聽 VALID ( fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni ), .T. )
聽 聽aCtl[ 5 ]:bGotFocus := {||aCtl[ 5 ]:SetColor( CLR_WHITE, CLR_BLUE ) }
聽 聽aCtl[ 5 ]:bLostFocus := {||aCtl[ 5 ]:SetColor( CLR_BLACK, CLR_WHITE ) }
聽 聽@ 90, 10 SAY aCtl[ 6 ] PROMPT "N煤mero de Pagos Mensuales:" OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 215, 20 PIXEL
聽 聽@ 90,225 GET aCtl[ 7 ] VAR nPagos OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont 聽UPDATE ;
聽 聽 聽 聽 聽 聽 PICTURE "@K ###" COLORS CLR_BLACK, CLR_WHITE SIZE 30, 20 PIXEL ;
聽 聽 聽 聽 聽 聽 VALID ( fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni ), .T. )
聽 聽aCtl[ 7 ]:bGotFocus := {||aCtl[ 7 ]:SetColor( CLR_WHITE, CLR_BLUE ) }
聽 聽aCtl[ 7 ]:bLostFocus := {||aCtl[ 7 ]:SetColor( CLR_BLACK, CLR_WHITE ) }
聽 聽@114, 10 SAY aCtl[ 8 ] PROMPT "Fecha del Primer Pago:" OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 175, 20 PIXEL
聽 聽@114,225 GET aCtl[ 9 ] VAR dFecIni OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont 聽UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_WHITE SIZE 68, 20 PIXEL ;
聽 聽 聽 聽 聽 聽 VALID ( fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni ), .T. )
聽 聽aCtl[ 9 ]:bGotFocus := {||aCtl[ 9 ]:SetColor( CLR_WHITE, CLR_BLUE ) }
聽 聽aCtl[ 9 ]:bLostFocus := {||aCtl[ 9 ]:SetColor( CLR_BLACK, CLR_WHITE ) }
聽 聽@138, 10 SAY aCtl[ 10 ] PROMPT "Per铆odo de Gracia:" OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 140, 20 PIXEL
聽 聽@138,225 GET aCtl[ 11 ] VAR nGracia OF oWnd ;
聽 聽 聽 聽 聽 聽 FONT oFont 聽UPDATE ;
聽 聽 聽 聽 聽 聽 PICTURE "@K ###" COLORS CLR_BLACK, CLR_WHITE SIZE 30, 20 PIXEL ;
聽 聽 聽 聽 聽 聽 VALID ( fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni ), .T. )
聽 聽aCtl[ 11 ]:bGotFocus := {||aCtl[ 11 ]:SetColor( CLR_WHITE, CLR_BLUE ) }
聽 聽aCtl[ 11 ]:bLostFocus := {||aCtl[ 11 ]:SetColor( CLR_BLACK, CLR_WHITE ) }
聽 聽@ 42,355 SRADIO aCtl[ 3 ] VAR nTipInt OF oWnd ;
聽 聽 聽 聽 聽 聽 ITEMS aInt UPDATE GROSS BBOX FONT oFont, oFont SIZE 318, 134 PIXELS ;
聽 聽 聽 聽 聽 聽 LABEL "Tipo de Inter茅s" ALIGN DT_CENTER ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN, CLR_WHITE, CLR_GRAY ;
聽 聽 聽 聽 聽 聽 ON CHANGE If( nTipInt == 3 .and. fGetTasas( nTasa, nPagos, dFecIni ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 dFecIni ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 If( nTipInt != 3, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 dFecIni ), Nil ) )
聽 聽@186, 10 STATIC aCtl[ 14 ] BBOX OF oWnd SIZE 774, 468 PIXEL FONT oFont ;
聽 聽 聽 聽 聽 聽 LABEL "Calendario de Pagos" ALIGN DT_CENTER
聽 聽@211, 15 BROWSE aCtl[ 12 ] OF oWnd ARRAY aCalen ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN, CLR_BLACK, CLR_HGRAY, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CLR_WHITE, CLR_BLACK,,, CLR_BLACK, CLR_CYAN, CLR_BLACK, CLR_HBROWN ;
聽 聽 聽 聽 聽 聽 SIZE 764, 436 PIXEL
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 1 TITLE "Pago" SIZE 40 ;
聽 聽 聽 聽ALIGN DT_CENTER, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 2 TITLE "Fecha" SIZE 68 ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 3 TITLE "Saldo Inicial" SIZE 116 ;
聽 聽 聽 聽PICTURE "###,###,###.##" ALIGN DT_RIGHT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 4 TITLE "Tasa" SIZE 56 ;
聽 聽 聽 聽PICTURE "###.##" FOOTER "Totales" ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER, DT_RIGHT 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 5 TITLE "Inter茅s" SIZE 116 ;
聽 聽 聽 聽PICTURE "###,###,###.##" ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER, DT_RIGHT 3DLOOK FALSE, TRUE, TRUE ;
聽 聽 聽 聽FOOTER { || Transform( nTotInt, "###,###,###.##" ) }
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 6 TITLE "Capital" SIZE 116 ;
聽 聽 聽 聽PICTURE "###,###,###.##" ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE ;
聽 聽 聽 聽FOOTER { || Transform( nCapital, "###,###,###.##" ) }
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 7 TITLE "Total" SIZE 116 ;
聽 聽 聽 聽PICTURE "###,###,###.##" ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE ;
聽 聽 聽 聽FOOTER { || Transform( nTotTot, "###,###,###.##" ) }
聽 聽ADD COLUMN TO aCtl[ 12 ] DATA ARRAY ELM 8 TITLE "Saldo Final" SIZE 116 ;
聽 聽 聽 聽PICTURE "###,###,###.##" ;
聽 聽 聽 聽ALIGN DT_RIGHT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽aCtl[ 12 ]:lNoHScroll := .T.
聽 聽SET MESSAGE OF oWnd CLOCK DATE KEYBOARD NOINSET
聽 聽ACTIVATE WINDOW oWnd MAXIMIZED ON INIT aCtl[ 2 ]:SetFocus() ;
聽 聽 聽 聽 聽 聽 VALID ( oFont:End(), oIco:End(), .T. )
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
Static Function fCalculate( aCtl, nTipInt, nTasa, nPagos, nCapital, nGracia, dFecIni )
聽 聽Local nInteres, nPagoCap, nPagoMes, ;
聽 聽 聽 聽 聽aCalen 聽:= {}, ;
聽 聽 聽 聽 聽nCapFin := nCapital, ;
聽 聽 聽 聽 聽dFecha 聽:= dFecIni, ;
聽 聽 聽 聽 聽xVar 聽 聽:= 1
聽 聽If nPagos == 0 .OR. nCapital == 0
聽 聽 聽 Return Nil
聽 聽EndIf
聽 聽nTotInt 聽:= nDayAnt := 0
聽 聽nTasa 聽 聽/= 1200
聽 聽nPagos 聽 -= nGracia
聽 聽nPagoMes := If( nTasa > 0, If( nTipint == 1, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Round( nCapital * nTasa / ( 1 - ( 1 + nTasa ) ** -nPagos ), 2 ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Round( ( nCapital + ( nCapital * nTasa * nPagos ) ) / nPagos, 2 ) ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Round( nCapital / nPagos, 2 ) )
聽 聽nCapmes 聽:= Round( nCapital / nPagos, 2 )
聽 聽While xVar <= ( nPagos + nGracia )
聽 聽 聽 If nTipInt == 3
聽 聽 聽 聽 聽If Empty( aTasas )
聽 聽 聽 聽 聽 聽 fGetTasas( nTasa * 1200, nPagos, dFecIni )
聽 聽 聽 聽 聽EndIf
聽 聽 聽 聽 聽nTasa := aTasas[ xVar, 3 ] / 1200
聽 聽 聽 EndIf
聽 聽 聽 nInteres := Round( If( nTipInt < 4, nCapfin, nCapital ) * nTasa, 2 )
聽 聽 聽 nPagoCap := If( xVar > nGracia, If( nTipInt == 1, nPagoMes - nInteres, nCapMes ), 0 )
聽 聽 聽 nPagoCap += If( xVar == ( nPagos + nGracia ), nCapFin - nPagoCap, 0 )
聽 聽 聽 nTotInt 聽+= nInteres
聽 聽 聽 AAdd( aCalen, { xVar++, DtoC( dFecha ), nCapfin, Round( nTasa * 1200, 2 ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nInteres, nPagoCap, nInteres + nPagoCap, nCapFin -= nPagoCap } )
聽 聽 聽 dFecha := AddMonth( dFecha, 30 )
聽 聽EndDo
聽 聽nTotTot := nCapital + nTotInt
聽 聽aCtl[ 12 ]:SetArray( aCalen )
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
Static Function AddMonth( dDate, nDays )
聽 聽Local nMonth, nMonths, nDay, nYear, ;
聽 聽 聽 聽 聽aDias := { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
聽 聽If ( nDays % 30 ) > 0
聽 聽 聽 Return dDate + nDays
聽 聽EndIf
聽 聽nMonths := nDays / 30
聽 聽nMonth := Month( dDate ) + nMonths
聽 聽nDay := Day( dDate )
聽 聽nYear := Year( dDate )
聽 聽If nMonth > 12
聽 聽 聽 nMonth := nMonth - 12
聽 聽 聽 ++nYear
聽 聽EndIf
聽 聽If nDayant > 0
聽 聽 聽 nDay := nDayAnt
聽 聽EndIf
聽 聽nDayAnt := 0
聽 聽If nDay > aDias[ nMonth ]
聽 聽 聽 nDayAnt := nDay
聽 聽 聽 If nMonth == 2
聽 聽 聽 聽 聽If ( ( nYear % 4 ) == 0 ) .and. ( ( ( nYear % 100 ) != 0 ) .or. ;
聽 聽 聽 聽 聽 聽 ( ( nYear % 400 ) == 0 ) )
聽 聽 聽 聽 聽 聽 nDay := If( nDay > 29, 29, nDay )
聽 聽 聽 聽 聽Else
聽 聽 聽 聽 聽 聽 nDay := 28
聽 聽 聽 聽 聽EndIf
聽 聽 聽 Else
聽 聽 聽 聽 聽nDay := aDias[ nMonth ]
聽 聽 聽 EndIf
聽 聽EndIf
Return CtoD( Str( nDay, 2 ) + "." + StrZero( nMonth, 2) + "." + LTrim( Str( nYear ) ) )
//--------------------------------------------------------------------------------------------------------------------//
Static Function fGetTasas( nTasa, nPagos, dFecIni )
聽 聽Local oDlg, oFont, nEle, aCtl[ 3 ], ;
聽 聽 聽 聽 聽aArr := {}, ;
聽 聽 聽 聽 聽lOk 聽:= .F.
聽 聽If ! Empty( aTasas ) .and. Len( aTasas ) == nPagos .and. aTasas[ 1, 2 ] == dFecIni
聽 聽 聽 aArr := AClone( aTasas )
聽 聽Else
聽 聽 聽 For nEle := 1 To nPagos
聽 聽 聽 聽 聽AAdd( aArr, { nEle, dFecIni, nTasa } )
聽 聽 聽 聽 聽dFecIni := AddMonth( dFecIni, 30 )
聽 聽 聽 Next
聽 聽EndIf
聽 聽DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -11
聽 聽DEFINE DIALOG oDlg FROM 0, 0 To 400, 160 PIXEL COLOR CLR_BLACK, CLR_HBROWN ;
聽 聽 聽 聽 聽 TITLE "Inter茅s Variable" FONT oFont
聽 聽@ 聽0, 聽0 BROWSE aCtl[ 1 ] ARRAY aArr OF oDlg SIZE 80, 176 PIXEL CELLED ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN, CLR_BLACK, CLR_HGRAY, CLR_WHITE, CLR_BLACK
聽 聽ADD COLUMN TO aCtl[ 1 ] DATA ARRAY ELM 1 TITLE "Pago" SIZE 30 ;
聽 聽 聽 聽ALIGN DT_CENTER, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 1 ] DATA ARRAY ELM 2 TITLE "Fecha" SIZE 60 ;
聽 聽 聽 聽ALIGN DT_LEFT, DT_CENTER 3DLOOK FALSE, TRUE, TRUE
聽 聽ADD COLUMN TO aCtl[ 1 ] DATA ARRAY ELM 3 TITLE "Tasa" SIZE 60 ;
聽 聽 聽 聽ALIGN DT_LEFT, DT_CENTER PICTURE "###.##" 3DLOOK FALSE, TRUE, TRUE ;
聽 聽 聽 聽POSTEDIT { |uVar| fActTasa( aCtl[ 1 ], aCtl[ 1 ]:nAt, uVar ) } ;
聽 聽 聽 聽EDITABLE MOVE DT_MOVE_NEXT
聽 聽aCtl[ 1 ]:lNoHScroll := .T.
聽 聽aCtl[ 1 ]:nFreeze := 2
聽 聽aCtl[ 1 ]:lLockFreeze := .T.
聽 聽@180, 聽5 SBUTTON aCtl[ 2 ] PROMPT "&Aceptar" OF oDlg ;
聽 聽 聽 聽 聽 聽 RESOURCE "Save" SIZE 35, 14 PIXEL ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN ;
聽 聽 聽 聽 聽 聽 ACTION ( lOk := .T., oDlg:End() )
聽 聽@180, 45 SBUTTON aCtl[ 3 ] PROMPT "&Salir" OF oDlg RESOURCE "Exit" ;
聽 聽 聽 聽 聽 聽 SIZE 30, 14 PIXEL ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN ;
聽 聽 聽 聽 聽 聽 ACTION oDlg:End()
聽 聽ACTIVATE DIALOG oDlg CENTERED VALID ( oFont:End(), .T. )
聽 聽If lOk
聽 聽 聽 aTasas := AClone( aArr )
聽 聽EndIf
Return lOk
//--------------------------------------------------------------------------------------------------------------------//
Static Function fActTasa( oBrw, nEle, nTasa )
聽 聽For nEle := ++nEle To Len( oBrw:aArray )
聽 聽 聽 oBrw:aArray[ nEle, 3 ] := nTasa
聽 聽Next
聽 聽oBrw:Refresh()
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
Function fExcel( oBrw, cFile, cTitle, oFnt, bExtern, aColSel, bPrintRow )
聽 聽Local oDlg, aCtl[ 9 ], lActivate, oFont, ;
聽 聽 聽 聽 聽nAvance := 0
聽 聽Default cFile 聽:= Padr( "MgLibro1.xls", 60 ), ;
聽 聽 聽 聽 聽 聽cTitle := ""
聽 聽lActivate := .T.
聽 聽cTitle 聽 聽:= PadR( cTitle, 128 )
聽 聽DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -11
聽 聽DEFINE DIALOG oDlg FROM 0, 0 TO 202, 360 PIXEL ;
聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN ;
聽 聽 聽 聽 聽 TITLE "Generar hoja de Excel"
聽 聽oDlg:nStyle := nOr( oDlg:nStyle, 4 )
聽 聽@ 11, 6 SAY aCtl[ 1 ] PROMPT "Archivo" OF oDlg ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 19, 9 PIXEL
聽 聽@ 11, 31 GET aCtl[ 2 ] VAR cFile OF oDlg SIZE 141, 9 PIXEL COLOR CLR_BLACK, CLR_WHITE FONT oFont ;
聽 聽 聽 聽 聽 聽 ACTION ( cFile := PadR( fSaveFile(), 60 ), aCtl[ 2 ]:Refresh() )
聽 聽@ 27, 6 SAY aCtl[ 3 ] PROMPT "T铆tulo" OF oDlg ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN SIZE 19, 9 PIXEL
聽 聽@ 27, 31 GET aCtl[ 4 ] VAR cTitle OF oDlg ;
聽 聽 聽 聽 聽 聽 FONT oFont UPDATE 聽;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_WHITE SIZE 141, 9 PIXEL
聽 聽@ 43, 31 SRADIO aCtl[ 5 ] VAR lActivate OF oDlg ;
聽 聽 聽 聽 聽 聽 PROMPT "Abrir Excel" CHECK ;
聽 聽 聽 聽 聽 聽 FONTS oFont, oFont UPDATE SIZE 50, 16 PIXELS ;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, CLR_HBROWN, CLR_WHITE, CLR_GRAY, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CLR_BLACK
聽 聽@ 66, 36 SBUTTON aCtl[ 7 ] PROMPT "&Aceptar" OF oDlg RECT BORDER ;
聽 聽 聽 聽 聽 聽 RESOURCE "Save" ;
聽 聽 聽 聽 聽 聽 ACTION ( oBrw:ExcelOle( cFile, lActivate, aCtl[ 9 ], cTitle, oFnt,, bExtern, aColSel, bPrintRow ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oDlg:End() ) ;
聽 聽 聽 聽 聽 聽 FONT oFont SIZE 38, 12 PIXEL 聽;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, { CLR_WHITE, nRGB( 139, 125, 107 ), 3 }
聽 聽@66, 99 SBUTTON aCtl[ 8 ] PROMPT "&Salir" OF oDlg RECT BORDER ;
聽 聽 聽 聽 聽 聽 RESOURCE "Exit" ;
聽 聽 聽 聽 聽 聽 ACTION oDlg:End() ;
聽 聽 聽 聽 聽 聽 FONT oFont SIZE 38, 12 PIXEL 聽;
聽 聽 聽 聽 聽 聽 COLORS CLR_BLACK, { CLR_WHITE, nRGB( 139, 125, 107 ), 3 }
聽 聽@ 86, 聽6 METER aCtl[ 9 ] VAR nAvance OF oDlg TOTAL 100 ;
聽 聽 聽 聽 聽 聽 PROMPT "Avance" SIZE 168, 12 PIXEL FONT oFont ;
聽 聽 聽 聽 聽 聽 COLORS CLR_HBROWN, CLR_BLACK ;
聽 聽 聽 聽 聽 聽 BARCOLOR CLR_HBLUE, CLR_YELLOW
聽 聽ACTIVATE DIALOG oDlg CENTERED VALID ( oFont:End(), .T. )
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
Static Function fSaveFile()
Return cGetFile( "Libro Excel (*.xls) | *.xls", "Selecciona el Archivo",, "\Mis Documentos\", .T., .T. )
Espero te sirva.
Un abrazo.
Manuel Mercado G贸mez.