Dos Browses con ARRAYS,Headers se pierde, (Solucionado)

Dos Browses con ARRAYS,Headers se pierde, (Solucionado)

Postby ACC69 » Mon Mar 24, 2014 10:23 pm

Hola buenas tardes, esperando que se encuentren bien les envio cordial saludos.

Buenas tardes Francisco aun sigue persistiendo con el segundo browse que no doy con la solucion,con el ejemplo que me pasaste si funciona bien de maravilla, porque encuentra al mismo tiempo la clave, pero en mi caso.... hay un detalle que se me esta pasando... :cry: :evil: .

Al primer momento de cargar si se visualiza bien los headers completos y cuando presiono la flecha para abajo siguiente cuenta o subir de nuevo la flecha, se me pierde los headers y sale la letra A en el header, cuando no encuentra el dato eso es porque son cuentas con niveles acumulativas y esa cuenta no lo encontrara en segundo browse, por ser nivel 1 y acumulativa no detalle.
2010-0000-0000-0000 A Acumulativa
2010-0001-0000-0000 A Acumulativa
2010-0001-0001-0000 A Acumulativa
2010-0001-0001-0005 D Detalle .... ahi si es valido porque tiene movimientos DbSeek() encontrado

Pero en el detalle sale los headers en letras abecedarios, pero afortunadamente si me despliega bien a detalle los registros de cada cuenta que selecciono y encuentra la clave y eso es excelente :D ,pero solo cuando tiene saldo y los que no tiene saldo, el header cambia a letra A :cry: y eso pasa en todo al igual con los niveles acumulativas, y ya le busque le cambie, le hice pruebas, tanto del ADD() como de la variable aDatos2 o SetAarray y nada de nada.

Adjunto encontraras o encontraran para cualquier interesado que quiera echarme la manita con ese detalle que ando batallando con ese pequeño problema de AARAYS el archivo comprimido PROVEEDOR.ZIP incluye bases de datos, ejecutable y el prg modpbas.prg
Seleccionen empresa 7 Comercializadora Time Share Internacional

EMPRESA : 7
La clave : ACCACT

y opcion del modulo es al final Otros TXBrowse.

http://www.4shared.com/get/eDXaQ-hLce/Proveedor.html
http://search.4shared.com/postDownload/eDXaQ-hLce/Proveedor.html


Esperando contar con el apoyo de todos les agradecere mucho su ayuda.

Gracias y saludos .

Atte: Adrian C. C.
Last edited by ACC69 on Wed Mar 26, 2014 4:33 pm, edited 1 time in total.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Tue Mar 25, 2014 12:31 am

Adrian, al final de tu funcion MovEdoCta, haz estas modificaciones y nos dices.
Code: Select all  Expand view
   
 IF !cCta == Nil  // * Condicion Nil que si encuentra separacion que es nil,no busque en el DbSeek por ser nulo
    ... ...
     IF (S08)->( DbSeek(cCtaIni,.T.) ) .AND. (S08)->TIPONAT = 'D' // Aqui valida si es cuenta Detalle "D" en catalogo de cuentas que me busque en movimientos
         IF S91->( DbSeek(cCtaIni) )
             ... ...
             DO WHILE S91->(!EOF())
                   ... ...  
                 S91->(DbSkip())
             ENDDO
         ELSE
              aDatos2:={{"","","","","","","",""}}
         ENDIF
     ELSE
        aDatos2:={{"","","","","","","",""}}
     ENDIF
 ELSE
     aDatos2:={{"","","","","","","",""}}
 ENDIF

 oBrw2:SetArray(aDatos2)
RETURN NIL
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby ACC69 » Tue Mar 25, 2014 6:02 pm

FranciscoA wrote:Adrian, al final de tu funcion MovEdoCta, haz estas modificaciones y nos dices.
Code: Select all  Expand view
   
 IF !cCta == Nil  // * Condicion Nil que si encuentra separacion que es nil,no busque en el DbSeek por ser nulo
    ... ...
     IF (S08)->( DbSeek(cCtaIni,.T.) ) .AND. (S08)->TIPONAT = 'D' // Aqui valida si es cuenta Detalle "D" en catalogo de cuentas que me busque en movimientos
         IF S91->( DbSeek(cCtaIni) )
             ... ...
             DO WHILE S91->(!EOF())
                   ... ...  
                 S91->(DbSkip())
             ENDDO
         ELSE
              aDatos2:={{"","","","","","","",""}}
         ENDIF
     ELSE
        aDatos2:={{"","","","","","","",""}}
     ENDIF
 ELSE
     aDatos2:={{"","","","","","","",""}}
 ENDIF

 oBrw2:SetArray(aDatos2)
RETURN NIL
 



