Hola buenos dias Ing. Rosita, dejo un pedazo de codigo inconcluso que espero te sea de mucha ayuda, aunque no esta realizado por arrays ,traigo los datos desde dbfs,ya que nunca casi le entendi como cargar datos a un arrays a txbrowse desde dbfs si realizo alguna consulta o modificacion de polizas y asi como grabar datos desde arrays,ya que segun es mas facil insertar registros con la funcion ains() pero nunca lo realice y me quede con ese detalle de solucionarlo
.
Code: Select all
// MENU PRINCIPAL
#include "FiveWin.ch"
STATIC oDlg,oSay, oG_C,oG_D,oBtn, oBrw
STATIC S01,S02,S03,S04,S05,S06,S07
STATIC cMesAno, dFecMov, dFecPresent, nTipOpera,cNumOperac, nCveSATCont
STATIC cNombOpera, cNombSAT
STATIC lNew, lAdd
STATIC aGradBarSelFocus := {{ 1, RGB(252,232,171) , RGB(248,195,34) }} ,;
aGradBarSel := {{ 1, RGB(252,235, 184), RGB(251,222,88) }}
Memvar cPath, cDirReport, nNumEmp, cRutaDat
//------------------------------------------------------------------------------\\
FUNCTION AltasSAT()
oSay := Array(1)
oG_C := Array(1)
oBtn := Array(2)
S04 := Abre_Dbf(4,4) // CTOPERAC.DBF
S05 := Abre_Dbf(5,5) // CTOPERAC.DBF
S06 := Abre_Dbf(6,6) // CTSATCON.DBF
S07 := Abre_Dbf(7,7) // MOVDEFIS.DBF
cMesAno := "0216"
dFecMov := DATE()
nTipOpera := 0
cNumOperac := SPACE(22)
dFecPresent := DATE()
nCveSATCont := 0
lNew := .F. // Nuevo registro
lAdd := .F. // Agregar registro
DEFINE DIALOG oDlg RESOURCE "ALTASAT" TITLE "Alta obligacion fiscal"
REDEFINE GET oG_C[01] VAR cMesAno ID 101 OF oDlg PICT "####" VALID V_MESANO()
REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Mod_Cap(.T.) // CapDet(.T.)
REDEFINE BUTTON oBtn[02] ID 202 OF oDlg ACTION Mod_Cap(.F.) CANCEL // HabD_Cap(.F.) CANCEL
REDEFINE XBROWSE oBrw ID 106 OF oDlg ;
HEADERS "Tipo"+CRLF+"Operacion", "Fec"+CRLF+"Present","Nomb Operac","Num Operacion","SAT Cont" ;
COLUMNS "TIPOPERAC" , "FECPRESENT" ,"NOMBOPERA","NUMOPERAC","NOMBSAT" ;
SIZES 54,52,102,120,200 ;
Picture "99" ,;
"@D" ,;
"@!" ,;
"@!" ,;
"@!" ;
ALIAS (S07)->( ALIAS() ) // FOOTERS CELL AUTOCOLS
AEval( oBrw:aCols, { |o| o:nEditType := 0 ,; //No editables
o:nHeadStrAlign:= 2 } ) //texto encab/col centrado
WITH OBJECT oBrw
//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
END
ACTIVATE DIALOG oDlg CENTER ON INIT CargaDatos() // (CargDatos(lNew)) VALID FinCap(oDlg2,oBrw2,oBrw3) ON PAINT Refr_Bmp(hDC)
RETURN NIL
//------------------------------------------------------------------------------\\
STATIC FUNCTION CargaDatos()
(S07)->( OrdScope(0, cMesAno) )
(S07)->( OrdScope(1, cMesAno) )
oBrw:Refresh()
RETURN NIL
//------------------------------------------------------------------------------\\
STATIC FUNCTION Mod_Cap(lNew)
LOCAL oBtn
lNew := lNew
oBtn := Array(2)
oG_D := Array(4)
IF lNew .OR. (!lNew .AND. !(S07)->(EOF()))
lAdd := lNew
IF lNew
nTipOpera := 0
cNumOperac := SPACE(22)
dFecPresent := DATE()
nCveSATCont := 0
ELSE
nTipOpera := (S07)->TIPOPERAC
cNumOperac := (S07)->NUMOPERAC
dFecPresent := (S07)->FECPRESENT
nCveSATCont := (S07)->CVESATCONT
ENDIF
DEFINE DIALOG oDlg RESOURCE "CAPDET" TITLE "Alta obligacion fiscal"
REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Reg_Cap(lNew) // Grabar registro
REDEFINE BUTTON oBtn[02] ID 202 OF oDlg ACTION Limpia(.T.) // Nuevo registro
REDEFINE GET oG_D[01] VAR nTipOpera ID 101 OF oDlg PICT "99" VALID V_OPERAC(lNew) ACTION ListOperac(@nTipOpera,S05,"nTipOpera",oG_D[02])
REDEFINE GET oG_D[02] VAR dFecPresent ID 102 OF oDlg PICT "@D"
REDEFINE GET oG_D[03] VAR cNumOperac ID 103 OF oDlg PICT "@####################" // Aqui se captura numero de operacion
REDEFINE GET oG_D[04] VAR nCveSATCont ID 104 OF oDlg PICT "9" VALID V_CVESAT() ACTION ListSATCont(@nCveSATCont,S06,"nCveSATCont",oG_D[03])
ACTIVATE DIALOG oDlg CENTER // ON INIT CargaDatos() // (CargDatos(lNew)) VALID FinCap(oDlg2,oBrw2,oBrw3) ON PAINT Refr_Bmp(hDC)
SysRefresh() // Le Ccomente,porque al darle ENTER rapidamentte, cargaba de nuevo los _....
oG_D[01]:SetFocus() // Aqui retorna despues de Registrar Captura...Reg_Cap()
oG_D[01]:Refresh()
ELSE
oBrw:SetFocus()
ENDIF
RETURN (NIL)
//------------------------------------------------------------------------------\\
STATIC FUNCTION V_MESANO()
(S07)->( OrdScope(0, cMesAno) )
(S07)->( OrdScope(1, cMesAno) )
oBrw:Refresh()
RETURN (.T.)
//------------------------------------------------------------------------------\\
STATIC FUNCTION V_OPERAC(lNew)
(S05)->( DbSeek(STR(nTipOpera,2)) )
IF (S05)->( FOUND() )
cNombOpera := (S05)->NOMBOPERA
ELSE
MsgAlert("Operacion no encontrado")
ENDIF
lNew := lNew
RETURN (.T.)
//------------------------------------------------------------------------------\\
STATIC FUNCTION V_CVESAT()
(S06)->( DbSeek(STR(nCveSATCont,2)) )
IF (S06)->( FOUND() )
cNombSAT := (S06)->NOMBSAT
ELSE
MsgAlert("Operacion no encontrado")
ENDIF
RETURN (.T.)
//------------------------------------------------------------------------------\\
STATIC FUNCTION ListOperac(nTipOpera,S05,VarCta,oGetCpo)
Default oGetCpo := NIL
IF SelOperac(nTipOpera,S05)
DO CASE
CASE VarCta = "nTipOpera"
nTipOpera := (S05)->TIPOPERAC
ENDCASE
ENDIF
oGetCpo:Refresh()
RETURN NIL
//------------------------------------------------------------------------------\\
STATIC FUNCTION ListSATCont(nCveSATCont,S06,VarCta,oGetCpo)
Default oGetCpo := NIL
IF SelSATcont(nCveSATCont,S06)
DO CASE
CASE VarCta = "nCveSATCont"
nCveSATCont := (S06)->CVESATCONT
ENDCASE
ENDIF
oGetCpo:Refresh()
RETURN NIL
//------------------------------------------------------------------------------\\
FUNCTION SelOperac(nTipOpera,S05)
LOCAL oSDlg, oSBrw
DbSelectArea(S05)
(S05)->( DbSeek(STR(nTipOpera,2),.T.) )
DEFINE DIALOG oSDlg RESOURCE "S_CATAL" TITLE "Catálogo Tipo de Operación"
REDEFINE XBROWSE oSBrw ID 101 OF oSDlg ;
HEADERS "Clave"+CRLF+"Operación","Descripción"+CRLF+"Operación" ;
COLUMNS "TIPOPERAC", "NOMBOPERA" ;
SIZES 60, 112 ;
PICTURES "99", "@S36" ;
ALIAS (S05)->( ALIAS() ) // FOOTERS CELL AUTOCOLS
AEval( oSBrw:aCols, { |o| o:nEditType := 0 ,; //No editables
o:nHeadStrAlign:= 2 } ) //texto encab/col centrado
WITH OBJECT oSBrw
//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
:lHScroll := .F. // Horizontal
:lVScroll := .T. // Vertical
: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
:bLDblClick := {|| oSDlg:END()}
:bKeyDown := {| nKey| IF(nKey = 13, oSDlg:END(), .T.)}
END
ACTIVATE DIALOG oSDlg
RETURN (.T.)
//------------------------------------------------------------------------------\\
FUNCTION SelSATCont(nCveSATCont,S06)
LOCAL oSDlg, oSBrw
DbSelectArea(S06)
(S06)->( DbSeek(STR(nCveSATCont,2),.T.) )
DEFINE DIALOG oSDlg RESOURCE "S_CATAL" TITLE "Catálogo Tipo de Operación"
REDEFINE XBROWSE oSBrw ID 101 OF oSDlg ;
HEADERS "Clave"+CRLF+"SAT","Descripción"+CRLF+"SAT" ;
COLUMNS "CVESATCONT", "NOMBSAT" ;
SIZES 60, 112 ;
PICTURES "99", "@S36" ;
ALIAS (S06)->( ALIAS() ) // FOOTERS CELL AUTOCOLS
AEval( oSBrw:aCols, { |o| o:nEditType := 0 ,; //No editables
o:nHeadStrAlign:= 2 } ) //texto encab/col centrado
WITH OBJECT oSBrw
//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
:lHScroll := .F. // Horizontal
:lVScroll := .T. // Vertical
: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
:bLDblClick := {|| oSDlg:END()}
:bKeyDown := {| nKey| IF(nKey = 13, oSDlg:END(), .T.)}
END
ACTIVATE DIALOG oSDlg
RETURN (.T.)
//------------------------------------------------------------------------------\\
STATIC FUNCTION Limpia(lNew)
IF lNew .OR. (!lNew .AND. !(S07)->(EOF()))
lAdd := lNew
IF lNew
lNew := lNew
nTipOpera := 0
cNumOperac := SPACE(22)
dFecPresent := DATE()
nCveSATCont := 0
ENDIF
SysRefresh() // Le Ccomente,porque al darle ENTER rapidamentte, cargaba de nuevo los _....
AEval( oG_D,{|o| o:Refresh()} )
oG_D[01]:SetFocus() // Aqui retorna despues de Registrar Captura...Reg_Cap()
oG_D[01]:Refresh()
ENDIF
MsgInfo(lNew)
RETURN NIL
//------------------------------------------------------------------------------\\
STATIC FUNCTION Reg_Cap(lNew)
*MsgInfo("Registrando movimientos...")
IF lNew
(S07)->( DbAppend() )
ENDIF
IF !OCUPADO(S07)
*NUMOPERA" , "FECPRESENT" ,"CVEOPERA" ,"SATCONTAB"
(S07)->AMMOV := cMesAno
(S07)->FECMOV := DATE()
(S07)->TIPOPERAC := nTipOpera
(S07)->NOMBOPERA := cNombOpera
(S07)->FECPRESENT := dFecPresent
(S07)->NUMOPERAC := cNumOperac
(S07)->CVESATCONT := nCveSATCont
(S07)->NOMBSAT := cNombSAT
(S07)->(DbCommit())
(S07)->(DBUnlock()) // Desbloquea
ENDIF
oBrw:Refresh()
RETURN NIL
//------------------------------------------------------------------------------
STATIC FUNCTION HabD_Cap(lCapt)
LOCAL nI
IF lCapt
// Habilita y refresca detalles de captura
*oG_D[01]:Enable()
*oG_D[01]:Refresh()
*AEval( oG_D,{|o| o:Enable()})
*AEval( oG_D,{|o| o:Refresh()})
*AEval( oBtn,{|o| o:Enable()} )
*AEval( oBtn,{|o| o:Refresh()} )
ELSE
cMesAno := "0316"
dFecMov := DATE()
nTipOpera := 0
cNumOperac := SPACE(22)
dFecPresent := DATE()
nCveSATCont := 0
// Deshabilita y refresca detalles de captura
oG_D[01]:Disable()
oG_D[01]:Refresh()
* AEval( oG_D,{|o| o:Disable()} )
* AEval( oG_D,{|o| o:Refresh()} )
* AEval( oBtn,{|o| o:Disable()} )
* AEval( oBtn,{|o| o:Refresh()} )
SysRefresh()
oBrw:Enable()
oBrw:SetFocus()
oBrw:DrawSelect()
ENDIF
Release nI
RETURN (NIL)
Saludos cordiales Ing. Rosita
Atte: Adrian C. C.