Como controlar de no agregar elemento...SOLUCIONADOooo
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
Adrian,
Deja tu codigo de declaracion del XBrowse como lo tienes , es lo recomendado por Mr. Nages.
El post que viste era la manera anterior como yo lo hacía.
Lo que te sugería, para ver si se corregía la pérdida de los Columns Headers, es que intentaras con:
static aTitCols:={}
static aFootCols:={}
static aWidthCols:={}
static aPictCols:={}
static nValores:=0
For n:=1 to len(oBrw:aCols)
aadd(aTitCols,oBrw:aCols[n]:cHeader)
aadd(aFootCols,oBrw:aCols[n]:bFooter)
aadd(aWidthCols,oBrw:aCols[n]:nWidth)
aadd(aPictCols,oBrw:aCols[n]:cEditPicture)
Next
Hoy, mas tarde o por la noche, intentaré adaptarlo a tu ejemplo y lo subo de nuevo.
Saludos.
Deja tu codigo de declaracion del XBrowse como lo tienes , es lo recomendado por Mr. Nages.
El post que viste era la manera anterior como yo lo hacía.
Lo que te sugería, para ver si se corregía la pérdida de los Columns Headers, es que intentaras con:
static aTitCols:={}
static aFootCols:={}
static aWidthCols:={}
static aPictCols:={}
static nValores:=0
For n:=1 to len(oBrw:aCols)
aadd(aTitCols,oBrw:aCols[n]:cHeader)
aadd(aFootCols,oBrw:aCols[n]:bFooter)
aadd(aWidthCols,oBrw:aCols[n]:nWidth)
aadd(aPictCols,oBrw:aCols[n]:cEditPicture)
Next
Hoy, mas tarde o por la noche, intentaré adaptarlo a tu ejemplo y lo subo de nuevo.
Saludos.
Last edited by FranciscoA on Thu Apr 24, 2014 5:48 pm, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
FranciscoA wrote:Adrian,
Deja tu codigo de declaracion del XBrowse como lo tienes , es lo recomendado por Mr. Nages.
El post que viste era la manera anterior como yo lo hacía.
Lo que te sugería, para ver si se corregía la pérdida de los Columns Headers, es que intentaras con:
static aTitCols:={}
static aFootCols:={}
static aWidthCols:={}
static aPictCols:={}
static nValores:=0
For n:=1 to len(oBrw:aCols)
aadd(aTitCols,oBrw:aCols[n]:cHeader)
aadd(aFootCols,oBrw:aCols[n]:bFooter)
aadd(aWidthCols,oBrw:aCols[n]:nWidth)
aadd(aPictCols,oBrw:aCols[n]:cEditPicture)
Next
Hoy por la noche intentaré adaptarlo a tu ejemplo y lo subo de nuevo.
Saludos.
Hola Francisco, hice cambios en mi prg, pero me tira error bound array y compile tu ejemplo al igual me bota error de bound array, y ando depurando, del porque ! y no modifique tu cambio, solo agregue el recurso , pero nada.....no le busco error, hasta linea de activata dialog oDlg, pero no me indica que variable u objeto .
Saludos
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
aDatos2:= {{ "","","","","","","","" }}
ENDIF
oBrw2:aCols[6]:nTotal= Trans( aTot[1],"999,999,999.99") // Total cargos
...
Tambien cambia lo anterior relacionado a esto:
...
aDatos2:= {{ "","","","","","","","" }}
ENDIF
Code: Select all | Expand
// oBrw2:SetArray(aDatos2) //cambia esta linea oBrw2:aArrayData:=aDatos2 //por esta
oBrw2:aCols[6]:nTotal= Trans( aTot[1],"999,999,999.99") // Total cargos
...
Tambien cambia lo anterior relacionado a esto:
Code: Select all | Expand
For n := 1 to len( oBrw1:aCols ) //Font segun lineas condicionadas oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } Next
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
FranciscoA wrote:En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
aDatos2:= {{ "","","","","","","","" }}
ENDIFCode: Select all | Expand
// oBrw2:SetArray(aDatos2) //cambia esta linea oBrw2:aArrayData:=aDatos2 //por esta
oBrw2:aCols[6]:nTotal= Trans( aTot[1],"999,999,999.99") // Total cargos
...
Tambien cambia lo anterior relacionado a esto:Code: Select all | Expand
For n := 1 to len( oBrw1:aCols ) //Font segun lineas condicionadas oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } Next
Hola Francisco buenos dias , gracias por tu interes de continuar ayudandome, espero no cansarlo con mis tonteras.
Logre compilar tu ejemplo y si funciona a tu estilo,pero no halle modo de adaptarlo a mi codigo, porque no tiene la cabecera de los headers oCol:cHeader := "Consec" para no codificar mas lineas y no lo halle, por tener ARRAY aDatos y Headers
REDEFINE XBROWSE oBrw2 ID 102 OF oDlg ;
HEADERS 'Tipo','Num','Fecha','Referencia','Concepto','Cargo','Abono','Sdo Act' ;
COLSIZES 28,30,52,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.
Intentare lo que me indicas a ver que sale, ya tengo pensado de otra manera, mejor crear un buttom, del primer browse,tengo que buscarle otras maneras.
Saludos y buen dia Francisco.
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
Adriano, revisa tu email. Te envié una solución que debería funcionar. Prueba.
Saludos.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
FranciscoA wrote:Adriano, revisa tu email. Te envié una solución que debería funcionar. Prueba.
Saludos.
Buenas noches Francisco, disculpa por no contestar a tiempo, tuve un percance desde ayer,pero gracias a Dios todo bien y nuevamente gracias de nuevo,checare mi email y por otra parte cambie lo que me indicaste y nada.!
Saludos y buenas noches .
Atte: Adrian C. C.
Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..
ACC69 wrote:FranciscoA wrote:Adriano, revisa tu email. Te envié una solución que debería funcionar. Prueba.
Saludos.
Buenas noches Francisco, disculpa por no contestar a tiempo, tuve un percance desde ayer,pero gracias a Dios todo bien y nuevamente gracias de nuevo,checare mi email y por otra parte cambie lo que me indicaste y nada.!
Saludos y buenas noches .
Atte: Adrian C. C.
Gracias Francisco por tu ayuda y paciencia, ahora si funcionaaa, no habia quitado la variable desde principio, por eso me seguia añadiendo registro vacio, que no existe...puse esta esta variable aDatos2:= {}, como me indicaste,pero no habia quitado aDatos2:= {{ "","","","","","","","" }} en otras lineas, y ya lo depure con mas tranquilidad , me funciono!. gracias mis mas sinceras agradecimiento Francisco y por tu tiempo.
Y para los que les pueda servir les dejo el codigo, que las bases de datos esta expuesto mas arriba.
Code: Select all | Expand
#Include "FiveWin.ch"#Include "xBrowse.ch" * Archivo temporal : S99STATIC oDlg,oFontStatic S05,S08, S10, S13,S99,Ind1Tmp1,Ind1Tmp2 // Alias de base de datosSTATIC lSelSeg,NivBalSTATIC cCta,cCtaIni,cRefere,SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot //STATIC nMA_Ini, nMA_Fin, nMemVar oWnd, oMOpc, nNumEmp, cDescrEmp, Mes_Per, Ano_Per, nStation,EjeMAIn//------------------------------------------------------------------------------FUNCTION C_PROVCLIE() LOCAL oItem:=oMOpc,oWChld, nW, nH,xEmp LOCAL aDatos1, aDatos2, oBrw1, oBrw2,lSalir LOCAL aGradBarSelFocus:= { { 1, RGB(252,232,171) , RGB(248,195, 34) } } LOCAL aGradBarSel:= {{1, RGB(252,235, 184), RGB(251,222,88)}} xEmp := nNumEmp S99 := "EMP"+TSTR(xEMP)+TRIM("\C_INTS"+nStation)+".DBF" Ind1Tmp1:= "C_INTS"+nStation Ind1Tmp2:= "C_INTSN" lSelSeg:= .F. NivBal := 4 aTot := {{ 0,0,0,0,0,0,0 }} nReg := 0 aDatos1:= {{ "","","","","","" }} aDatos2:= {{ "","","","","","","","" }} CargDatos2() *DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-10 ITALIC BOLD DEFINE FONT oFont NAME "ARIAL" SIZE 0,-11 BOLD DEFINE WINDOW oWChld MDIChild FROM 1,2 TO 2,2 OF oWnd TITLE 'Consulta estado de cuenta de CxP Proveedores ' NOZOOM // ICON oIcon DEFINE DIALOG oDlg RESOURCE "C_CXPPROVE" FONT oWnd:oFont OF oWChld // Consulta Balanza cuentas acumulados \\ REDEFINE XBROWSE oBrw1 ID 101 OF oDlg ; HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act' ; COLSIZES 115,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 AUTOCOLS WITH OBJECT oBrw1 //ESTILOS DE LINEAS :nMarqueeStyle := MARQSTYLE_HIGHLROW //barra selectora :lColDividerComplete:= .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse :nColDividerStyle := LINESTYLE_BLACK :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() } END For n := 1 to len( oBrw1:aCols ) //Font segun lineas condicionadas // Como puedo leer el valor ... oBrw1:aCols[n]:oDataFont := {|| IF( !EMPTY(oBrw1:aCols[2]:Value), IF( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } Next // 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,52,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 //ESTILOS DE LINEAS :nMarqueeStyle := MARQSTYLE_HIGHLROW //barra selectora :lColDividerComplete:= .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse :nColDividerStyle := LINESTYLE_BLACK :lFooter := .T. :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 :aCols[4]:nEdittype := EDIT_BUTTON :aCols[4]:nBtnBmp := 1 *:aCols[4]:nWidth := 50 :aCols[4]:AddResource( "DETFACT" ) // tu ícono p/el boton *:aCols[4]:bstrData := {|| S99->cuentas } // en tu caso :aCols[4]:bEditBlock := {|| MovDetFac(oBrw1,oBrw2) } // llama a una funcion que abre un Dlg y muestra el Detalle *:aCols[4]:bEditBlock := {|| IF( SUBS(oBrw1:aCols[2]:Value,1,3) = " ", MovDetFac(oBrw1,oBrw2),) } // llama a una funcion que abre un Dlg y muestra el Detalle :aCols[6]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 :aCols[6]:oFooterFont := oFont :aCols[7]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 :aCols[7]:oFooterFont := oFont :aCols[8]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 :aCols[8]:oFooterFont := oFont END oWChld:bGotFocus := {|| oBrw1:SetFocus() } CargaDatos(oBrw1,@aDatos1) MovEdoCta(oBrw1,@aDatos2,oBrw2) nW:= IF(GetVersion()[1]>5,15, 8) nH:= IF(IsWinNT(),33,25) ACTIVATE DIALOG oDlg NOWAIT VALID ( oWChld:End() ) // IT HAS TO BE NONMODAL -->NOWAIT CLAUSE ACTIVATE WINDOW oWChld ON INIT oDlg:Move(0,0) ON RESIZE oWChld:SetSize(oDlg:nWidth+nW,oDlg:nHeight+nH,.T.) ; VALID Finaliza(oItem)RETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2) LOCAL aDat[9],aSum[8], aSub[8], aTot[8] cCta := oBrw1:aArrayData[oBrw1:nArrayAt,1] aDatos2:= {} AFill(aDat,"") AFill(aSum,0) AFill(aSub,0) AFill(aTot,0) IF !cCta == "" // Condicion "" que si encuentra separacion que es "",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) USE (S99) ALIAS S99 EXCLUSIVE // NEW SHARED S99->(DbSetIndex(Ind1Tmp1)) S99->(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 S99->( DbSeek(cCtaIni) ) aDat[2]:= S99->REFERE // ID Principal de referencias folios o facturas DO WHILE S99->(!EOF()) IF S99->REFERE <> aDat[2] // ID Referencia IF ( ROUND(aSum[3],2) <> 0.00 ) aTot[1] += aSum[1] // Total Cargos aTot[2] += aSum[2] // Total Abonos aTot[3] += aSum[3] // Total Dif Sdos *Adel(aDatos2,1,.t.) AADD( aDatos2, { aDat[3] , ; // S99->TIPO aDat[4] , ; // S99->NUMPOL aDat[5] , ; // S99->FHAMOV aDat[2] , ; // S99->REFERE aDat[6] , ; // S99->CONCEP aSum[1] , ; aSum[2] , ; aSum[3] } ) ENDIF AFill(aSum,0) ENDIF IF S99->CUENTAS > cCtaIni EXIT ENDIF aDat[1]:= S99->CUENTAS // ID Principal de cuentas contables aDat[2]:= S99->REFERE // ID Principal de referencias folios o facturas aDat[3]:= S99->TIPO aDat[4]:= S99->NUMPOL aDat[5]:= S99->FHAMOV aDat[6]:= S99->CONCEP aSum[1] += S99->SALCARG // Suma Cargos aSum[2] += S99->SALCRED // Suma Abonos aSum[3] := aSum[1] - aSum[2] // Suma Dif de saldos S99->(DbSkip()) ENDDO *ELSE *aDatos2:= {{ "","","","","","","","" }} ENDIF *ELSE *aDatos2:= {{ "","","","","","","","" }} *ENDIF ENDIF *oBrw2:SetArray(aDatos2) // Este No funciona ... oBrw2:aArrayData := aDatos2 // Este Si funciona ... oBrw2:aCols[6]:nTotal= Trans( aTot[1],"999,999,999.99") // Total cargos oBrw2:aCols[7]:nTotal= Trans( aTot[2],"999,999,999.99") // Total Abonos oBrw2:aCols[8]:nTotal= Trans( aTot[3],"999,999,999.99") // Total Dif Sdos oBrw2:Refresh()RETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION MovDetFac(oBrw1,oBrw2) LOCAL oDlg2,oBrw LOCAL aGradBarSelFocus:= { { 1, RGB(252,232,171) , RGB(248,195, 34) } } LOCAL aGradBarSel:= {{1, RGB(252,235, 184), RGB(251,222,88)}} LOCAL cAlias, oS_Obs := ARRAY(2),oFnt1, cObserva:="" cCta := oBrw1:aArrayData[oBrw1:nArrayAt,1] cCtaIni := SUBS(cCta,1,4)+SUBS(cCta,6,4)+SUBS(cCta,11,4)+SUBS(cCta,16,4) cRefere := oBrw2:aArrayData[oBrw2:nArrayAt,4] IF !EMPTY(cRefere) // Condicion Nil que la referencia esta vacia *Refr_MovFact(cCtaIni,cRefere,oBrw) S99->( OrdScope(0,cCtaIni+cRefere) ) S99->( OrdScope(1,cCtaIni+cRefere) ) S99->( DbGoTop() ) DEFINE FONT oFnt1 NAME "Arial" SIZE 0,-14 BOLD DEFINE DIALOG oDlg RESOURCE "C_MOVDETFAC" REDEFINE XBROWSE oBrw ID 101 OF oDlg ; HEADERS 'Tipo','Num' ,'Fecha' ,'Referencia','Concepto','Cargo' ,'Abono' ,"Dif Sdo" ; COLUMNS 'TIPO','NUMPOL','FHAMOV','REFERE' ,'CONCEP' ,'SALCARG','SALCRED','DIFSDO' ; SIZES 28,30,52,80,180,85,85,85 ; PICTURES "","","","","","999,999,999.99","999,999,999.99","999,999,999.99" ; ALIAS S99->( ALIAS() ) FOOTERS LINES CELL AEval( oBrw:aCols, { |o| o:nEditType := 0 ,; //No editables o:nHeadStrAlign:= 2 } ) //texto encab/col centrado Refr_MovFact(oBrw) WITH OBJECT oBrw :nMarqueeStyle := MARQSTYLE_HIGHLROW //_HIGHLROWMS :nColDividerStyle:=LINESTYLE_LIGHTGRAY :nRowDividerStyle:=LINESTYLE_LIGHTGRAY //:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales :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 := { || S_Observac(@oS_Obs,@cObserva) } :aCols[6]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 * :aCols[6]:oFooterFont := oFont * oBrw:aCols[6]:nTotal= Trans( aSum[1],"999,999,999.99") // Total cargos :aCols[7]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 * :aCols[7]:oFooterFont := oFont * oBrw:aCols[7]:nTotal= Trans( aSum[2],"999,999,999.99") // Total cargos :aCols[8]:nFootStrAlign:= 1 // AL_LEFT - AL_RIGHT - AL_CENTER - 0 - 1 - 2 :aCols[8]:oFooterFont := oFont END REDEFINE SAY oS_Obs[01] PROMPT "Observación:" ID 151 OF oDlg COLOR CLR_BLACK Font oFnt1 REDEFINE SAY oS_Obs[02] PROMPT cObserva ID 152 OF oDlg COLOR CLR_BLUE Font oFnt1 ACTIVATE DIALOG oDlg CENTERED ENDIF S99->( OrdScope(0,Nil) ) S99->( OrdScope(1,Nil) ) S99->( DbSeek(cCtaIni) ) S99->( DbGoTop() ) RELEASE oBrwRETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION Refr_MovFact(oBrw) LOCAL aSum[3] AFILL(aSum,0) S99->( DbSeek(cCtaIni+cRefere) ) S99->( DbGoTop() ) DO WHILE S99->CUENTAS = cCtaIni .AND. S99->REFERE = cRefere .AND. S99->( !EOF() ) aSum[1] += S99->SALCARG aSum[2] += S99->SALCRED aSum[3] := aSum[1] - aSum[2] S99->( DbSkip() ) ENDDO oBrw:aCols[6]:nTotal= Trans( aSum[1],"999,999,999.99") // Total cargos oBrw:aCols[7]:nTotal= Trans( aSum[2],"999,999,999.99") // Total cargos oBrw:aCols[8]:nTotal= Trans( aSum[3],"999,999,999.99") // Total cargos oBrw:Refresh() S99->( OrdScope(0,cCtaIni+cRefere) ) S99->( OrdScope(1,cCtaIni+cRefere) ) S99->( DbGoTop() )RETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION S_Observac(oS_Obs,cObserva) cObserva:= S99->REFAMP // Referencia ampliada u observacion oS_Obs[02]:Refresh()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 ENDCASERETURN(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 = " " ENDCASERETURN(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" S13 := Abre_Dbf(13,13) // Abre: MOVTxMxA.DBF // Movimientos INDEX ON "MV_NCTA+MV_REFE" (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, { "","","","","","","","" } ) 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)RETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION CargDatos2(lDlg) LOCAL oMeter, oDlgP DEFINE DIALOG oDlgP RESOURCE "PROGRESS" TITLE "Mes_Per" FONT oWnd:oFont *oDlgP:bStart := {|| CreaTemp(nMA_Ini,oMeter),oDlgP:End()} oDlgP:bStart:= { || CargaMov(oMeter), oDlgP:End() } oMeter := TProgress():Redefine(100, oDlgP) ACTIVATE DIALOG oDlgP CENTERED *oBrw2:Refresh() RELEASE oMeter, oDlgPRETURN (.T.) ** Rutina para movimientos unicamente facturas pendientes a pagar como estado de cuenta,excluyendo facturas ya pagadas//------------------------------------------------------------------------------STATIC FUNCTION CargaMov(oMeter) LOCAL cMes,cAno,cMA_Ini,cMA_Fin,CreaDbf1,nConteo 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 -----* *********************************************************************************** nReg := 1 nConteo := 1 IF FILE(S99) *S99->(DbCloseArea()) FERASE(S99) FERASE("EMP"+TSTR(nNumEmp)+"\"+Ind1Tmp1+".CDX") ENDIF FIELD CUENTAS, SEGNEG, REFERE IF !FILE(S99) 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 {"REFAMP " , "C" ,160 , 0 } ,; // 7 {"CONCEP " , "C" , 60 , 0 } ,; // 8 {"SALCARG" , "N" , 12 , 2 } ,; // 9 {"SALCRED" , "N" , 12 , 2 } ,; //10 {"DIFSDO" , "N" , 12 , 2 } ,; //11 {"REG " , "N" , 3 , 0 }} //12 DbCreate(S99,CreaDbf1) USE (S99) ALIAS S99 EXCLUSIVE // NEW SHARED INDEX ON CUENTAS+REFERE TAG (Ind1Tmp1) FOR !DELETED() S99->(DbSetIndex(Ind1Tmp1)) S99->(OrdSetFocus(1)) ELSE USE (S99) ALIAS S99 EXCLUSIVE // NEW SHARED *ZAP INDEX ON CUENTAS+REFERE TAG (Ind1Tmp1) FOR !DELETED() S99->(DbSetIndex(Ind1Tmp1)) S99->(OrdSetFocus(1)) ENDIF 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()) CursorWait() Mes_Per := VAL(SUBS((S05)->ANOMES,3,2)) Ano_Per := VAL(SUBS((S05)->ANOMES,1,2)) S13 := Abre_Dbf(13,13) // ABRE: MOVTxMxA.DBF oMeter:SetRange(1,(S13)->(Lastrec())) oMeter:SetPos(0) (S13)->( DbSetOrder(4) ) // Mov con referencia (S13)->( DbGoTop() ) DO WHILE (S13)->( !EOF() ) S99->( DbSeek((S13)->MV_NCTA+(S13)->MV_REFE) ) S99->(DbAppend()) REPLACE S99->TIPO WITH (S13)->MV_TIPO ,; S99->NUMPOL WITH (S13)->MV_NUMP ,; S99->FHAMOV WITH (S13)->MV_FHAM ,; S99->CUENTAS WITH (S13)->MV_NCTA ,; S99->SEGNEG WITH (S13)->SEGNEG ,; S99->REFERE WITH (S13)->MV_REFE ,; S99->REFAMP WITH (S13)->OBSERVA ,; S99->CONCEP WITH (S13)->MV_CONC IF (S13)->MV_CARG <> 0 REPLACE S99->SALCARG WITH (S13)->MV_CARG + S99->SALCARG ,; S99->REG WITH S99->REG - nReg IF (S13)->MV_ABON <> 0 // Si existe en mismo renglon el saldo de abonos \\ REPLACE S99->SALCRED WITH (S13)->MV_ABON + S99->SALCRED ,; S99->REG WITH S99->REG - nReg ENDIF ELSE REPLACE S99->SALCRED WITH (S13)->MV_ABON + S99->SALCRED ,; S99->REG WITH IF((S13)->MV_ABON >0,S99->REG + nReg,S99->REG - nReg) ENDIF nConteo++ (S13)->(DbSkip()) oMeter:SetPos(nConteo) SysRefresh() ENDDO (S05)->(DbSkip()) Close_Dbf(13,S13) ENDDO RELEASE cMes,cAno,cMA_Ini,cMA_Fin,CreaDbf1,nConteoRETURN NIL//------------------------------------------------------------------------------STATIC FUNCTION Finaliza(oItem) LOCAL lRet := .F. IF MsgNoYes("¿ Salir consulta estado de cuenta ?","Confirme") Close_Dbf(5,S05) Close_Dbf(8,S08) Close_Dbf(10,S10) Close_Dbf(13,S13) S99->(DbCloseArea()) oFont:End() oItem:Enable() // Cerramos lRet:= .T. ENDIF Release lRetRETURN (lRet)
Saludos y buenas noches, aun seguire trabajando con nuevas modificaciones...que se me viene a la idea...
Por otro lado una pregunta mas Francisco como puedo leer el valor de este oBrw1:aCols[n]:oDataFont := {|| IF( !EMPTY(oBrw1:aCols[2]:Value), IF( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } ya que al final al llegar a la cuenta 2020-000-000-000 PROV PEND POR PAGAR me pinta todo de negritas en lugar de cuentas acumulativas, desde las primeras cuentas de mayor no hay problema, porque son de 4 niveles, pero se puede configurar otra nuevas cuentas de mayor de 2,3 a 4 niveles de cuentas,intente leer el valor pero me muestra objeto...
Saludos y buenas noches.!
Atte: Adrian C. C.
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como controlar de no agregar elemento...SOLUCIONADOooo
Por otro lado una pregunta mas Francisco como puedo leer el valor de este oBrw1:aCols[n]:oDataFont := {|| IF( !EMPTY(oBrw1:aCols[2]:Value), IF( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } ya que al final al llegar a la cuenta 2020-000-000-000 PROV PEND POR PAGAR me pinta todo de negritas en lugar de cuentas acumulativas, desde las primeras cuentas de mayor no hay problema, porque son de 4 niveles, pero se puede configurar otra nuevas cuentas de mayor de 2,3 a 4 niveles de cuentas,intente leer el valor pero me muestra objeto...
Adriano.
El oDataFont estaba condicionado tomando en cuenta que hubiese uniformidad en los niveles de suma.
Para lograr lo que explicas, haz estos cambios y nos cuentas.
En la FUNCTION C_PROVCLIE(), al inicio:
Code: Select all | Expand
// aDatos1:= {{ "","","","","","" }} //Cambia esto aDatos1:= {{ "","","","","","","" }} //por esto (agregar un elemento) // Aqui, agregar los identificados con FranciscoA REDEFINE XBROWSE oBrw1 ID 101 OF oDlg ; HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act','TP' ; //FranciscoA COLSIZES 112,260,85,85,85,85,20 ; //FranciscoA PICTURES "@!" ,; "@!" ,; "999,999,999.99" ,; "999,999,999.99" ,; "999,999,999.99" ,; "999,999,999.99" ,; "@!" ; //FranciscoA ARRAY aDatos1 FOOTERS LINES CELL AUTOCOLS For n := 1 to len( oBrw1:aCols ) //Font segun lineas condicionadas // oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } //quitar esto oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( oBrw1:aCols[7]:Value = "A", oFont, oWnd:oFont) ,) } //FranciscoA Next oBrw1:aCols[7]:lHide = .t. //FranciscoA
En la Function CargaDatos():
Code: Select all | Expand
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] , ; (S08)->TIPONAT } ) // FranciscoA ENDIF ENDIF cCtas := SUBS((S08)->CUENTAS,1,4) (S08)->(DbSkip()) ENDDO ELSE // aDatos1 := {{ "","","","","","" }} //cambia esto aDatos1 := {{ "","","","","","","" }} //por esto FranciscoA ENDIF
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Como controlar de no agregar elemento...SOLUCIONADOooo
FranciscoA wrote:Por otro lado una pregunta mas Francisco como puedo leer el valor de este oBrw1:aCols[n]:oDataFont := {|| IF( !EMPTY(oBrw1:aCols[2]:Value), IF( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } ya que al final al llegar a la cuenta 2020-000-000-000 PROV PEND POR PAGAR me pinta todo de negritas en lugar de cuentas acumulativas, desde las primeras cuentas de mayor no hay problema, porque son de 4 niveles, pero se puede configurar otra nuevas cuentas de mayor de 2,3 a 4 niveles de cuentas,intente leer el valor pero me muestra objeto...
Adriano.
El oDataFont estaba condicionado tomando en cuenta que hubiese uniformidad en los niveles de suma.
Para lograr lo que explicas, haz estos cambios y nos cuentas.
En la FUNCTION C_PROVCLIE(), al inicio:Code: Select all | Expand
// aDatos1:= {{ "","","","","","" }} //Cambia esto aDatos1:= {{ "","","","","","","" }} //por esto (agregar un elemento) // Aqui, agregar los identificados con FranciscoA REDEFINE XBROWSE oBrw1 ID 101 OF oDlg ; HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act','TP' ; //FranciscoA COLSIZES 112,260,85,85,85,85,20 ; //FranciscoA PICTURES "@!" ,; "@!" ,; "999,999,999.99" ,; "999,999,999.99" ,; "999,999,999.99" ,; "999,999,999.99" ,; "@!" ; //FranciscoA ARRAY aDatos1 FOOTERS LINES CELL AUTOCOLS For n := 1 to len( oBrw1:aCols ) //Font segun lineas condicionadas // oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( !substr(oBrw1:aCols[2]:Value,1,3) = " ", oFont, oWnd:oFont) ,) } //quitar esto oBrw1:aCols[n]:oDataFont := {|| if( !empty(oBrw1:aCols[2]:Value), if( oBrw1:aCols[7]:Value = "A", oFont, oWnd:oFont) ,) } //FranciscoA Next oBrw1:aCols[7]:lHide = .t. //FranciscoA
En la Function CargaDatos():Code: Select all | Expand
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] , ; (S08)->TIPONAT } ) // FranciscoA ENDIF ENDIF cCtas := SUBS((S08)->CUENTAS,1,4) (S08)->(DbSkip()) ENDDO ELSE // aDatos1 := {{ "","","","","","" }} //cambia esto aDatos1 := {{ "","","","","","","" }} //por esto FranciscoA ENDIF
Saludos.
Gracias Francisco, como siempre tu ayuda y tu apoyo de siempre me has ayudado demasiado con ese rollo del segundo browse,ya todo funciona de maravilla y excelente aportacion y ajustes en el codigo.
Saludos desde cancun y mil gracias de nuevo Francisco. Te mande a tu correo la misma pregunta de este,pero ya quedo.
Saludos y buen dia y domingo familiar.
Atte: Adrian C. C.
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como controlar de no agregar elemento...SOLUCIONADOooo
Me alegro que todo te esté funcionando.
Siempre dispuesto a colaborar.
Saludos.
Siempre dispuesto a colaborar.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql