Como controlar de no agregar elemento...SOLUCIONADOooo

User avatar
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..

Post by FranciscoA »

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.
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
ACC69
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..

Post by ACC69 »

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
User avatar
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..

Post by FranciscoA »

En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
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
ACC69
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..

Post by ACC69 »

FranciscoA wrote:En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
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 


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.
User avatar
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..

Post by FranciscoA »

Adriano, revisa tu email. Te envié una solución que debería funcionar. Prueba.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
ACC69
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..

Post by ACC69 »

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.
ACC69
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Como controlar de no agregar elemento vacio ARRAY TXBrowse..

Post by ACC69 »

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.
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como controlar de no agregar elemento...SOLUCIONADOooo

Post by FranciscoA »

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
ACC69
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Como controlar de no agregar elemento...SOLUCIONADOooo

Post by ACC69 »

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.
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como controlar de no agregar elemento...SOLUCIONADOooo

Post by FranciscoA »

Me alegro que todo te esté funcionando.
Siempre dispuesto a colaborar.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
Post Reply