Como controlar de no agregar elemento...SOLUCIONADOooo
- FranciscoA
- Posts: 2163
- 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: 2163
- 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: 2163
- 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 : S99
STATIC oDlg,oFont
Static S05,S08, S10, S13,S99,Ind1Tmp1,Ind1Tmp2 // Alias de base de datos
STATIC lSelSeg,NivBal
STATIC cCta,cCtaIni,cRefere,SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot //
STATIC nMA_Ini, nMA_Fin, n
MemVar 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 oBrw
RETURN 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
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"
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, oDlgP
RETURN (.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,nConteo
RETURN 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 lRet
RETURN (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: 2163
- 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: 2163
- 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