#Include "FiveWin.ch"
#Include "xBrowse.ch"
STATIC oDlg
Static S08, S10, S13 // Alias de base de datos
STATIC nTCarg,nTCred
STATIC lSelSeg,NivBal
STATIC SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot // Reportes
STATIC nMA_Ini, nMA_Fin
MemVar oWnd, oMOpc, nNumEmp, cDescrEmp, Mes_Per, Ano_Per, nStation,EjeMAIn
//------------------------------------------------------------------------------
FUNCTION MOD_PBAS()
LOCAL oItem:=oMOpc
LOCAL oBrw1, oBrw2, aDatos1, aDatos2
local aGradBarSelFocus:= { { 1, RGB(252,232,171) , RGB(248,195, 34) } }
local aGradBarSel:= {{1, RGB(252,235, 184), RGB(251,222,88)}}
lSelSeg:= .F.
NivBal := 4
aTot := {{0,0,0,0}}
nReg := 0
aDatos1:= {{ "","","","","","" }}
aDatos2:= {{ "","","","","","","","" }}
DEFINE DIALOG oDlg RESOURCE "CONSBALANZ" TITLE 'Listado de Pólizas y Movimientos'
// Consulta Balanza cuentas acumulados \\
REDEFINE XBROWSE oBrw1 ID 101 OF oDlg ;
HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act' ;
COLSIZES 112,260,85,85,85,85 ;
PICTURES "@!" ,;
"@!" ,;
"999,999,999.99" ,;
"999,999,999.99" ,;
"999,999,999.99" ,;
"999,999,999.99" ;
ARRAY aDatos1 FOOTERS LINES CELL AUTOCOLS
WITH OBJECT oBrw1
**:nClrPane := {|| IIF((S08)->TIPONAT == "A",CLR_LIGHTGRAY ,CLR_WHITE)} // Como poner condicion color negrita y Fonts cuentas acumulativas
// pero no sale por ser arreglos...!...sigue pendiente
:nMarqueeStyle := MARQSTYLE_HIGHLROW //_HIGHLROWMS
:nColDividerStyle:= LINESTYLE_LIGHTGRAY
:nRowDividerStyle:= LINESTYLE_LIGHTGRAY
:bClrSel := {|| { nRGB( 0, 0,255), aGradBarSel } } // para barra de linea selecc cuando el control no tiene el foco
:bClrSelFocus := {|| { CLR_BLACK, aGradBarSelFocus } } // para barra de linea selecc cuando el control tiene el foco
:lKinetic := .f.
:lContrastClr := .f. //para que no cambie color de texto automaticamente segun intensidad del fondo
:bChange := {|| MovEdoCta(oBrw1,@aDatos2,oBrw2), oBrw2:Refresh() } // Aqui me persiste el problema de los Headers
END
// Consulta Estados de cuentas a detalle \\
REDEFINE XBROWSE oBrw2 ID 102 OF oDlg ;
HEADERS 'Tipo','Num','Fecha','Referencia','Concepto','Cargo','Abono','Sdo Act' ;
COLSIZES 28,30,50,80,180,85,85,85 ;
PICTURES "@!" ,;
"@9999" ,;
"@D" ,;
"@!" ,;
"@!" ,;
"999,999,999.99" ,;
"999,999,999.99" ,;
"999,999,999.99" ;
ARRAY aDatos2 FOOTERS CELL AUTOCOLS
WITH OBJECT oBrw2
:nMarqueeStyle := MARQSTYLE_HIGHLROW //_HIGHLROWMS
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:bClrSel := {|| { nRGB( 0, 0,255), aGradBarSel } } // para barra de linea selecc cuando el control no tiene el foco
:bClrSelFocus := {|| { CLR_BLACK, aGradBarSelFocus } } // para barra de linea selecc cuando el control tiene el foco
:lKinetic := .f.
:lContrastClr := .f. //para que no cambie color de texto automaticamente segun intensidad del fondo
:nStretchCol := STRETCHCOL_LAST
END
CargaDatos(oBrw1,@aDatos1)
MovEdoCta(oBrw1,@aDatos2,oBrw2)
ACTIVATE DIALOG oDlg CENTERED // ON INIT Refresca(oBrw,oBrw2)
oItem:Enable() // Cerramos
RETURN NIL
//------------------------------------------------------------------------------
STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2)
LOCAL xEmp,S91,Ind1Tmp1,cCta,cCtaIni,PasaCta := .T.
cCta := oBrw1:aArrayData[oBrw1:nArrayAt,1]
aDatos2:= {{ "","","","","","","","" }} [b]// Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
// Como eliminar la linea en blanco como primer elemento...[/b]
IF !cCta == Nil // * Condicion Nil que si encuentra separacion que es nil,no busque en el DbSeek por ser nulo
cCtaIni := SUBS(cCta,1,4)+SUBS(cCta,6,4)+SUBS(cCta,11,4)+SUBS(cCta,16,4)
*xEmp := nNumEmp
*S91 := "EMP"+TSTR(xEmp)+TRIM("\R_INTS"+nStation)+".DBF"
S91 := "EMP07\R_INTS7.DBF"
*Ind1Tmp1:= "R_INTS"+nStation
Ind1Tmp1:= "EMP07\R_INTS7"
USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED
S91->(DbSetIndex(Ind1Tmp1))
S91->(OrdSetFocus(1))
IF (S08)->( DbSeek(cCtaIni,.T.) ) .AND. (S08)->TIPONAT = 'D' // Aqui valida si es cuenta Detalle "D" en catalogo de cuentas que me busque en movimientos
IF S91->( DbSeek(cCtaIni) )
aSum := {{0,0,0,0,0,0,0}}
aTot := {{0,0,0,0,0,0,0}}
DO WHILE S91->(!EOF())
IF S91->CUENTAS > cCtaIni
EXIT
ENDIF
IF S91->SALDOS <> 0
/* Esto despues lo veo, me interesa mas que visualice bien los datos
aSum[1,1] := aSum[1,1] + S91->SALCARG // Suma Cargos
aSum[1,2] := aSum[1,2] + S91->SALCRED // Suma Abonos
aSum[1,3] := aSum[1,3] + S91->SALDOS // Suma Dif de saldos
aSum[1,4] += (S91->SALCARG - S91->SALCRED)
aTot[1,1] := aTot[1,1] + S91->SALCARG // Totaliza Cargos
aTot[1,2] := aTot[1,2] + S91->SALCRED // Totaliza Abonos
aTot[1,3] := aTot[1,3] + S91->SALDOS // Totaliza Dif Sdos
aTot[1,4] += (S91->SALCARG - S91->SALCRED)
*/
AADD( aDatos2, { S91->TIPO , ; //Llena datos a elementos
S91->NUMPOL , ;
S91->FHAMOV , ;
S91->REFERE , ;
S91->CONCEP , ;
S91->SALCARG , ;
S91->SALCRED , ;
S91->SALDOS } )
ENDIF
S91->(DbSkip())
ENDDO
ENDIF
ENDIF
ENDIF
oBrw2:SetArray(aDatos2)
RETURN NIL
** Funcion para colorear en negrita o Font cuentas acumulativas en niveles de cuentas, AUN NO SALE ...!
//------------------------------------------------------------------------------
STATIC FUNCTION FontNiv(oFont,oFont1,oFont2)
LOCAL cColor
DO CASE
CASE (S08)->NIVSUM = 1
IF (S08)->TIPONAT == "A"
cColor := CLR_BLACK // CLR_LIGHTGRAY ,CLR_WHITE
**cFont:= ...como seria la instruccion
ENDIF
CASE (S08)->NIVSUM = 2
IF (S08)->TIPONAT == "A"
cColor := CLR_BLACK // CLR_LIGHTGRAY ,CLR_WHITE
**cFont:= ...como seria la instruccion
ENDIF
CASE (S08)->NIVSUM = 3
IF (S08)->TIPONAT == "A"
cColor := CLR_BLACK // CLR_LIGHTGRAY ,CLR_WHITE
**cFont:= ...como seria la instruccion
ENDIF
CASE (S08)->NIVSUM = 4
IF (S08)->TIPONAT == "A"
cColor := CLR_BLACK // CLR_LIGHTGRAY ,CLR_WHITE
**cFont:= ...como seria la instruccion
ENDIF
ENDCASE
RETURN(cColor)
** Funcion para espaciar niveles de cuentas Ok salio como yo deseaba...!
//------------------------------------------------------------------------------
STATIC FUNCTION NivCol(nCol)
DO CASE
CASE (S08)->NIVSUM = 1
nCol := ""
CASE (S08)->NIVSUM = 2
nCol = " "
CASE (S08)->NIVSUM = 3
nCol = " "
CASE (S08)->NIVSUM = 4
nCol = " "
ENDCASE
RETURN(nCol)
* CARGA DATOS Y MOVIMIENTOS AUXILIARES TEMPORALES EXCEPTO LA FUNCION CargaDatos, que es una rutina para agregar AADD()*
//------------------------------------------------------------------------------
STATIC FUNCTION CargaDatos(oBrw1,aDatos1)
LOCAL cCtas
aDatos1:= {}
S08 := Abre_Dbf(8,8) // ABRE CATCTAxA.DBF // Catalogo de cuentas INDEX ON "CUENTAS"
*S08 := "EMP07\CATCTA14.DBF" // ABRE CATCTAxA.DBF // Catalogo de cuentas INDEX ON "CUENTAS"
*S08 := "EMP07\CATCTA14.CDX" // ABRE CATCTAxA.DBF // Catalogo de cuentas INDEX ON "CUENTAS"
S13 := Abre_Dbf(13,13) // Abre: MOVTxMxA.DBF // Movimientos INDEX ON "MV_NCTA+MV_REFE"
nTCarg := 0
nTCred := 0
(S08)->(DbGoTop())
SdoMesAnt:= ("SALD"+TSTR(Mes_Per - 1))
cCtas := SUBS((S08)->CUENTAS,1,4)
IF (S08)->( !BOF() )
DO WHILE (S08)->(!EOF())
IF cCtas <> SUBS((S08)->CUENTAS,1,4)
AADD( aDatos1, { Nil } )
ENDIF
(S08)->(DbSetOrder(1))
(S08)->(DbSeek((S08)->CUENTAS))
SdoIni := (S08)->(&SdoMesAnt)
(S13)->(DbSetOrder(3))
(S13)->(SetSeek((S08)->CUENTAS))
nCol:= NivCol(nCol)
aSum := {{0,0,0}}
DO WHILE FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4) .AND. (S13)->(!EOF())
aSum[1,1] := aSum[1,1] + (S13)->MV_CARG // Suma CARGOS
aSum[1,2] := aSum[1,2] + (S13)->MV_ABON // Suma ABONOS
(S13)->(DbSkip())
ENDDO
aSum[1,3] := (SdoIni + aSum[1,1]) - aSum[1,2]
IF ( (S08)->TIPONAT = 'D' )
aTot[1,1] := aTot[1,1] + SdoIni // Total Saldos iniciales
aTot[1,2] := aTot[1,2] + aSum[1,1] // Total de Cargos
aTot[1,3] := aTot[1,3] + aSum[1,2] // Total DE Abonos
ENDIF
IF ( (S08)->NIVSUM <= NivBal )
IF SdoIni <> 0 .OR. aSum[1,1] <> 0 .OR. aSum[1,2] <> 0
AADD( aDatos1, { Ext_xNiv(LTRIM((S08)->CUENTAS)), ; // Llena datos de ARRAY
nCol+(S08)->DESCRIP , ;
SdoIni , ;
aSum[1,1] , ;
aSum[1,2] , ;
aSum[1,3] } )
ENDIF
ENDIF
cCtas := SUBS((S08)->CUENTAS,1,4)
(S08)->(DbSkip())
ENDDO
ELSE
aDatos1 := {{ "","","","","","" }}
ENDIF
oBrw1:SetArray(aDatos1)
* CargaMov() // Comentado para no volver a cargar datos,por mientras diseño nuevos browses
RETURN NIL
** Rutina para movimientos unicamente facturas pendientes a pagar como estado de cuenta,excluyendo facturas ya pagadas
//------------------------------------------------------------------------------
STATIC FUNCTION CargaMov()
Local S91, Ind1Tmp1, Ind1Tmp2, CreaDbf1,TitRp,CtaIni, CtaFin,PasaCta := .T.,;
cMA_Ini, cMA_Fin,cCtas,nSegNeg,cCtSN // oText
LOCAL cMes, cAno,xEMP,aCarg,aAbon
LOCAL S05, S08, S10, S13 // Alias de base de datos
xEmp := nNumEmp
cMes := TSTR(Mes_Per)
cAno := VAL(SUBS(STR(Ano_Per,4),3,2))
nMA_Ini := EjeMAIn
nMA_Fin := cMes+TSTR(cAno)
cMA_Ini := SUBS(nMA_Ini,3,2)+SUBS(nMA_Ini,1,2)
cMA_Fin := SUBS(nMA_Fin,3,2)+SUBS(nMA_Fin,1,2)
***********************************************************************************
*----- Traspasando cuentas integración de saldos general en archivo temporal -----*
***********************************************************************************
S91 := "EMP"+TSTR(xEMP)+TRIM("\R_INTS"+nStation)+".DBF"
Ind1Tmp1:= "R_INTS"+nStation
Ind1Tmp2:= "R_INTSN"
nReg := 1
IF FILE(S91)
*S91->(DbCloseArea())
FERASE(S91)
FERASE("EMP"+TSTR(nNumEmp)+"\"+Ind1Tmp1+".CDX")
ENDIF
FIELD CUENTAS, SEGNEG, REFERE
IF !FILE(S91)
CreaDbf1 := {{"TIPO " , "C" , 2 , 0 } ,; // 1
{"NUMPOL " , "N" , 5 , 0 } ,; // 2
{"FHAMOV " , "D" , 8 , 0 } ,; // 3
{"CUENTAS" , "C" , 16 , 0 } ,; // 4
{"SEGNEG" , "N" , 4 , 0 } ,; // 5
{"REFERE " , "C" , 10 , 0 } ,; // 6
{"CONCEP " , "C" , 60 , 0 } ,; // 7
{"SALCARG" , "N" , 12 , 2 } ,; // 8
{"SALCRED" , "N" , 12 , 2 } ,; // 9
{"SALDOS" , "N" , 12 , 2 } ,; //10 Sdo de factura a pagar
{"IMPBS1" , "N" , 12 , 2 } ,; //11 Base 1
{"TASA1" , "N" , 12 , 2 } ,; //12 Tasa 1
{"IVA_1" , "N" , 12 , 2 } ,; //13 IVA 10%
{"IMPBS2" , "N" , 12 , 2 } ,; //14 Base 2
{"TASA2" , "N" , 12 , 2 } ,; //15 Tasa 2
{"IVA_2" , "N" , 12 , 2 } ,; //16 IVA 15%
{"T_0" , "N" , 12 , 2 } ,; //17 Tasa 0
{"T_EXENT" , "N" , 12 , 2 } ,; //18 Exento
{"OTROS" , "N" , 12 , 2 } ,; //19 Otros
{"IMPBS3" , "N" , 12 , 2 } ,; //20 Otras tasas
{"T_Otras" , "N" , 12 , 2 } ,; //21 IVA x 0
{"RET_IVA" , "N" , 12 , 2 } ,; //22 Ret IVA
{"RET_ISR" , "N" , 12 , 2 } ,; //23 Ret ISR
{"TOTFAC" , "N" , 12 , 2 } ,; //24 Importe total por factura
{"REG " , "N" , 3 , 0 }} //25
DbCreate(S91,CreaDbf1)
USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED
INDEX ON CUENTAS+REFERE TAG (Ind1Tmp1) FOR !DELETED()
INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()
S91->(DbSetIndex(Ind1Tmp1))
S91->(OrdSetFocus(1))
ELSE
USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED
ZAP
INDEX ON CUENTAS+REFERE TAG (Ind1Tmp1) FOR !DELETED()
INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()
S91->(DbSetIndex(Ind1Tmp1))
S91->(OrdSetFocus(1))
ENDIF
aCarg:= {{0,0,0}}
aAbon:= {{0,0,0}}
S05 := Abre_Dbf(5,5) // ABRE MA_MOVTO.DBF
(S05)->(DbSEEK(cMA_Ini))
DO WHILE (S05)->ANOMES >= cMA_Ini .AND. (S05)->ANOMES <= cMA_Fin .AND. (S05)->(!EOF())
Mes_Per := VAL(SUBS((S05)->ANOMES,3,2))
Ano_Per := VAL(SUBS((S05)->ANOMES,1,2))
S13 := Abre_Dbf(13,13) // ABRE: MOVTxMxA.DBF
(S13)->(DbSetOrder(4)) // Mov con referencia
(S13)->(DbGoTop())
DO WHILE (S13)->(!EOF())
S91->(DbSeek((S13)->MV_NCTA+(S13)->MV_REFE))
IF S91->(!FOUND())
S91->(DbAppend())
REPLACE S91->TIPO WITH (S13)->MV_TIPO ,;
S91->NUMPOL WITH (S13)->MV_NUMP ,;
S91->FHAMOV WITH (S13)->MV_FHAM ,;
S91->CUENTAS WITH (S13)->MV_NCTA ,;
S91->SEGNEG WITH (S13)->SEGNEG ,;
S91->REFERE WITH (S13)->MV_REFE ,;
S91->CONCEP WITH (S13)->MV_CONC
ELSE
DO WHILE S91->(!RLOCK())
ENDDO
ENDIF
IF (S13)->TIPOMOV = "A"
aAbon[1,1] := (S13)->IMPBS1
aAbon[1,2] := (S13)->IMPBS2
aAbon[1,3] := (S13)->OTROS
ELSE
aCarg[1,1] := (S13)->IMPBS1
aCarg[1,2] := (S13)->IMPBS2
aCarg[1,3] := (S13)->OTROS
ENDIF
IF (S13)->MV_CARG <> 0
REPLACE S91->SALCARG WITH (S13)->MV_CARG + S91->SALCARG ,;
S91->REG WITH S91->REG - nReg
IF (S13)->MV_ABON <> 0 // Si existe en mismo renglon el saldo de abonos \\
REPLACE S91->SALCRED WITH (S13)->MV_ABON + S91->SALCRED ,;
S91->REG WITH S91->REG - nReg
ENDIF
ELSE
REPLACE S91->SALCRED WITH (S13)->MV_ABON + S91->SALCRED ,;
S91->REG WITH IF((S13)->MV_ABON >0,S91->REG + nReg,S91->REG - nReg)
ENDIF
IF (S13)->TIPOMOV = "A"
REPLACE S91->TASA1 WITH (S13)->TASA1 ,;
S91->TASA2 WITH (S13)->TASA2
ENDIF
REPLACE S91->SALDOS WITH S91->SALCARG - S91->SALCRED ,;
S91->IMPBS1 WITH (aAbon[1,1] - aCarg[1,1]) + S91->IMPBS1 ,;
S91->IVA_1 WITH ROUND(S91->IMPBS1 * S91->TASA1 / 100,2) ,;
S91->IMPBS2 WITH (aAbon[1,2] - aCarg[1,2]) + S91->IMPBS2 ,;
S91->TASA2 WITH IF((S13)->TIPOMOV = "A",(S13)->TASA2,0) ,;
S91->IVA_2 WITH ROUND(S91->IMPBS2 * S91->TASA2 / 100,2) ,;
S91->T_0 WITH (S13)->T_0 + S91->T_0 ,;
S91->T_EXENT WITH (S13)->T_EXENT + S91->T_EXENT ,;
S91->OTROS WITH (aAbon[1,3] - aCarg[1,3]) + S91->OTROS ,;
S91->TOTFAC WITH S91->IMPBS1+S91->IVA_1+S91->IMPBS2+ ;
S91->IVA_2+S91->T_0+S91->T_EXENT + ;
S91->OTROS
aCarg:= {{0,0,0}}
aAbon:= {{0,0,0}}
(S13)->(DbSkip())
ENDDO
(S05)->(DbSkip())
Close_Dbf(13,S13)
ENDDO
*Close_Dbf(8,S08)
*Close_Dbf(10,S10)
*S91->(DbCloseArea())
RETURN NIL
* FUNCION ADICIONAL...para que compilen, por el momento lo tengo comentado
/*
//------------------------------------------------------------------------------
FUNCTION FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4)
Local NIVSU[4], NIVCT[4], NIVS, OpNiv
NIVSU[1] := 1
NIVSU[2] := 2
NIVSU[3] := 3
NIVSU[4] := 4
NIVS := IF(lSelSeg,NIVSU[(S10)->NIVSUM], NIVSU[(S08)->NIVSUM])
IF lSelSeg
Cta1 := SUBS((S10)->CUENTAS,1,4)
Cta2 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)
Cta3 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)+SUBS((S10)->CUENTAS,9,4)
Cta4 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)+SUBS((S10)->CUENTAS,9,4)+SUBS((S10)->CUENTAS,13,4)
NIVCT[1] := Cta1 = SUBS((S13)->MV_NCTA,1,4) .AND. (S10)->NIVSUM = NIVS
NIVCT[2] := Cta2 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4) .AND. (S10)->NIVSUM = NIVS
NIVCT[3] := Cta3 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4) .AND. (S10)->NIVSUM = NIVS
NIVCT[4] := Cta4 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4)+SUBS((S13)->MV_NCTA,13,4) .AND. (S10)->NIVSUM = NIVS
ELSE
Cta1 := SUBS((S08)->CUENTAS,1,4)
Cta2 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)
Cta3 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)+SUBS((S08)->CUENTAS,9,4)
Cta4 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)+SUBS((S08)->CUENTAS,9,4)+SUBS((S08)->CUENTAS,13,4)
NIVCT[1] := Cta1 = SUBS((S13)->MV_NCTA,1,4) .AND. (S08)->NIVSUM = NIVS
NIVCT[2] := Cta2 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4) .AND. (S08)->NIVSUM = NIVS
NIVCT[3] := Cta3 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4) .AND. (S08)->NIVSUM = NIVS
NIVCT[4] := Cta4 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4)+SUBS((S13)->MV_NCTA,13,4) .AND. (S08)->NIVSUM = NIVS
ENDIF
OpNiv := NIVCT[NIVS]
*alert(OpNiv)
RETURN (OpNiv)
//------------------------------------------------------------------------------
FUNCTION EXT_xNIV(cCta)
LOCAL cCta1, cCta2, cCta3, cCta4, subsCta
cCTA1 := SUBS(cCta, 1,4)
cCTA2 := SUBS(cCta, 5,4)
cCTA3 := SUBS(cCta, 9,4)
cCTA4 := SUBS(cCta,13,4)
SubsCta:= cCta1 + '-'+ cCta2 + '-' + cCta3 + '-' + cCta4
RETURN (SubsCta)
//------------------------------------------------------------------------------
FUNCTION TSTR(VARf)
RETURN (IF(VARf <=9, '0'+STR(VARf,1), STR(VARf,2)))
*/ * Fin comentario, lo pueden quitar....