Como controlar de no agregar elemento...SOLUCIONADOooo

Como controlar de no agregar elemento...SOLUCIONADOooo

Postby ACC69 » Mon Apr 21, 2014 8:04 pm

Hola buenas tardes, y saludos a los amigos de fivewin les pido de la manera mas atenta un favor,que me echen la mano con ese detalle, que aun persiste el problema, como controlar de no agregar registo o elemento vacio al array cuando no es cuenta de detalle. Adjunto imagen y codigo y eso es molestoso para el usuario, pensando que no se genero bien el dato que hay un registro vacio en el estado de cuenta y uso SetArray() ,ya le busque por todas partes y formas ni aun asi logro dar con esa solucion, uso version fivewin 8.1.

Image
Image
http://www.subirimagenes.com/otros-pantaedocta-8884182.html

Aqui el codigo ...:

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

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 "TAHOMA" SIZE 0,-10 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 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() }
      *:bChange         := { || MovEdoCta(oBrw1,@aDatos2,oBrw2), oBrw2:Refresh() }
    END

   // Consulta Estados de cuentas a detalle \\
   REDEFINE XBROWSE oBrw2 ID 102 OF oDlg ;    // Esta parte de aqui como controlar que no me agregue registro vacio si son niveles       acumulativas
            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
      :lFooter               := .T.
      :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
      :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[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

  * oBrw1:SetFocus()
   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(),.T.)
 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)  // Esta es la rutina del segundo browse que me inserta registro vacio...
 LOCAL aDat[9],aSum[8], aSub[8], aTot[8]

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

 AFill(aDat,"")
 AFill(aSum,0)
 AFill(aSub,0)
 AFill(aTot,0)

 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)

     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
         aDatos2:= {{ "","","","","","","","" }} // Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
                                                 // Como eliminar la linea en blanco como primer elemento...
         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
         ENDIF
     ENDIF
     
     oBrw2:SetArray(aDatos2)

     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()
 ENDIF
RETURN NIL


Esperando contar con su amable apoyo ,les agradecere mucho .

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com
Last edited by ACC69 on Sun Apr 27, 2014 2:47 am, edited 1 time in total.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby joseluisysturiz » Tue Apr 22, 2014 2:44 am

hago algo parecido, pero cuando defino el array antes de insertar lo tengo asi, aCuentas := {} y cuando voy agregar registro es que hago esto aaddd( aCuentas, valo1, valor2, etc) , y lo hago bajo el array del xbrowse...

STATIC PROCEDURE addrow( oQryTM, oBrw, aVar, aGet )

total_es( oQryTM, oBrw, aVar, aGet )

IF LEN( oBrw:aArrayData ) > 0
IF oBrw:aArrayData[oBrw:nArrayAt, 6] > 0 .and. ;
oBrw:aArrayData[oBrw:nArrayAt, 5] > 0

AADD( oBrw:aArrayData ,;
{ , , , "U", 0, 0, , } )
ENDIF

ELSE
AADD( oBrw:aArrayData ,;
{ , , , "U", 0, 0, , } )
ENDIF

oBrw:GoBottom(); oBrw:Refresh(); oBrw:SetFocus()

RETURN
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

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

Postby cnavarro » Tue Apr 22, 2014 11:02 am

Adrian, en la linea:
Code: Select all  Expand view  RUN


                        *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]      } )
       
 

Hazlo asi, y pueba
Code: Select all  Expand view  RUN

               if Len( aDatos2 ) = 1 .and. empty( aDatos2[ 1 ]  )              // Aqui tenia yo un error
                        aDatos2[ 1 ][ 1 ] :=  aDat[3]   //, ; // S99->TIPO
                       aDatos2[ 1 ][ 2 ]  :=  aDat[4]   // S99->NUMPOL
                       aDatos2[ 1 ][ 3 ]  :=  aDat[5]  // S99->FHAMOV
                       aDatos2[ 1 ][ 4 ]  :=  aDat[2]  // S99->REFERE
                       aDatos2[ 1 ][ 5 ]  :=  aDat[6]  // S99->CONCEP
                       aDatos2[ 1 ][ 6 ]  :=  aSum[1]
                       aDatos2[ 1 ][ 7 ]  :=  aSum[2]
                       aDatos2[ 1 ][ 8 ]  :=  aSum[3]

               else
                         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
 
