Como controlar de no agregar elemento...SOLUCIONADOooo

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

Postby FranciscoA » Thu Apr 24, 2014 5:41 pm

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

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

Postby ACC69 » Thu Apr 24, 2014 5:47 pm

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

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

Postby FranciscoA » Fri Apr 25, 2014 4:32 am

En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
aDatos2:= {{ "","","","","","","","" }}
ENDIF

Code: Select all  Expand view  RUN
// 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 view  RUN
   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
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Postby ACC69 » Fri Apr 25, 2014 2:19 pm

FranciscoA wrote:En el ultimo ejemplo que subí, intenta cambiando esto en la function MovEdoCta:
...
aDatos2:= {{ "","","","","","","","" }}
ENDIF

Code: Select all  Expand view  RUN
// 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 view  RUN
   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.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby FranciscoA » Sat Apr 26, 2014 5:21 pm

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

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

Postby ACC69 » Sun Apr 27, 2014 1:30 am

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

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

Postby ACC69 » Sun Apr 27, 2014 3:04 am

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

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

Postby FranciscoA » Sun Apr 27, 2014 4:24 pm

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

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

Postby ACC69 » Sun Apr 27, 2014 6:58 pm

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

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

Postby FranciscoA » Sun Apr 27, 2014 7:32 pm

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

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 64 guests