Hola Francisco buenos dias como esta,disculpa que apenas responda, tuve problemas con mi servicio de internet,ya la habia probado de esta manera como me indicas pero nada!, se pierde los headers y se me ocurrio poner la variable de arreglos desde principio y asi si funciona ,queda estable,solo que me deja una linea al principio en blanco, como eliminar ese elemento en blanco...
Y otra pregunta cual es el metodo para pintar todo de negro las cuentas acumulativas A ya sea nivel 1,nivel 2 nivel 3 y nivel 4 para que el usuario que son cuentas acumulativas en color negro las identifique como cuentas acumulativas y los que no son negro sean a detalle, adjunto pantallas y prg de nuevo.

http://www.4shared.com/zip/1QY04mIice/PantBalanz7.html

Code: Select all  Expand view
#Include "FiveWin.ch"
#Include "xBrowse.ch"

STATIC oDlg
Static S08, S10, S13 // Alias de base de datos
STATIC nTCarg,nTCred
STATIC lSelSeg,NivBal
STATIC SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot // Reportes
STATIC nMA_Ini, nMA_Fin

MemVar oWnd, oMOpc, nNumEmp, cDescrEmp, Mes_Per, Ano_Per, nStation,EjeMAIn

//------------------------------------------------------------------------------
FUNCTION MOD_PBAS()
 LOCAL oItem:=oMOpc
 LOCAL oBrw1, oBrw2, aDatos1, aDatos2

 local aGradBarSelFocus:= { { 1, RGB(252,232,171)   , RGB(248,195, 34) } }
 local aGradBarSel:= {{1, RGB(252,235, 184), RGB(251,222,88)}}

 lSelSeg:= .F.
 NivBal := 4
 aTot   := {{0,0,0,0}}
 nReg   := 0

 aDatos1:= {{ "","","","","","" }}
 aDatos2:= {{ "","","","","","","","" }}

 DEFINE DIALOG oDlg RESOURCE "CONSBALANZ" TITLE 'Listado de Pólizas y Movimientos'
  // Consulta Balanza cuentas acumulados \\
  REDEFINE XBROWSE oBrw1 ID 101 OF oDlg ;
           HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act' ;
           COLSIZES 112,260,85,85,85,85 ;
           PICTURES "@!"               ,;
                    "@!"               ,;
                    "999,999,999.99"   ,;
                    "999,999,999.99"   ,;
                    "999,999,999.99"   ,;
                    "999,999,999.99"    ;
           ARRAY aDatos1 FOOTERS LINES CELL AUTOCOLS

   WITH OBJECT oBrw1
        **:nClrPane        := {|| IIF((S08)->TIPONAT == "A",CLR_LIGHTGRAY  ,CLR_WHITE)} // Como poner condicion color negrita y Fonts cuentas acumulativas
                                                                                        // pero no sale por ser arreglos...!...sigue pendiente
         :nMarqueeStyle   := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
         :nColDividerStyle:= LINESTYLE_LIGHTGRAY
         :nRowDividerStyle:= LINESTYLE_LIGHTGRAY
         :bClrSel         := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
         :bClrSelFocus    := {|| { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
         :lKinetic        := .f.
         :lContrastClr    := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo
         :bChange         := {|| MovEdoCta(oBrw1,@aDatos2,oBrw2), oBrw2:Refresh() } // Aqui me persiste el problema de los Headers
   END



  // Consulta Estados de cuentas a detalle \\
  REDEFINE XBROWSE oBrw2 ID 102 OF oDlg ;
           HEADERS 'Tipo','Num','Fecha','Referencia','Concepto','Cargo','Abono','Sdo Act' ;
           COLSIZES 28,30,50,80,180,85,85,85  ;
           PICTURES "@!"                     ,;
                    "@9999"                  ,;
                    "@D"                     ,;
                    "@!"                     ,;
                    "@!"                     ,;
                    "999,999,999.99"         ,;
                    "999,999,999.99"         ,;
                    "999,999,999.99"          ;
           ARRAY aDatos2 FOOTERS CELL AUTOCOLS

   WITH OBJECT oBrw2
         :nMarqueeStyle    :=  MARQSTYLE_HIGHLROW  //_HIGHLROWMS
         :nColDividerStyle := LINESTYLE_LIGHTGRAY
         :nRowDividerStyle := LINESTYLE_LIGHTGRAY
         :bClrSel          := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
         :bClrSelFocus     := {|| { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
         :lKinetic         := .f.
         :lContrastClr     := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo
         :nStretchCol            := STRETCHCOL_LAST
   END

   CargaDatos(oBrw1,@aDatos1)
   MovEdoCta(oBrw1,@aDatos2,oBrw2)

 ACTIVATE DIALOG oDlg CENTERED // ON INIT Refresca(oBrw,oBrw2)

 oItem:Enable() // Cerramos
RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2)
 LOCAL xEmp,S91,Ind1Tmp1,cCta,cCtaIni,PasaCta := .T.

 cCta   := oBrw1:aArrayData[oBrw1:nArrayAt,1]

 aDatos2:= {{ "","","","","","","","" }} [b]// Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
                                         // Como eliminar la linea en blanco como primer elemento...[/b]

 IF !cCta == Nil  // * Condicion Nil que si encuentra separacion que es nil,no busque en el DbSeek por ser nulo
     cCtaIni := SUBS(cCta,1,4)+SUBS(cCta,6,4)+SUBS(cCta,11,4)+SUBS(cCta,16,4)

     *xEmp    := nNumEmp
     *S91     := "EMP"+TSTR(xEmp)+TRIM("\R_INTS"+nStation)+".DBF"
     S91     := "EMP07\R_INTS7.DBF"
     *Ind1Tmp1:= "R_INTS"+nStation
     Ind1Tmp1:= "EMP07\R_INTS7"

     USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED

     S91->(DbSetIndex(Ind1Tmp1))
     S91->(OrdSetFocus(1))

     IF (S08)->( DbSeek(cCtaIni,.T.) ) .AND. (S08)->TIPONAT = 'D' // Aqui valida si es cuenta Detalle "D" en catalogo de cuentas que me busque en movimientos
         IF S91->( DbSeek(cCtaIni) )
             aSum := {{0,0,0,0,0,0,0}}
             aTot := {{0,0,0,0,0,0,0}}

             DO WHILE S91->(!EOF())
                 IF S91->CUENTAS > cCtaIni
                     EXIT
                 ENDIF

                 IF S91->SALDOS <> 0
                     /*  Esto despues lo veo, me interesa mas que visualice bien los datos
                     aSum[1,1] := aSum[1,1] + S91->SALCARG // Suma Cargos
                     aSum[1,2] := aSum[1,2] + S91->SALCRED // Suma Abonos
                     aSum[1,3] := aSum[1,3] + S91->SALDOS  // Suma Dif de saldos
                     aSum[1,4] += (S91->SALCARG - S91->SALCRED)

                     aTot[1,1] := aTot[1,1] + S91->SALCARG // Totaliza Cargos
                     aTot[1,2] := aTot[1,2] + S91->SALCRED // Totaliza Abonos
                     aTot[1,3] := aTot[1,3] + S91->SALDOS  // Totaliza Dif Sdos
                     aTot[1,4] += (S91->SALCARG - S91->SALCRED)
                     */


                     AADD( aDatos2, { S91->TIPO    , ;  //Llena datos a elementos
                                      S91->NUMPOL  , ;
                                      S91->FHAMOV  , ;
                                      S91->REFERE  , ;
                                      S91->CONCEP  , ;
                                      S91->SALCARG , ;
                                      S91->SALCRED , ;
                                      S91->SALDOS      } )
                 ENDIF

                 S91->(DbSkip())
             ENDDO
         ENDIF
     ENDIF
 ENDIF

 oBrw2:SetArray(aDatos2)
RETURN NIL



 ** Funcion para colorear en negrita o Font cuentas acumulativas en niveles de cuentas, AUN NO SALE ...!
//------------------------------------------------------------------------------
STATIC FUNCTION FontNiv(oFont,oFont1,oFont2)
 LOCAL cColor

 DO CASE
    CASE (S08)->NIVSUM = 1
          IF (S08)->TIPONAT == "A"
              cColor := CLR_BLACK // CLR_LIGHTGRAY  ,CLR_WHITE
              **cFont:= ...como seria la instruccion
          ENDIF

    CASE (S08)->NIVSUM = 2
          IF (S08)->TIPONAT == "A"
              cColor := CLR_BLACK // CLR_LIGHTGRAY  ,CLR_WHITE
              **cFont:= ...como seria la instruccion
          ENDIF

    CASE (S08)->NIVSUM = 3
         IF (S08)->TIPONAT == "A"
              cColor := CLR_BLACK // CLR_LIGHTGRAY  ,CLR_WHITE
              **cFont:= ...como seria la instruccion
          ENDIF

    CASE (S08)->NIVSUM = 4
         IF (S08)->TIPONAT == "A"
              cColor := CLR_BLACK // CLR_LIGHTGRAY  ,CLR_WHITE
              **cFont:= ...como seria la instruccion
          ENDIF
 ENDCASE
RETURN(cColor)

 ** Funcion para espaciar niveles de cuentas  Ok salio como yo deseaba...!
//------------------------------------------------------------------------------
STATIC FUNCTION NivCol(nCol)
 DO CASE
    CASE (S08)->NIVSUM = 1
          nCol := ""

    CASE (S08)->NIVSUM = 2
          nCol = " "

    CASE (S08)->NIVSUM = 3
          nCol = "  "

    CASE (S08)->NIVSUM = 4
          nCol = "   "
 ENDCASE
RETURN(nCol)



 * CARGA DATOS Y MOVIMIENTOS AUXILIARES TEMPORALES EXCEPTO LA FUNCION CargaDatos, que es una rutina para agregar AADD()*
//------------------------------------------------------------------------------
STATIC FUNCTION CargaDatos(oBrw1,aDatos1)
 LOCAL cCtas

 aDatos1:= {}

 S08 := Abre_Dbf(8,8)   // ABRE CATCTAxA.DBF  // Catalogo de cuentas INDEX ON "CUENTAS"
 *S08 := "EMP07\CATCTA14.DBF"   // ABRE CATCTAxA.DBF  // Catalogo de cuentas INDEX ON "CUENTAS"
 *S08 := "EMP07\CATCTA14.CDX"   // ABRE CATCTAxA.DBF  // Catalogo de cuentas INDEX ON "CUENTAS"
 S13 := Abre_Dbf(13,13) // Abre: MOVTxMxA.DBF // Movimientos  INDEX ON "MV_NCTA+MV_REFE"

 nTCarg := 0
 nTCred := 0

 (S08)->(DbGoTop())

 SdoMesAnt:= ("SALD"+TSTR(Mes_Per - 1))
 cCtas    := SUBS((S08)->CUENTAS,1,4)

 IF (S08)->( !BOF() )
     DO WHILE (S08)->(!EOF())
         IF cCtas <> SUBS((S08)->CUENTAS,1,4)
             AADD( aDatos1, { Nil } )
         ENDIF

         (S08)->(DbSetOrder(1))
         (S08)->(DbSeek((S08)->CUENTAS))

         SdoIni := (S08)->(&SdoMesAnt)

         (S13)->(DbSetOrder(3))
         (S13)->(SetSeek((S08)->CUENTAS))

         nCol:= NivCol(nCol)

         aSum := {{0,0,0}}

         DO WHILE FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4) .AND. (S13)->(!EOF())
             aSum[1,1] := aSum[1,1] + (S13)->MV_CARG // Suma CARGOS
             aSum[1,2] := aSum[1,2] + (S13)->MV_ABON // Suma ABONOS

             (S13)->(DbSkip())
         ENDDO

         aSum[1,3] := (SdoIni + aSum[1,1]) - aSum[1,2]

         IF ( (S08)->TIPONAT = 'D' )
             aTot[1,1] := aTot[1,1] + SdoIni    // Total Saldos iniciales
             aTot[1,2] := aTot[1,2] + aSum[1,1] // Total de Cargos
             aTot[1,3] := aTot[1,3] + aSum[1,2] // Total DE Abonos
         ENDIF

         IF ( (S08)->NIVSUM <= NivBal )
             IF SdoIni <> 0 .OR. aSum[1,1] <> 0 .OR. aSum[1,2] <> 0
                 AADD( aDatos1, { Ext_xNiv(LTRIM((S08)->CUENTAS)), ;   // Llena datos de ARRAY
                                  nCol+(S08)->DESCRIP            , ;
                                  SdoIni                         , ;
                                  aSum[1,1]                      , ;
                                  aSum[1,2]                      , ;
                                  aSum[1,3]                          } )
             ENDIF
         ENDIF

         cCtas := SUBS((S08)->CUENTAS,1,4)

         (S08)->(DbSkip())
     ENDDO
 ELSE
     aDatos1 := {{ "","","","","","" }}
 ENDIF

 oBrw1:SetArray(aDatos1)

 * CargaMov() // Comentado para no volver a cargar datos,por mientras diseño nuevos browses
RETURN NIL



 ** Rutina para movimientos unicamente facturas pendientes a pagar como estado de cuenta,excluyendo facturas ya pagadas
//------------------------------------------------------------------------------
STATIC FUNCTION CargaMov()
 Local S91, Ind1Tmp1, Ind1Tmp2, CreaDbf1,TitRp,CtaIni, CtaFin,PasaCta := .T.,;
       cMA_Ini, cMA_Fin,cCtas,nSegNeg,cCtSN // oText
 LOCAL cMes, cAno,xEMP,aCarg,aAbon
 LOCAL S05, S08, S10, S13 // Alias de base de datos

 xEmp    := nNumEmp
 cMes    := TSTR(Mes_Per)
 cAno    := VAL(SUBS(STR(Ano_Per,4),3,2))
 nMA_Ini := EjeMAIn
 nMA_Fin := cMes+TSTR(cAno)
 cMA_Ini := SUBS(nMA_Ini,3,2)+SUBS(nMA_Ini,1,2)
 cMA_Fin := SUBS(nMA_Fin,3,2)+SUBS(nMA_Fin,1,2)

 ***********************************************************************************
 *----- Traspasando cuentas integración de saldos general en archivo temporal -----*
 ***********************************************************************************

 S91     := "EMP"+TSTR(xEMP)+TRIM("\R_INTS"+nStation)+".DBF"
 Ind1Tmp1:= "R_INTS"+nStation
 Ind1Tmp2:= "R_INTSN"
 nReg    := 1

 IF FILE(S91)
     *S91->(DbCloseArea())

     FERASE(S91)
     FERASE("EMP"+TSTR(nNumEmp)+"\"+Ind1Tmp1+".CDX")
 ENDIF

 FIELD CUENTAS, SEGNEG, REFERE

 IF !FILE(S91)
     CreaDbf1 := {{"
TIPO   " , "C" ,  2 , 0 }  ,; // 1
                  {"
NUMPOL " , "N" ,  5 , 0 }  ,; // 2
                  {"
FHAMOV " , "D" ,  8 , 0 }  ,; // 3
                  {"
CUENTAS" , "C" , 16 , 0 }  ,; // 4
                  {"
SEGNEG"  , "N" ,  4 , 0 }  ,; // 5
                  {"
REFERE " , "C" , 10 , 0 }  ,; // 6
                  {"
CONCEP " , "C" , 60 , 0 }  ,; // 7
                  {"
SALCARG" , "N" , 12 , 2 }  ,; // 8
                  {"
SALCRED" , "N" , 12 , 2 }  ,; // 9
                  {"
SALDOS"  , "N" , 12 , 2 }  ,; //10 Sdo de factura a pagar
                  {"
IMPBS1"  , "N" , 12 , 2 }  ,; //11 Base 1
                  {"
TASA1"   , "N" , 12 , 2 }  ,; //12 Tasa 1
                  {"
IVA_1"   , "N" , 12 , 2 }  ,; //13 IVA 10%
                  {"
IMPBS2"  , "N" , 12 , 2 }  ,; //14 Base 2
                  {"
TASA2"   , "N" , 12 , 2 }  ,; //15 Tasa 2
                  {"
IVA_2"   , "N" , 12 , 2 }  ,; //16 IVA 15%
                  {"
T_0"     , "N" , 12 , 2 }  ,; //17 Tasa 0
                  {"
T_EXENT" , "N" , 12 , 2 }  ,; //18 Exento
                  {"
OTROS"   , "N" , 12 , 2 }  ,; //19 Otros
                  {"
IMPBS3"  , "N" , 12 , 2 }  ,; //20 Otras tasas
                  {"
T_Otras" , "N" , 12 , 2 }  ,; //21 IVA x 0
                  {"
RET_IVA" , "N" , 12 , 2 }  ,; //22 Ret IVA
                  {"
RET_ISR" , "N" , 12 , 2 }  ,; //23 Ret ISR
                  {"
TOTFAC"  , "N" , 12 , 2 }  ,; //24 Importe total por factura
                  {"
REG    " , "N" ,  3 , 0 }}    //25

     DbCreate(S91,CreaDbf1)

     USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED

     INDEX ON CUENTAS+REFERE               TAG (Ind1Tmp1) FOR !DELETED()
     INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()

     S91->(DbSetIndex(Ind1Tmp1))
     S91->(OrdSetFocus(1))
 ELSE
     USE (S91) ALIAS S91 EXCLUSIVE  // NEW SHARED

     ZAP

     INDEX ON CUENTAS+REFERE               TAG (Ind1Tmp1) FOR !DELETED()
     INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()

     S91->(DbSetIndex(Ind1Tmp1))
     S91->(OrdSetFocus(1))
 ENDIF

 aCarg:= {{0,0,0}}
 aAbon:= {{0,0,0}}
 S05  := Abre_Dbf(5,5) // ABRE MA_MOVTO.DBF

 (S05)->(DbSEEK(cMA_Ini))

 DO WHILE (S05)->ANOMES >= cMA_Ini .AND. (S05)->ANOMES <= cMA_Fin .AND. (S05)->(!EOF())
     Mes_Per := VAL(SUBS((S05)->ANOMES,3,2))
     Ano_Per := VAL(SUBS((S05)->ANOMES,1,2))

     S13 := Abre_Dbf(13,13) // ABRE: MOVTxMxA.DBF

    (S13)->(DbSetOrder(4)) // Mov con referencia
    (S13)->(DbGoTop())

     DO WHILE (S13)->(!EOF())
         S91->(DbSeek((S13)->MV_NCTA+(S13)->MV_REFE))

         IF S91->(!FOUND())
             S91->(DbAppend())

             REPLACE S91->TIPO    WITH (S13)->MV_TIPO ,;
                     S91->NUMPOL  WITH (S13)->MV_NUMP ,;
                     S91->FHAMOV  WITH (S13)->MV_FHAM ,;
                     S91->CUENTAS WITH (S13)->MV_NCTA ,;
                     S91->SEGNEG  WITH (S13)->SEGNEG  ,;
                     S91->REFERE  WITH (S13)->MV_REFE ,;
                     S91->CONCEP  WITH (S13)->MV_CONC
         ELSE
             DO WHILE S91->(!RLOCK())
             ENDDO
         ENDIF

         IF (S13)->TIPOMOV = "
A"
             aAbon[1,1] := (S13)->IMPBS1
             aAbon[1,2] := (S13)->IMPBS2
             aAbon[1,3] := (S13)->OTROS
         ELSE
             aCarg[1,1] := (S13)->IMPBS1
             aCarg[1,2] := (S13)->IMPBS2
             aCarg[1,3] := (S13)->OTROS
         ENDIF

         IF (S13)->MV_CARG <> 0
             REPLACE S91->SALCARG WITH (S13)->MV_CARG + S91->SALCARG ,;
                     S91->REG     WITH S91->REG - nReg

             IF (S13)->MV_ABON <> 0  // Si existe en mismo renglon el saldo de abonos \\
                 REPLACE S91->SALCRED WITH (S13)->MV_ABON + S91->SALCRED ,;
                         S91->REG     WITH S91->REG - nReg
             ENDIF
         ELSE
             REPLACE S91->SALCRED WITH (S13)->MV_ABON + S91->SALCRED ,;
                     S91->REG     WITH IF((S13)->MV_ABON >0,S91->REG + nReg,S91->REG - nReg)
         ENDIF

         IF (S13)->TIPOMOV = "
A"
             REPLACE S91->TASA1 WITH (S13)->TASA1 ,;
                     S91->TASA2 WITH (S13)->TASA2
         ENDIF

         REPLACE S91->SALDOS  WITH S91->SALCARG - S91->SALCRED             ,;
                 S91->IMPBS1  WITH (aAbon[1,1] - aCarg[1,1]) + S91->IMPBS1 ,;
                 S91->IVA_1   WITH ROUND(S91->IMPBS1 * S91->TASA1 / 100,2) ,;
                 S91->IMPBS2  WITH (aAbon[1,2] - aCarg[1,2]) + S91->IMPBS2 ,;
                 S91->TASA2   WITH IF((S13)->TIPOMOV = "
A",(S13)->TASA2,0) ,;
                 S91->IVA_2   WITH ROUND(S91->IMPBS2 * S91->TASA2 / 100,2) ,;
                 S91->T_0     WITH (S13)->T_0     + S91->T_0               ,;
                 S91->T_EXENT WITH (S13)->T_EXENT + S91->T_EXENT           ,;
                 S91->OTROS   WITH (aAbon[1,3] - aCarg[1,3]) + S91->OTROS  ,;
                 S91->TOTFAC  WITH S91->IMPBS1+S91->IVA_1+S91->IMPBS2+      ;
                                   S91->IVA_2+S91->T_0+S91->T_EXENT  +      ;
                                   S91->OTROS

         aCarg:= {{0,0,0}}
         aAbon:= {{0,0,0}}

         (S13)->(DbSkip())
     ENDDO

     (S05)->(DbSkip())

     Close_Dbf(13,S13)
 ENDDO

 *Close_Dbf(8,S08)
 *Close_Dbf(10,S10)

 *S91->(DbCloseArea())
RETURN NIL


 * FUNCION ADICIONAL...para que compilen, por el momento lo tengo comentado
/*
 //------------------------------------------------------------------------------
FUNCTION FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4)
 Local NIVSU[4], NIVCT[4], NIVS, OpNiv

 NIVSU[1] := 1
 NIVSU[2] := 2
 NIVSU[3] := 3
 NIVSU[4] := 4
 NIVS     := IF(lSelSeg,NIVSU[(S10)->NIVSUM], NIVSU[(S08)->NIVSUM])

 IF lSelSeg
     Cta1 := SUBS((S10)->CUENTAS,1,4)
     Cta2 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)
     Cta3 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)+SUBS((S10)->CUENTAS,9,4)
     Cta4 := SUBS((S10)->CUENTAS,1,4)+SUBS((S10)->CUENTAS,5,4)+SUBS((S10)->CUENTAS,9,4)+SUBS((S10)->CUENTAS,13,4)

     NIVCT[1] := Cta1 = SUBS((S13)->MV_NCTA,1,4) .AND. (S10)->NIVSUM = NIVS
     NIVCT[2] := Cta2 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4) .AND. (S10)->NIVSUM = NIVS
     NIVCT[3] := Cta3 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4) .AND. (S10)->NIVSUM = NIVS
     NIVCT[4] := Cta4 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4)+SUBS((S13)->MV_NCTA,13,4) .AND. (S10)->NIVSUM = NIVS
 ELSE
     Cta1 := SUBS((S08)->CUENTAS,1,4)
     Cta2 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)
     Cta3 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)+SUBS((S08)->CUENTAS,9,4)
     Cta4 := SUBS((S08)->CUENTAS,1,4)+SUBS((S08)->CUENTAS,5,4)+SUBS((S08)->CUENTAS,9,4)+SUBS((S08)->CUENTAS,13,4)

     NIVCT[1] := Cta1 = SUBS((S13)->MV_NCTA,1,4) .AND. (S08)->NIVSUM = NIVS
     NIVCT[2] := Cta2 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4) .AND. (S08)->NIVSUM = NIVS
     NIVCT[3] := Cta3 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4) .AND. (S08)->NIVSUM = NIVS
     NIVCT[4] := Cta4 = SUBS((S13)->MV_NCTA,1,4)+SUBS((S13)->MV_NCTA,5,4)+SUBS((S13)->MV_NCTA,9,4)+SUBS((S13)->MV_NCTA,13,4) .AND. (S08)->NIVSUM = NIVS
 ENDIF

 OpNiv := NIVCT[NIVS]

 *alert(OpNiv)
RETURN (OpNiv)

//------------------------------------------------------------------------------
FUNCTION EXT_xNIV(cCta)
 LOCAL cCta1, cCta2, cCta3, cCta4, subsCta

 cCTA1  := SUBS(cCta, 1,4)
 cCTA2  := SUBS(cCta, 5,4)
 cCTA3  := SUBS(cCta, 9,4)
 cCTA4  := SUBS(cCta,13,4)
 SubsCta:= cCta1 + '-'+ cCta2 + '-' + cCta3 + '-' + cCta4
RETURN (SubsCta)

//------------------------------------------------------------------------------
FUNCTION TSTR(VARf)
RETURN (IF(VARf <=9, '0'+STR(VARf,1), STR(VARf,2)))

*/  * Fin comentario, lo pueden quitar....



Saludos y buen dia y gracias por ayudarme y por tu tiempo de migrar a TXBrowse .

Atte: Adrian C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Tue Mar 25, 2014 8:05 pm

Adrian, compilé tu primer ejemplo, con algunos cambios para encontrar las dbfs, y con las modificaciones sugeridas me funcionó (no pierde los headers).
OK. Si a vos te funciona como describes, todo bien.

Referente a la linea en blanco que te deja, es porque en la declaracion ya lleva implícita esa linea. Ej:
Code: Select all  Expand view
aDatos2 := { {"","","","","","","",""} }

Ahora bien, para borrar esa linea puedes usar:
Code: Select all  Expand view
Adel(aDatos2,1,.t.)

Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Tue Mar 25, 2014 8:16 pm

Ups!
Referente al color en los niveles acumulativos y detalle, puedes adaptar este ejemplo, dentro de la definicion del oBrw. (Es para DBFs)
:bClrStd := { || IF( SubStr((cAlias)->Numpart,1,4)= "SERV" .OR. SubStr((cAlias)->Numpart,1,1)= "9" , {CLR_BLACK, CLR_WHITE},;
if((cAlias)->CodBodC != 0, {CLR_BLACK, CLR_WHITE}, {0, RGB(222, 225, 230)}) ) }
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Tue Mar 25, 2014 8:33 pm

Para array, seria algo asi: (tendrias que agregar un elemento mas a aDatos1, para identificacion del nivel), o bien podrias utilizar los ultimos 4 digitos de la columna de cuentas, segun tu nomenclatura ( si no me equivoco): Si = "0000" es Acumulativa.
Code: Select all  Expand view
:bClrStd := { || IF(oBrw1:aArrayData[oBrw1:nArrayAt][7]='A' , {CLR_BLACK, CLR_WHITE}, {CLR_BLUE, CLR_WHITE} ) }
 

Saludos,
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby ACC69 » Tue Mar 25, 2014 9:26 pm

FranciscoA wrote:Para array, seria algo asi: (tendrias que agregar un elemento mas a aDatos1, para identificacion del nivel), o bien podrias utilizar los ultimos 4 digitos de la columna de cuentas, segun tu nomenclatura ( si no me equivoco): Si = "0000" es Acumulativa.
Code: Select all  Expand view
:bClrStd := { || IF(oBrw1:aArrayData[oBrw1:nArrayAt][7]='A' , {CLR_BLACK, CLR_WHITE}, {CLR_BLUE, CLR_WHITE} ) }
 

Saludos,


Hola Francisco gracias por tu amable respuesta, a lo que mencionas ha de ser un bug de ARRAYS con la version que tengo,porque a mi no me hace el efecto deseado, ya que veo que tienes la version 12.04 mas reciente que el mio, peroooo...por el momento lo dejare asi no creo que le afecte tanto al usuario, aunque no sea vea tan bien... tendre que juntar algo de money y actualizarme .

Y a lo que mencionas de agregar un elemento mas es lo que pensaba, pero implica crear otra columna mas!, cosa que no quiero que sea visible para los usuarios pero ya vere la forma como hacerlo,lo importante que me traiga bien los datos.

Y con ese metodo me pinta los textos en negrita cierto o al igual serviria para pintar toda la linea horizontal en color negrita o seria otro metodo, y los fonts,eso no creo que sea problema con los colores y fonts pero aun soy un principiante con la clase de TXBrowse pero ya me esta gustando solo que son detalles que me falta por explotarlo la clase que es muy poderosa.

Y gracias Francisco por tu ayuda y paciencia y espero no haberte quitado tu tiempo y agradezco tu ayuda prestada.

Saludos desde Cancun,Q.Roo Mexico

Atte: Adrian C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Wed Mar 26, 2014 3:24 am

Adrian, no hay problema, lo hago gustosamente... y disculpa, tuve un lapsus mentis.
Si lo que deseas en el browse es pintar el fondo de la linea en negro y el color de texto el que desees para las cuentas acumulativas, y pintar el fondo y texto del color que quieras para las no acumulativas, intenta con esto: (Cambia a tus colores preferidos. Tambien puedes usar la funcion RGB, Ej: {RGB(80,50,85),RGB(120,112,180)}
Code: Select all  Expand view
WITH OBJECT oBrw1
        ...
         :bClrStd := { || IF(Right(alltrim(oBrw1:aArrayData[oBrw1:nArrayAt,1]),4)='0000' , {CLR_YELLOW, CLR_BLACK}, {CLR_BLACK,CLR_YELLOW} ) }
   END
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS..Headers se pierde...

Postby FranciscoA » Wed Mar 26, 2014 4:30 am

Para establecer una fuente para determinada linea, intenta con esto:
Code: Select all  Expand view
local aFont := Array(2), n

DEFINE FONT aFont[1] NAME 'arial' SIZE 0,-10
DEFINE FONT aFont[2] NAME 'arial' SIZE 0,-10 ITALIC BOLD
...
   For n := 1 to len( oBrw1:aCols )
      oBrw1:aCols[n]:oDataFont := {|| IF(Right(alltrim(oBrw1:aRow[1]),4)='0000', aFont[2], aFont[1]) }   //o la condicion que determines para identificar cuentas acumulativas.
   Next
...
 aFont[1]:End()
 aFont[2]:End()
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Dos Browses con ARRAYS,Headers se pierde.(SOLUCIONADO)

Postby ACC69 » Wed Mar 26, 2014 4:32 pm

FranciscoA wrote:Para establecer una fuente para determinada linea, intenta con esto:
Code: Select all  Expand view
local aFont := Array(2), n

DEFINE FONT aFont[1] NAME 'arial' SIZE 0,-10
DEFINE FONT aFont[2] NAME 'arial' SIZE 0,-10 ITALIC BOLD
...
   For n := 1 to len( oBrw1:aCols )
      oBrw1:aCols[n]:oDataFont := {|| IF(Right(alltrim(oBrw1:aRow[1]),4)='0000', aFont[2], aFont[1]) }   //o la condicion que determines para identificar cuentas acumulativas.
   Next
...
 aFont[1]:End()
 aFont[2]:End()
 

Saludos.



Buenos dias nuevamente gracias Francisco por tus ejemplos que me das,que lo implementare a mi sistema definiendo los colores y dentro del metodo creo que pondre una funcion para equis condicion que me pinte de color o fonts.

Aunque por otro lado, no sea vea muy bien que me deja espacio en linea, pero como dije ,por el momento lo dejo asi como esta,que luego checo en el foro como se habra corregido el bug de setarray() ya que a ti te visualiza bien sin problemas los headers.

Y a los que igual me ayudaron a Cristobal,Adolfo, Mariog y FranciscoA

Saludos y nuevamente gracias Francisco y a todos los que mencione!.

Atte: Adrian C. C.
acc69cancun@gmail.com
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 37 guests