Last edited by cnavarro on Wed Apr 23, 2014 6:24 pm, edited 1 time in total.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby jbrita » Tue Apr 22, 2014 4:37 pm

Aqui te mando este ejemplo:
oBrw1:bPastEof :={|| If(aTrabajo[oBrw1:nArrayAt,1]#0.00,NewReg(aTrabajo,oBrw1),) }
oBrw1:bKeyDown :={|nKey| if( nKey == VK_DELETE ,DelREg(aTrabajo,oBrw1,TotVal,oDlg1),) }
STATIC FUNCTION NewReg(aTrabajo,oBrw1)
*-------------------------------------
AADD(aTrabajo,{0.00,space(300),0,0})
oBrw1:GoDown() //
oBrw1:GoLeftMost() //
SysRefresh()
RETURN .T.

STATIC Function DelReg( aTrabajo, oBrw1, TotVal, oDlg )
*------------------------------------------------------
IF MsgYesNo( "Atención: ¿Está seguro de querer borrar?","Verificar!" )

ADel( aTrabajo, oBrw1:nArrayAt )
ASize( aTrabajo, Len( aTrabajo ) - 1 )
If Len(aTrabajo)=0
NewReg(aTrabajo,oBrw1)
* oBrw1:Gotop()
Endif
Endif
oBrw1:Refresh()
EVAL(TotVal)
oDlg:UPDATE()
oDlg:AEvalWhen()

return Nil
jbrita
 
Posts: 504
Joined: Mon Jan 16, 2006 3:42 pm

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

Postby FranciscoA » Tue Apr 22, 2014 9:40 pm

Adrian, lo mas indicado sería que presentes un ejemplo autocontenido que podamos compilar sin problemas.
Al que pusiste le faltan varias funciones.

Sobre el segundo tema de tu amable e-Mail, lo siento, pero no es posible, por razones obvias.

Por el momento, lo que puedo hacer es re-plantear tu primer ejemplo, para que veas que funciona. Puedes compilarlo sin problemas. Lo Unico que hice fue cambiar los paths a las tablas para poderlo compilar.

Espero que subas completo el ultimo ejemplo.

Code: Select all  Expand view  RUN
#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 n, aFont:=Array(3)

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

  REQUEST DBFCDX
  RDDSETDEFAULT( "DBFCDX" )

SET RESOURCES TO ".\PROVE.DLL"

DEFINE FONT aFont[1] NAME 'arial' SIZE 0,-10
DEFINE FONT aFont[2] NAME 'arial' SIZE 0,-10 ITALIC BOLD
DEFINE FONT aFont[3] NAME 'arial' SIZE 0,-10 BOLD

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

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

 DEFINE DIALOG oDlg RESOURCE "BROWSER2" TITLE 'Listado de Pólizas y Movimientos'
  // Consulta Balanza cuentas acumulados \\
  REDEFINE XBROWSE oBrw1 ID 180 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
         :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
         :bClrStd := { || IF(Right(alltrim(oBrw1:aArrayData[oBrw1:nArrayAt,1]),4)!='0222' , {CLR_WHITE, CLR_BLACK}, {CLR_BLACK,CLR_YELLOW} ) }
         :bChange         := {|| MovEdoCta(oBrw1,@aDatos2,oBrw2), oBrw2:Refresh() } // Aqui me persiste el problema de los Headers
   END

   //Font en toda la linea deseada
   For n := 1 to len( oBrw1:aCols )
      oBrw1:aCols[n]:oDataFont := {|| IF(Right(alltrim(oBrw1:aRow[1]),4)='0222', aFont[2], aFont[1]) }
   Next


  // Consulta Estados de cuentas a detalle \\
  REDEFINE XBROWSE oBrw2 ID 181 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
  SET RESOURCES TO
  aFont[1]:End()
  aFont[2]:End()
  aFont[3]:End()
RETURN NIL

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

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

 aDatos2 := {}

 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    := 7  //nNumEmp
    // S91     := "EMP"+TSTR(xEmp)+TRIM("\R_INTS"+nStation)+".DBF"
    // Ind1Tmp1:= "R_INTS"+nStation
     S91     := "C:\PROVEEDOR\"+"EMP"+TSTR(xEmp)+TRIM("\R_INTS"+"7")+".DBF"
     Ind1Tmp1:= "
C:\PROVEEDOR\EMP07\"+"R_INTS"+"7"

     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
         ELSE
             aDatos2:={{"
","","","","","","",""}}
         ENDIF
     ELSE
        aDatos2:={{"
","","","","","","",""}}
     ENDIF
 ELSE
     aDatos2:={{"
","","","","","","",""}}
 ENDIF

 oBrw2:SetArray(aDatos2)
RETURN NIL

//---------------------
FUNCTION TSTR(xEmp)
RETURN STRZERO(xEmp,2)


 ** 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"

 DBUSEAREA(.T.,,"
C:\PROVEEDOR\EMP07\CATCTA14","CATCTA14",.T.)
 S08 := ALIAS()
 DBSETINDEX("
C:\PROVEEDOR\EMP07\CATCTA14")

 DBUSEAREA(.T.,,"
C:\PROVEEDOR\EMP07\MOVT0214","MOVT0214",.T.)
 S13 := ALIAS()
 DBSETINDEX("
C:\PROVEEDOR\EMP07\MOVT0214")


 nTCarg := 0
 nTCred := 0

 (S08)->(DbGoTop())

MES_PER := 5

 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)->(DBSeek((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



 * 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)

*/  * Fin comentario, lo pueden quitar....
Siempre atento.
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 FranciscoA » Tue Apr 22, 2014 11:38 pm

Adrian.
Tomando como base tu ejemplo y haciendole algunas adaptaciones para usar las DBFs del primero que presentaste, encontré la siguiente solucion.
Pruebala y nos comentas. Pongo toda tu funcion.

Code: Select all  Expand view  RUN
//------------------------------------------------------------------------------
STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2)  // Esta es la rutina del segundo browse que me inserta registro vacio...
 LOCAL aDat[9],aSum[8], aSub[8], aTot[8]

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

 AFill(aDat,"")
 AFill(aSum,0)
 AFill(aSub,0)
 AFill(aTot,0)

 aDatos2 := {}  //FranciscoA AQUI...

 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)

     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
        // aDatos2:= {{ "","","","","","","","" }} // Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
        //Esto no va:  FrancisoA                   // Como eliminar la linea en blanco como primer elemento...

         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
         ENDIF
     ENDIF
     
     oBrw2:SetArray(aDatos2)

     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()
 ENDIF
RETURN NIL
 

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 » Wed Apr 23, 2014 5:50 pm

FranciscoA wrote:Adrian.
Tomando como base tu ejemplo y haciendole algunas adaptaciones para usar las DBFs del primero que presentaste, encontré la siguiente solucion.
Pruebala y nos comentas. Pongo toda tu funcion.

Code: Select all  Expand view  RUN
//------------------------------------------------------------------------------
STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2)  // Esta es la rutina del segundo browse que me inserta registro vacio...
 LOCAL aDat[9],aSum[8], aSub[8], aTot[8]

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

 AFill(aDat,"")
 AFill(aSum,0)
 AFill(aSub,0)
 AFill(aTot,0)

 aDatos2 := {}  //FranciscoA AQUI...

 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)

     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
        // aDatos2:= {{ "","","","","","","","" }} // Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
        //Esto no va:  FrancisoA                   // Como eliminar la linea en blanco como primer elemento...

         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
         ENDIF
     ENDIF
     
     oBrw2:SetArray(aDatos2)

     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()
 ENDIF
RETURN NIL
 

Saludos.



Hola buenas tardes y a todos los que me respondieron,muchas gracias, pero no surte el efecto.

FranciscoA, adapte lo que me indicaste, se ve bien, al principio, no me agrega el registro vacio,y me estabiliza bien al recorrer los registros de las 3 primeras cuentas acumulativas, pero al bajar al cuarto registro con la flecha y llegar a la cuenta de detalles, se pierde los headers,yo creo que es mi version de fivewin . o como corregir el bug .
Preparare el codigo fuente,bases de datos y un ejecutable del error que se me presenta.

Saludos y buendia.!
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby ACC69 » Wed Apr 23, 2014 6:09 pm

ACC69 wrote:
FranciscoA wrote:Adrian.
Tomando como base tu ejemplo y haciendole algunas adaptaciones para usar las DBFs del primero que presentaste, encontré la siguiente solucion.
Pruebala y nos comentas. Pongo toda tu funcion.

Code: Select all  Expand view  RUN
//------------------------------------------------------------------------------
STATIC FUNCTION MovEdoCta(oBrw1,aDatos2,oBrw2)  // Esta es la rutina del segundo browse que me inserta registro vacio...
 LOCAL aDat[9],aSum[8], aSub[8], aTot[8]

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

 AFill(aDat,"")
 AFill(aSum,0)
 AFill(aSub,0)
 AFill(aTot,0)

 aDatos2 := {}  //FranciscoA AQUI...

 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)

     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
        // aDatos2:= {{ "","","","","","","","" }} // Aqui la variable arreglo desde principio funciona bien...pero deja una linea en blancoooo...
        //Esto no va:  FrancisoA                   // Como eliminar la linea en blanco como primer elemento...

         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
         ENDIF
     ENDIF
     
     oBrw2:SetArray(aDatos2)

     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()
 ENDIF
RETURN NIL
 

Saludos.



Hola buenas tardes y a todos los que me respondieron,muchas gracias, pero no surte el efecto.

FranciscoA, adapte lo que me indicaste, se ve bien, al principio, no me agrega el registro vacio,y me estabiliza bien al recorrer los registros de las 3 primeras cuentas acumulativas, pero al bajar al cuarto registro con la flecha y llegar a la cuenta de detalles, se pierde los headers,yo creo que es mi version de fivewin . o como corregir el bug .
Preparare el codigo fuente,bases de datos y un ejecutable del error que se me presenta.

Saludos y buendia.!


Anexo codigo fuente, ejecutable,bases de datos y archivo proveiva.res,y puedan compilar echandome la mano con ese detalle, lo unico que me he dado cuenta en ese caso, del primer browse,me muestra los datos con cuentas acumulativas, y la logica que no es detalle y no debe pasar al segundo browse, pero hice un ejemplo temporal en mi pc, quitandole unicamente las cuentas acumulativas y me muestre unicamente detalles, si pinta bien los headers y los registros del segundo browse sin ningun problema, pero es necesario presentar la informacion con sus cuentas de mayor acumulativa para que el usuario sepa el total acumulado de cada cuenta de mayor y sus detalles.

Numero de empresa a accesar 7 Comercializadora Time Share Internacional
Clave PRUEBA
opcion del menu Consultas CXC y/o CXP

http://www.4shared.com/zip/XrZhVQ2Kba/Provedor.html
https://www.dropbox.com/s/gutfg3mpbzrnbb1/Provedor.zip

Esperando contar por ultima vez con su apoyo de todos ustedes, con ese detalle del segundo browse,que les agradecere mucho.

Saludos y buen dia.!

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 FranciscoA » Thu Apr 24, 2014 6:45 am

Adrian, he compilado tu codigo y no veo el problema de que agrega item en blanco cuando es cuenta detalle. Eso sí, lo agrega cuando es cuenta acumulativa. Lo que podrias hacer por el momento, es condicionar en este caso que no tenga efecto el boton, para que no llame a la funcion DetaFact. Intentaré luego.
Por el momento, le agregué lo de la negrilla en cuentas acumulativas.
Desde aqui puedes descargar ejecutable y lo demas.
Proveedor_2.zip
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 » Thu Apr 24, 2014 2:08 pm

FranciscoA wrote:Adrian, he compilado tu codigo y no veo el problema de que agrega item en blanco cuando es cuenta detalle. Eso sí, lo agrega cuando es cuenta acumulativa. Lo que podrias hacer por el momento, es condicionar en este caso que no tenga efecto el boton, para que no llame a la funcion DetaFact. Intentaré luego.
Por el momento, le agregué lo de la negrilla en cuentas acumulativas.
Desde aqui puedes descargar ejecutable y lo demas.
Proveedor_2.zip
Saludos.


Gracias Francisco prueba y te comento..

Saludos .
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby FranciscoA » Thu Apr 24, 2014 2:16 pm

ACC69 wrote:FranciscoA wrote:
... Eso sí, lo agrega cuando es cuenta acumulativa. Lo que podrias hacer por el momento, es condicionar en este caso que no tenga efecto el boton, para que no llame a la funcion MovDetFac. Intentaré luego.

He activado tu funcion MovDetFac para probar lo anterior.
Todo está en el subfolder \prg
Proveedor_2.zip
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 2:43 pm

FranciscoA wrote:
ACC69 wrote:FranciscoA wrote:
... Eso sí, lo agrega cuando es cuenta acumulativa. Lo que podrias hacer por el momento, es condicionar en este caso que no tenga efecto el boton, para que no llame a la funcion MovDetFac. Intentaré luego.

He activado tu funcion MovDetFac para probar lo anterior.
Todo está en el subfolder \prg
Proveedor_2.zip



Buenos dias Francisco, de antemano muchas gracias por la ayuda y por tu tiempo, pero definitivamente si es mi version de fivewin, ya vio el ejecutable y el comportamiento del browse que le envie, al llegar a las cuentas de detalles, se me pierde los headers, y aparecen letras de la a ,b,c etc etc , y si definitivamente es por la version de fivewin que tengo, ya la clase de TXBrowse ya ha de estar mas actualizada a lo que tengo,asi que no me queda de otra que dejarlo por mientras asi...

Gracias de nuevo Francisco y por el detalle del pintado de negritas, que no se me habia ocurrido de esta manera, que pensaba agregarle un campo mas de niveles 1,2,3, y 4 con status de A y D y que la A me pinte de negras,eso era lo que tenia pensado, pero no sabia como ocultar las columnas para que el usuario no vea los parametros, pero con ese detalle es mas que suficiente.

El tercer browse a detalle no hay ningun problema , porque son dbfs y me pinta bien los headers y los datos etc , el segundo browse es con el que mas batallo por ser ARRAYS, y lo tengo asi por la rutina temporal de estados de cuentas .

Gracias de antemano Francisco.

Saludos desde Cancun,Q.Roo Mex
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby FranciscoA » Thu Apr 24, 2014 2:55 pm

Ahora que lo recuerdo, yo tuve exactamente el mismo problema en la version 901, pero encontre la solución así:
viewtopic.php?f=6&t=16769&hilit=atitcols#p87291
Espero te sea util para solucionar lo tuyo. Y sobre cualquier consulta, todos los Fivewinners estamos a la orden.
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 » Thu Apr 24, 2014 4:06 pm

FranciscoA wrote:Ahora que lo recuerdo, yo tuve exactamente el mismo problema en la version 901, pero encontre la solución así:
http://fivetechsupport.com/forums/viewt ... ols#p87291
Espero te sea util para solucionar lo tuyo. Y sobre cualquier consulta, todos los Fivewinners estamos a la orden.
Saludos



Gracias Francisco, voy a checar tu ejemplo y te comento,sinceramente si me interesa que quede bien .

Saludos y buen dia.!
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby ACC69 » Thu Apr 24, 2014 4:25 pm

ACC69 wrote:
FranciscoA wrote:Ahora que lo recuerdo, yo tuve exactamente el mismo problema en la version 901, pero encontre la solución así:
http://fivetechsupport.com/forums/viewt ... ols#p87291
Espero te sea util para solucionar lo tuyo. Y sobre cualquier consulta, todos los Fivewinners estamos a la orden.
Saludos



Gracias Francisco, voy a checar tu ejemplo y te comento,sinceramente si me interesa que quede bien .

Saludos y buen dia.!



Ya vi tu solucion de ejemplo que posteaste anteriormente con la version, y en mi caso, entonces tendria que cambiar las lineas, en lugar de ARRAY aDatos2 FOOTERS CELL AUTOCOLS, que me minimize el codigo, tendria que codificar mas lineas a otro estilo columnas de Browse y siempre me he preguntado cual es la diferencia de este codigo con otras formas, oBrw := TXBrowse():New( oDlg ), pero que supongo da mismo resultado de datos ...o tiene alguna diferencia.

Si que me falta mucho por aprender mas de la clase TXBrowse pero ya vere si me funciona asi de esta manera, o medio adaptarlo con lo que tengo actualmente e hice el primer ejemplo sin codificar COLUMNAS DEL BROWSE y me tiro error con ARRAY.

Saludos Francisco.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests