Como controlar de no agregar elemento...SOLUCIONADOooo
Posted: 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.
http://www.subirimagenes.com/otros-pantaedocta-8884182.html
Aqui el codigo ...:
Esperando contar con su amable apoyo ,les agradecere mucho .
Saludos y buen dia.!
Atte: Adrian C. C.
acc69@hotmail.com
http://www.subirimagenes.com/otros-pantaedocta-8884182.html
Aqui el codigo ...:
- Code: Select all Expand view
- #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