Hola :
.Alguien sabe si en Xharbour-FiveWin con el RDD de ADS se puede almacenar un arreglo en un campo memo. En Clipper-FiveWin con ADS si lo puedo hacer.
Gracias
Theler Hugo
local aDir := Directory("*.*")
local aTbl := {{"ARREGLO","M",10,00}}
dbcreate("prueba.dbf",aTbl,"DBFCDX")
use prueba
prueba->ARREGLO := aDir
aDir := NIL
aDir := prueba->ARREGLO
PROCEDURE ReporteDeSaldo_Proceso(lDetalle)
LOCAL cId
LOCAL anInfo
LOCAL nCuotas
PRIVATE nContador
/*desabilita controles*/
oFecha:disable()
oBtnOk:disable()
oBtnExit:disable()
/*incializa contador*/
nContador := 0
/*solo contratos activos*/
IF empty( dFecha )
SET FILTER TO CONT->USSALDOI>0 .AND. CONT->USMONTO>10 .AND. !CANCELADO
ELSE
SET FILTER TO CONT->USSALDOI>0 .AND. CONT->USMONTO>10 .AND. CONT->FECHA <= DFECHA .AND. !CANCELADO
ENDIF
CONT->(DBGoTop())
/*cuenta registros*/
COUNT TO nContador
/*define margen de progress bar*/
oPBar:SetRange(1,nContador)
/*inicio de tabla de contratos*/
CONT->(DBGoTop())
/*procesa cada contrato hasta alcanzar el final del archivo*/
nContador := 0
WHILE !CONT->(Eof())
/*actualiza avanze en barra de progreso*/
oPBar:SetPos(++nContador)
oGet:SetText("Procesando contrato no. ["+RTrim(CONT->ID)+"]")
/*procesa llamadas de windows*/
SysRefresh()
/*recupera informacion de los pagos de este contrato*/
IF !lDetalle
aInfo:=ReporteDeSaldo_LoPagado()
ELSE
aInfo:=ReporteDeSaldo_LoPagado2()
ENDIF
/*inserta informacion de pagos de este contrato*/
SALD->(DBAppend())
SALD->TT_CONTA := nContador
SALD->TT_CONTR := CONT->ID
SALD->TT_SUSCR := CONT->NOMBRE
SALD->TT_FECHA := CONT->FECHA
SALD->TT_PAGAD := aInfo[CP_PAGADO ]
SALD->TT_CAPIT := aInfo[CP_CAPITAL]
SALD->TT_INTER := aInfo[CP_INTERES]
SALD->TT_SEGUR := aInfo[CP_SEGURO ]
SALD->TT_NUMPA := aInfo[CP_PAGOS ]
SALD->TT_NOTAS := ValToPrgExp(aInfo[CP_DETALLE]) //aca se guarda
cId:=CONT->ID
/*numero de cuotas*/
IF StrCharCount(cId,"-")>2
SALD->TT_NUMCU:=Val(StrToken(cId,3,"-"))*12
ENDIF
/*calculo del valor inicial del contrato*/
SALD->TT_VALOR:=ReporteDeSaldo_ValorContrato()
/*calculo del saldo*/
SALD->TT_SALDO:=SALD->TT_VALOR - SALD->TT_PAGAD
/*siguiente contrato*/
CONT->(DBSkip())
ENDDO
/*mensaje informativo*/
Msginfo("Fin de proceso, "+AllTrim(Transform(nContador,"99,999,999"))+" Contratos procesados")
/*reporte a excel*/
IF lDetalle
ReporteDeDetalle_ToExcel()
ELSE
ReporteDeSaldo_ToExcel()
ENDIF
/*habilita controles*/
oFecha:enable()
oBtnOk:enable()
oBtnExit:enable()
RETURN
PROCEDURE Main
LOCAL aArray := {{"carlos",.t.,123,date(),nil}}
local bArray := {1,date(),time(),pi(),.f.,nil}
local a, b, c, d
a := ArrayToPrg( aArray )
b := ArrayToPrg( bArray )
?a
?b
c=&(a)
d=&(b)
?valtype(c),len(c),len(c[1]),c[1,1]
?valtype(d),len(d),d[1],d[2],d[3],d[4],d[5],d[6]
RETURN
//--------------------------------------------------------------//
FUNCTION ArrayToPrg( xVal )
LOCAL cType := ValType( xVal )
LOCAL cRet := '{}'
LOCAL aVar
DO CASE
CASE cType == "A"
cRet := "{ "
FOR EACH aVar IN xVal
cRet += ( ArrayToPrg( aVar ) + ", " )
NEXT
IF cRet[ -2 ] == ','
cRet[ -2 ] := ' '
ENDIF
cRet[ -1 ] := '}'
RETURN cRet
CASE cType == "D"
RETURN "stod( '" + dtos( xVal ) + "' )"
CASE cType == "N"
RETURN ltrim( str( xVal ) )
CASE cType == "L"
RETURN iif( xVal, ".T.", ".F." )
CASE cType == "C"
RETURN "'"+xVal+"'"
CASE cType == "U"
RETURN "NIL"
ENDCASE
RETURN cRet
//--------------------------------------------------------------//
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 54 guests