Este es un ejemplo, "en el cual te puedes orientar", que tengo con una pantalla no modal, con agregado, edici贸n, Eliminaci贸n, Impresi贸n y Traspaso a excel de un maestro de clientes.
//------------------------------------------------------------------------
//---- Programa 聽 聽 聽 聽 聽 : 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 [ Client.prg ] 聽--
//---- Contenido 聽 聽 聽 聽 聽: 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽[ Maestro de Clientes ] 聽--
//------------------------------------------------------------------------
#include "TSBrow60.ch"
#include "FiveWin.ch"
#include "FileXLS.ch"
#include "splitter.Ch"
#include "Report.ch"
#include "BtnGet.ch"
STATIC oTree, oItem, cRecor, nIni, lBor
STATIC aPro , tImp, pUni, tCom, tIva, Tota, Flet, cBod
//-----------------
FUNCTION Clientes()
LOCAL oDlg, oFol, oPun, oBrw, oSpl, oSay, xSay, oFon, oChk
LOCAL oBmp, cBmp, oTab, oLbx, oMet, lSw , yLbx, Met2
SELECT PA04 聽 聽; ZAP
SELECT PA02 聽 聽; ZAP
lBor 聽 聽 聽 聽 聽 := .F.
oItem 聽 聽 聽 聽 聽:= ARRAY(2)
cRecor 聽 聽 聽 聽 := ""
xSay 聽 聽 聽 聽 聽 := {NIL,NIL,NIL,0,NIL,0,NIL,0,NIL,0,NIL,NIL}
nIni 聽 聽 聽 聽 聽 := 0
lSw 聽 聽 聽 聽 聽 聽:= .F.
DEFINE FONT 聽 oFon NAME "Tahoma" SIZE 0,-12 BOLD
DEFINE CURSOR oPun RESOURCE "MANO"
DEFINE DIALOG oDlg RESOURCE 81 TITLE "Registro de Clientes"
聽 聽 聽SELECT CLIE 聽 聽; SET ORDER TO 3 聽 聽 聽 聽 聽; DBGOTOP()
聽 聽 聽REDEFINE BROWSE 聽oBrw 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 FIELDS 聽CLIE->CODIGO, CLIE->RUT, CLIE->NOMBRE 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 HEADERS "C贸digo","Rut","Nombre del Cliente" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 ALIAS "CLIE" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 COLOR nRGB( 聽0, 90,157), nRGB(255,255,237) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 SIZES 70,80,450 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 ID 13 CURSOR oPun OF oDlg GRID
聽 聽 聽 聽 聽 聽 oBrw:SetColor( { 3, 5, 6, 9, 11, 12, 15 }, { GetSysColor(7), CLR_YELLOW, {CLR_HBLUE, CLR_BLUE}, GetSysColor(7), CLR_GRAY , {CLR_WHITE, CLR_GRAY} , CLR_NBLUE } )
聽 聽 聽 聽 聽 聽 oBrw:nFreeze 聽 聽 聽 := 1
聽 聽 聽 聽 聽 聽 oBrw:bLDblClick 聽 聽:= { |nRow, nCol| Editar(oBrw, .f.) }
聽 聽 聽 聽 聽 聽 oBrw:nHeightHead 聽 += 9
聽 聽 聽 聽 聽 聽 oBrw:nLineStyle 聽 聽:= LINES_ALL
聽 聽 聽 聽 聽 聽 oBrw:lNoHScroll 聽 聽:= .t.
聽 聽 聽 聽 聽 聽 oBrw:bChange 聽 聽 聽 := { || Recor( oSay ) }
聽 聽 聽 聽 聽 聽 oBrw:nClrText 聽 聽 聽:= { || IIF(CLIE->ACTIVO = .F. ,nRGB(255,196,196) 聽, nRGB( 聽0, 90,157) ) }
聽 聽 聽 聽 聽 聽 oBrw:bKeyChar 聽 聽 聽:= {|nKey| iif(nKey==13,Editar(oBrw, .f.) ,MsgBeep() )}
聽 聽 聽 REDEFINE TABS oTab 聽 聽 聽ID 15 PROMPT "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Todos" ;
聽 聽 聽 聽 聽 聽 ACTION Filtro(oTab:nOption, oBrw) OPTION 1 OF oDlg
聽 聽 聽 聽 聽 聽 oTree := TTreeView():ReDefine( 14, oDlg,,, .T. , )
聽 聽 聽 聽 聽 聽 oTree:blDblClick 聽:= { || IIF(SUBSTR(oTree:GetSelText(),1,1) = "<", Act_Tree(SUBSTR(oTree:GetSelText(),2,2), oBrw,oTree:GetSelText() ), MsgBeep() ), oBrw:Refresh() }
聽 聽 聽REDEFINE SPLITTER oSpl ID 129 VERTICAL PREVIOUS CONTROLS oTree HINDS CONTROLS oBrw 聽LEFT MARGIN 聽70 RIGHT MARGIN 200 OF oDlg _3DLOOK UPDATE
聽 聽 聽REDEFINE SAY oSay VAR cRecor 聽 聽 聽 聽 ID 10 PICTURE "@K" COLOR GetSysColor(7) OF oDlg
聽 聽 聽REDEFINE BTNBMP ID 500 OF oDlg RESOURCE 聽 83 NOBORDER TOOLTIP " Ingresar Cliente " 聽 聽 聽ACTION Editar(oBrw, .t.) 聽 聽 WHEN EVAL({|| ( CLAV->S001 = "41TYR" ) })
聽 聽 聽REDEFINE BTNBMP ID 502 OF oDlg RESOURCE 聽 81 NOBORDER TOOLTIP " Modifica Cliente " 聽 聽 聽ACTION Editar(oBrw, .f.) 聽 聽 WHEN EVAL({|| ( CLAV->S002 = "5985P" ) })
聽 聽 聽REDEFINE BTNBMP ID 501 OF oDlg RESOURCE 聽 48 NOBORDER TOOLTIP " Eliminar Cliente " 聽 聽 聽ACTION Borrar(oBrw) 聽 聽 聽 聽 聽 聽 聽 WHEN EVAL({|| ( CLAV->S003 = "GT565" ) })
聽 聽 聽REDEFINE BTNBMP ID 503 OF oDlg RESOURCE 1187 NOBORDER TOOLTIP " Buscar Cliente " 聽 聽 聽 聽ACTION BuscarClientes(oBrw, oTab) WHEN EVAL({|| ( CLAV->S006 = "P90W1" ) })
聽 聽 聽REDEFINE BTNBMP ID 505 OF oDlg RESOURCE 聽 42 NOBORDER TOOLTIP " Trasladar a MS-Excel庐 " ACTION TrasladarExcel(oBrw) 聽 聽 聽 WHEN EVAL({|| ( CLAV->S007 = "MTYEA" ) })
聽 REDEFINE BUTTON 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ID 101 OF oDlg ACTION ( oFon:End(), oDlg:End() ) UPDATE
ACTIVATE DIALOG oDlg ON INIT ( Filtro(1, oBrw), IIF(!SndPlaySound(".\SYSTEM\OPEN.WAV",1),MsgBeep(),), Carga(), .T. ) CENTER NOMODAL
oFon:End()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Editar( oBrw, cAppend )
LOCAL cCod, cRut, cNom, cSig, cDir, cCiu, cGir, cFon, cFax, Mail, cDia, cAct, cApe
LOCAL xGet, xDlg, oChk, oSay, cRot, cCon
xGet := {NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL}
IF !cAppend ; SELECT CLIE ; cCod := CLIE->CODIGO 聽 聽 聽; cRut := CLIE->RUT 聽 聽 聽; cNom := CLIE->NOMBRE
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cDir := CLIE->DIRECCION 聽 ; cGir := CLIE->GIRO 聽 聽 ; cCiu := CLIE->CIUDAD
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cSig := CLIE->SIGLA 聽 聽 聽 ; cFax := CLIE->FAX 聽 聽 聽; cDia := CLIE->DIAS
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mail := CLIE->CORREO 聽 聽 聽; cFon := CLIE->FONO 聽 聽 ; cAct := CLIE->ACTIVO
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cApe := CLIE->APERTURA 聽 聽; cRot := CLIE->ROTACION ; cCon := CLIE->CONTACTO
ELSE 聽 聽 聽 聽; SELECT CLIE ; cCod := STRTRAN(STR((RecCount()+1),5,0)," ","0") 聽 ; cApe := DATE()
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cRut := SPACE(10) 聽 聽 聽 聽 ; cNom := SPACE(40) 聽 聽 聽; cDir := SPACE(40)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cGir := SPACE(40) 聽 聽 聽 聽 ; cCiu := SPACE(20) 聽 聽 聽; cSig := SPACE(20)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cFax := SPACE(20) 聽 聽 聽 聽 ; cDia := 0 聽 聽 聽 聽 聽 聽 聽; cFon := SPACE(20)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mail := SPACE(30) 聽 聽 聽 聽 ; cAct := .T. 聽 聽 聽 聽 聽 聽; cRot := 0
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cCon := SPACE(30)
ENDIF
DEFINE DIALOG xDlg RESOURCE 245 TITLE IIF(cAppend,"Ingresar","Modificar")
聽 聽REDEFINE CHECKBOX 聽 oChk VAR cAct 聽 聽 聽 聽 聽 聽 聽 聽 ID 113 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg
聽 聽IF cAppend 聽 聽 聽 聽; REDEFINE GET xGet[1] VAR cCod ID 9150 PICTURE "XXXXX" VALID( EstaClie(cCod) ) 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg
聽 聽ELSE 聽 聽 聽 聽 聽 聽 聽; REDEFINE GET xGet[1] VAR cCod ID 9150 PICTURE "XXXXX" COLOR nRGB(0,64,128), nRGB(255,255,196) OF xDlg READONLY
聽 聽ENDIF
聽 聽REDEFINE SAY oSay 聽 聽PROMPT "Creado el : "+DTOC(cApe) ID 10 OF xDlg COLOR GetSysColor(7)
聽 聽REDEFINE GET xGet[02] VAR cRut ID 9151 聽PICTURE "#XXXXXXXXX" VALID( ValRut(cRut) ) OF xDlg WHEN {|| MyColorGet( xGet[02] ) }
聽 聽REDEFINE GET xGet[03] VAR cNom ID 9152 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[03] ) }
聽 聽REDEFINE GET xGet[04] VAR cSig ID 9156 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[04] ) }
聽 聽REDEFINE GET xGet[05] VAR cDir ID 9153 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[05] ) }
聽 聽REDEFINE GET xGet[06] VAR cCiu ID 9155 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[06] ) }
聽 聽REDEFINE GET xGet[07] VAR cGir ID 9154 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[07] ) }
聽 聽REDEFINE GET xGet[08] VAR cFon ID 9157 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[08] ) }
聽 聽REDEFINE GET xGet[09] VAR cFax ID 9158 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[09] ) }
聽 聽REDEFINE GET xGet[10] VAR Mail ID 聽 13 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[10] ) }
聽 聽REDEFINE GET xGet[13] VAR cCon ID 聽 15 聽PICTURE "@K" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OF xDlg WHEN {|| MyColorGet( xGet[13] ) }
聽 聽REDEFINE BUTTON ID 14 OF xDlg ACTION IIF(Grabar(cCod, cRut, cNom, cDir, cGir, cCiu, cSig, cFon, cFax, cDia, Mail, cAct, cAppend, cApe, cRot, cCon), xDlg:End(),NIL)
聽 聽REDEFINE BUTTON ID 16 OF xDlg ACTION xDlg:End()
ACTIVATE DIALOG xDlg CENTERED
oBrw:UpStable()
oBrw:Refresh()
oBrw:SetFocus()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION EstaClie( cCod )
LOCAL cVal := .F.,nReg, cInd := CLIE->(IndexOrd())
IF cCod <> 聽" 聽 聽 "
聽 聽SELECT CLIE ; nReg := RECNO() ; SET ORDER TO 1
聽 聽SEEK cCod
聽 聽IF !EOF() 聽 ; MsgAlert("Esta codificaci贸n ya se encuentra registrada...","Existe en la Tabla Maestra") ; cVal := .F.
聽 聽ELSE 聽 聽 聽 聽; cVal := .T.
聽 聽END 聽 聽 聽 聽 ; GO nReg
ELSE 聽 聽 聽 聽 聽 ; cVal := .T.
ENDIF
SELECT CLIE 聽 聽; SET ORDER TO cInd
RETURN cVal
//-------------------------------------------------------------------------
STATIC FUNCTION Grabar(cCod, cRut, cNom, cDir, cGir, cCiu, cSig, cFon, cFax, cDia, Mail, cAct, cAppend, cApe, cRot, cCon )
LOCAL mPro, nPos, mRut, mDig, nInd := CLIE->(IndexOrd())
nPos := RAT("-",cRut)
mRut := SUBSTR(cRut,1,( nPos - 1 ))
mDig := SUBSTR(cRut,( nPos + 1 ),1)
mRut := STUFF(mRut,1,0,STRTRAN(SPACE((9-nPos))," ","0"))+"-"+mDig
IF cCod <> SPACE(5)
聽 聽IF !cAppend 聽 聽 聽 聽 聽 聽 聽 聽 聽; SELECT CLIE
聽 聽 聽 IF RLOCK() 聽 聽 聽 聽 聽 聽 聽 聽; SET ORDER TO 0
聽 聽 聽 聽 聽CLIE->CODIGO 聽 := cCod ; CLIE->RUT 聽 聽 聽:= mRut ; CLIE->NOMBRE 聽 := cNom ; CLIE->DIRECCION := cDir
聽 聽 聽 聽 聽CLIE->CIUDAD 聽 := cCiu ; CLIE->GIRO 聽 聽 := cGir ; CLIE->SIGLA 聽 聽:= cSig ; CLIE->FONO 聽 聽 聽:= cFon
聽 聽 聽 聽 聽CLIE->FAX 聽 聽 聽:= cFax ; CLIE->DIAS 聽 聽 := cDia ; CLIE->CORREO 聽 := Mail ; CLIE->ACTIVO 聽 聽:= cAct
聽 聽 聽 聽 聽CLIE->APERTURA := cApe ; CLIE->ROTACION := cRot ; CLIE->CONTACTO := cCon
聽 聽 聽 聽 聽DBCOMMIT() 聽 聽 聽 聽 聽 聽 ; DBUNLOCK()
聽 聽 聽 END
聽 聽ELSE 聽 聽 聽 聽 聽 聽 聽 聽 ; SELECT CLIE
聽 聽 聽 IF RLOCK() 聽 聽 聽 聽; APPEND BLANK 聽 聽 聽 聽 聽 聽 聽 聽 聽; SET ORDER TO 0
聽 聽 聽 聽 聽CLIE->CODIGO 聽 := cCod ; CLIE->RUT 聽 聽 聽:= mRut ; CLIE->NOMBRE 聽 := cNom ; CLIE->DIRECCION := cDir
聽 聽 聽 聽 聽CLIE->CIUDAD 聽 := cCiu ; CLIE->GIRO 聽 聽 := cGir ; CLIE->SIGLA 聽 聽:= cSig ; CLIE->FONO 聽 聽 聽:= cFon
聽 聽 聽 聽 聽CLIE->FAX 聽 聽 聽:= cFax ; CLIE->DIAS 聽 聽 := cDia ; CLIE->CORREO 聽 := Mail ; CLIE->ACTIVO 聽 聽:= cAct
聽 聽 聽 聽 聽CLIE->APERTURA := cApe ; CLIE->ROTACION := cRot ; CLIE->CONTACTO := cCon
聽 聽 聽 聽 聽DBCOMMIT() 聽 聽 聽 聽 聽 聽 ; DBUNLOCK()
聽 聽 聽 END
聽 聽END
END
SELECT CLIE 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ; SET ORDER TO nInd
RETURN .T.
//-------------------------------------------------------------------------
STATIC FUNCTION Filtro(nOpt, oBrw)
IF nOpt < 27
聽 聽IF nOpt = 01 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "A" ; ENDIF
聽 聽IF nOpt = 02 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "B" ; ENDIF
聽 聽IF nOpt = 03 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "C" ; ENDIF
聽 聽IF nOpt = 04 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "D" ; ENDIF
聽 聽IF nOpt = 05 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "E" ; ENDIF
聽 聽IF nOpt = 06 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "F" ; ENDIF
聽 聽IF nOpt = 07 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "G" ; ENDIF
聽 聽IF nOpt = 08 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "H" ; ENDIF
聽 聽IF nOpt = 09 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "I" ; ENDIF
聽 聽IF nOpt = 10 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "J" ; ENDIF
聽 聽IF nOpt = 11 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "K" ; ENDIF
聽 聽IF nOpt = 12 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "L" ; ENDIF
聽 聽IF nOpt = 13 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "M" ; ENDIF
聽 聽IF nOpt = 14 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "N" ; ENDIF
聽 聽IF nOpt = 15 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "O" ; ENDIF
聽 聽IF nOpt = 16 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "P" ; ENDIF
聽 聽IF nOpt = 17 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "Q" ; ENDIF
聽 聽IF nOpt = 18 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "R" ; ENDIF
聽 聽IF nOpt = 19 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "S" ; ENDIF
聽 聽IF nOpt = 20 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "T" ; ENDIF
聽 聽IF nOpt = 21 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "U" ; ENDIF
聽 聽IF nOpt = 22 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "V" ; ENDIF
聽 聽IF nOpt = 23 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "W" ; ENDIF
聽 聽IF nOpt = 24 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "X" ; ENDIF
聽 聽IF nOpt = 25 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "Y" ; ENDIF
聽 聽IF nOpt = 26 ; SELECT CLIE ; INDEX ON CLIE->NOMBRE TAG 4 TO .\TEMP\PASO.CDX FOR SUBSTR(CLIE->NOMBRE,1,1) = "Z" ; ENDIF
聽 聽SET INDEX TO .\TEMP\PASO.CDX
ELSE
聽 聽SELECT CLIE ; SET ORDER TO 3
ENDIF
DBGOTOP()
oBrw:UpStable()
oBrw:Refresh(.T.)
oBrw:SetFocus()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION TrasladarExcel( oBrw )
LOCAL oFileXLS, lIni := .t., nFont1, nFont2, nFont3, nRow, nInd
nInd := CLIE->(IndexOrd())
IF CLIE->(RECCOUNT()) > 0
聽 聽IF MsgYesNo("Desea trasladar la tabla de Clientes a MS-Excel庐 ... ?","PREGUNTA")
聽 聽 聽CursorWait()
聽 聽 聽DEFINE XLS FONT nFont1 NAME "Tahoma" HEIGHT 16 BOLD
聽 聽 聽DEFINE XLS FONT nFont2 NAME "Tahoma" UNDERLINE BOLD
聽 聽 聽DEFINE XLS FONT nFont3 NAME "Tahoma" HEIGHT 8
聽 聽 聽XLS oFileXLS FILE .\XLS\CLientes.xls AUTOEXEC
聽 聽 聽 聽 聽XLS COL 1 聽WIDTH 1 聽 聽OF oFileXLS
聽 聽 聽 聽 聽XLS COL 2 聽WIDTH 14.0 OF oFileXLS
聽 聽 聽 聽 聽XLS COL 3 聽WIDTH 20.0 OF oFileXLS
聽 聽 聽 聽 聽XLS COL 4 聽WIDTH 50.0 OF oFileXLS
聽 聽 聽 聽 聽nRow := 2
聽 聽 聽 聽 聽@ nRow,2 XLS SAY " TABLA DE CLIENTES EN DESPACHO" FONT nfont1 OF oFileXLS
聽 聽 聽 聽 聽nRow += 2
聽 聽 聽 聽 聽@ nRow,2 聽XLS SAY "Codigo" 聽 聽 聽 聽 聽 聽FONT nfont3 OF oFileXLS
聽 聽 聽 聽 聽@ nRow,3 聽XLS SAY "Rut" 聽 聽 聽 聽 聽 聽 聽 FONT nfont3 OF oFileXLS
聽 聽 聽 聽 聽@ nRow,4 聽XLS SAY "Nombre" 聽 聽 聽 聽 聽 聽FONT nfont3 OF oFileXLS
聽 聽 聽 聽 聽nRow += 2
聽 聽 聽 聽 聽SELECT CLIE 聽 ; 聽SET ORDER TO 1 ; DBGOTOP()
聽 聽 聽 聽 聽DO WHILE .NOT.EOF()
聽 聽 聽 聽 聽 聽 @ nRow,2 聽XLS SAY 聽CLIE->CODIGO 聽 聽FONT nFont3 OF oFileXLS
聽 聽 聽 聽 聽 聽 @ nRow,3 聽XLS SAY 聽CLIE->RUT 聽 聽 聽 FONT nFont3 OF oFileXLS
聽 聽 聽 聽 聽 聽 @ nRow,4 聽XLS SAY 聽CLIE->NOMBRE 聽 聽FONT nFont3 OF oFileXLS
聽 聽 聽 聽 聽 聽 nRow++
聽 聽 聽 聽 聽 聽 SKIP
聽 聽 聽 聽 聽ENDDO
聽 聽 聽 聽 聽XLS PAGE BREAK AT nRow OF oFileXLS
聽 聽 聽 聽 聽SET XLS TO DISPLAY 聽OF oFileXLS
聽 聽 聽 聽 聽SET XLS TO PRINTER ;
聽 聽 聽 聽 聽 聽 聽HEADER "&ZFecha: &F&CTraspaso de Base DBF a Hoja XLS&DP谩gina N潞 &P" ;
聽 聽 聽 聽 聽 聽 聽FOOTER "Sistema Genesis PYME 2004 Ver.4.00" ;
聽 聽 聽 聽 聽 聽 聽TOP MARGIN 0.6 ;
聽 聽 聽 聽 聽 聽 聽BOTTOM MARGIN 0.8 ;
聽 聽 聽 聽 聽 聽 聽LEFT MARGIN 0 ;
聽 聽 聽 聽 聽 聽 聽OF oFileXLS
聽 聽 ENDXLS oFileXLS
聽 聽 CursorArrow()
聽 聽ENDIF
ELSE
聽 聽MsgStop("No hay Datos","ATENCION")
ENDIF
RELEASE oFileXLS, lIni, nFont1, nFont2, nFont3, nRow
SELECT CLIE ; SET ORDER TO nInd
DBGOTOP()
RETURN NIL
//-------------------------------------------------------------------------
STATIC FUNCTION BuscarClientes(oBrw, oTab)
LOCAL xLbx, oPun, xDlg, oGet, oMet, wRef, oChk
IF lBor = .F.
聽 聽SELECT PA04 聽; ZAP
ENDIF
wRef := SPACE(20)
oTab:nOption := 27
oTab:Refresh()
SELECT CLIE 聽 聽 聽; SET ORDER TO 3 ; DBGOTOP()
oBrw:Refresh()
聽 聽DEFINE CURSOR oPun RESOURCE "MANO"
聽 聽DEFINE DIALOG xDlg RESOURCE 129 TITLE "Busqueda de Clientes por Nombre"
聽 聽SELECT PA04
聽 聽REDEFINE BROWSE xLbx FIELDS PA04->PROV, PA04->NOMB HEADERS "Codigo","Nombre" ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ALIAS "PA04" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽COLOR 聽 nRGB( 聽0, 90,157) , 聽nRGB(255,255,237) 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SIZES 80,450 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ID 1000 CURSOR oPun OF xDlg GRID
聽 聽 聽 聽 聽 聽 xLbx:SetColor( { 3, 5, 6, 9, 11, 12, 15 }, { GetSysColor(7), CLR_YELLOW, {CLR_HBLUE, CLR_BLUE}, GetSysColor(7), CLR_GRAY , {CLR_WHITE, CLR_GRAY} , CLR_NBLUE } )
聽 聽 聽 聽 聽 聽 xLbx:nFreeze 聽 聽 聽 := 1
聽 聽 聽 聽 聽 聽 xLbx:bLDblClick 聽 聽:= { |nRow, nCol| (Buscar(PA04->PROV), xDlg:End()) }
聽 聽 聽 聽 聽 聽 xLbx:nHeightHead 聽 += 9
聽 聽 聽 聽 聽 聽 xLbx:nHeightCell 聽 += 2.5
聽 聽 聽 聽 聽 聽 xLbx:nLineStyle 聽 聽:= LINES_ALL
聽 聽 聽 聽 聽 聽 xLbx:bChange 聽 聽 聽 := { || xDlg:Update() }
聽 聽 聽 聽 聽 聽 xLbx:nClrText 聽 聽 聽:= { || IIF(PA04->ACTI = .F. ,nRGB(255,196,196) 聽, nRGB( 聽0, 90,157) ) }
聽 聽 聽 聽 聽 聽 xLbx:bKeyChar 聽 聽 聽:= {|nKey| iif(nKey==13,(Buscar(PA04->PROV), xDlg:End()) ,MsgBeep() )}
聽 聽 聽 REDEFINE GET 聽 聽 聽oGet 聽 VAR wRef 聽 ID 58 OF xDlg PICTURE "@K" UPDATE
聽 聽 聽 oMet := TProgress():Redefine( 57, xDlg )
聽 聽 聽 REDEFINE CHECKBOX oChk 聽 VAR lBor 聽 聽 聽 聽 聽 聽ID 61 OF xDlg
聽 聽REDEFINE BTNBMP ID 55 聽OF xDlg RESOURCE 1167 NOBORDER TOOLTIP " Traslada " 聽 聽 聽 ACTION (Buscar(PA04->PROV), xDlg:End())
聽 聽REDEFINE BTNBMP ID 56 聽OF xDlg RESOURCE 1148 NOBORDER TOOLTIP " Buscar " 聽 聽 聽 聽 ACTION Executa(oMet, wRef, xLbx )
聽 聽ACTIVATE DIALOG xDlg CENTER ON INIT IF(!SndPlaySound(".\SYSTEM\OPEN1.WAV",1),MsgBeep(),)
SELECT CLIE
oBrw:Reset()
oBrw:UpStable()
oBrw:Refresh()
oBrw:SetFocus()
RELEASE xDlg, oGet, xLbx, oPun
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Borrar( oBrw )
LOCAL nInd := CLIE->(IndexOrd())
IF CLIE->(RECCOUNT()) > 0
聽 聽IF MsgNoYes( "Sacar al Cliente de la Tabla de Principal ?","ELIMINACION DE REGISTRO")
聽 聽 聽 SELECT CLIE
聽 聽 聽 IF RLOCK()
聽 聽 聽 聽 聽SET ORDER TO 0
聽 聽 聽 聽 聽DBDELETE() 聽 聽; DBUNLOCK()
聽 聽 聽 聽 聽SET ORDER TO nInd
聽 聽 聽 ENDIF
聽 聽ENDIF
ELSE
聽 聽MsgStop("No hay Datos para efectuar esta operaci贸n...","ATENCION")
ENDIF
SELECT CLIE ; SET ORDER TO nInd
oBrw:Display()
oBrw:Refresh()
oBrw:SetFocus()
RETURN .T.
//-------------------------------------------------------------------------
STATIC FUNCTION Act_Tree( cValor, oBrw, cTit )
IF SUBSTR(cValor, 1, 1 ) 聽= "2"
聽 聽Reportes(cValor, cTit,"1")
ENDIF
oBrw:UpStable()
oBrw:Refresh()
oBrw:GotFocus()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Recor ( oSay )
cRecor := STRTRAN(STR(CLIE->(RECNO()),6,0)," ","0")+" de "+STRTRAN(STR(CLIE->(LASTREC()),6,0)," ","0")
oSay:Refresh()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Carga()
聽 聽oItem[1] := oTree:Add( "Informe Clientes" )
聽 聽 聽 聽 聽 聽 oItem[1]:Add( "<21> Activos " )
聽 聽 聽 聽 聽 聽 oItem[1]:Add( "<22> Inactivos ")
聽 聽 聽 聽 聽 聽 oItem[1]:Add( "<23> Todos ")
聽 聽 聽 聽 聽 聽 oItem[1]:Add( "<24> Vista Actual ")
// oTree:Expand()
Return NIL
//-------------------------------------------------------------------------
STATIC FUNCTION Reportes( cValor, cTit, yLbx, cPro, cNom )
LOCAL xDlg, lImp := .F., oChk, oRad, nRad := 1, oBit, oSay
聽 聽DEFINE DIALOG xDlg RESOURCE 107
聽 聽 聽 聽 聽 REDEFINE SAY 聽 聽 聽oSay VAR PrnGetName() ID 110 OF xDlg COLOR GetSysColor(7)
聽 聽 聽 聽 聽 REDEFINE CHECKBOX oChk VAR lImp ID 101 聽 聽 聽 聽 OF xDlg
聽 聽 聽 聽 聽 REDEFINE BITMAP 聽 oBit ID 196 聽 聽 聽 聽 聽 聽 聽 聽 聽OF xDlg RESOURCE 90
聽 聽 聽 聽 聽 REDEFINE RADIO 聽 聽oRad VAR nRad ID 106,102,103 OF xDlg
聽 聽 聽 聽 聽 oBit:lTransparent 聽:= .T.
聽 聽 聽 聽 聽 oRad:bChange 聽 聽 聽 := {|| IIF(oRad:nOption=3, ( lImp := .F., 聽 oChk:Disable() , oChk:Refresh() ), 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 IIF(oRad:nOption=2, ( lImp := .F., 聽 oChk:Disable() , oChk:Refresh() ), 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 IIF(oRad:nOption=1, ( oChk:Enable(), oChk:Refresh()),) 聽 聽 聽 聽 聽 聽 聽 ))}
聽 聽 聽 聽 聽 REDEFINE BUTTON ID 610 OF xDlg ACTION Informes( cValor, lImp, nRad, cTit )
聽 聽 聽 聽 聽 REDEFINE BUTTON ID 611 OF xDlg ACTION xDlg:End()
聽 聽ACTIVATE DIALOG xDlg CENTER
RETURN NIL
//-------------------------------------------------------------------------
STATIC FUNCTION Informes( cValor, lImp, nRad, cTit )
LOCAL 聽oRpt, oFon := {NIL,NIL,NIL}, oPrn, nInd
SET 3DLOOK ON
IF 聽 聽 lImp 聽 聽 ; PRINTER oPrn FROM USER PREVIEW
ELSE 聽 聽 聽 聽 聽 聽; PRINTER oPrn
ENDIF
IF 聽 聽 nRad = 1 ; PRINTER oPrn PREVIEW
ELSEIF nRad = 2 ; PRINTER oPrn
ELSE 聽 聽 聽 聽 聽 聽; PRINTER oPrn PREVIEW // ARCHIVO ASCII
ENDIF
oPrn:cDocument := "Registro de Clientes"
DEFINE FONT 聽oFon[1] NAME "Arial Narrow" SIZE 0,-7
DEFINE FONT 聽oFon[2] NAME "Arial Narrow" SIZE 0,-10 BOLD
DEFINE FONT 聽oFon[3] NAME "Arial Narrow" SIZE 0,-9 聽BOLD
nInd := CLIE->(IndexOrd())
IF cValor = "24" ; 聽SELECT CLIE 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ; DBGOTOP()
ELSE 聽 聽 聽 聽 聽 聽 ; 聽SELECT CLIE 聽; SET ORDER TO 3 聽 ; DBGOTOP()
ENDIF
聽 聽REPORT oRpt TITLE 聽" "," ","REGISTRO GENERAL DE CLIENTES","OPCION LISTADO "+cTit," "," " 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽HEADER 聽 聽 PARA->EMPRESA, PARA->DIRECCION 聽 聽;
聽 聽 聽 聽FOOTER ALLTRIM(PARA->SIGLA)+" "+PARA->Rut+" P谩gina Nro : "+STR(oRpt:nPage,3,0)+" 聽 聽( Fecha :"+DTOC(DATE())+" Hora : "+SUBSTR(TIME(),1,5)+" )" RIGHT ;
聽 聽 聽 聽FONT 聽 oFon[1],oFon[2],oFon[3] 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽TO DEVICE oPrn 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽CAPTION "Clientes"+SUBSTR(cTit,5)
聽 聽 聽 聽GROUP ON SUBSTR(CLIE->NOMBRE,1,1) ;
聽 聽 聽 聽HEADER "CLIENTES CON LETRA INICIAL "+SUBSTR(CLIE->NOMBRE,1,1) ;
聽 聽 聽 聽FOOTER "Total Clientes "+" ["+LTRIM(STR(oRpt:aGroups[1]:nCounter))+"]" FONT 3
聽 聽 聽 聽COLUMN TITLE "NOMBRE","CLIENTE" 聽 DATA CLIE->NOMBRE 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽FONT 1
聽 聽 聽 聽COLUMN TITLE "CODIGO","CLIENTE" 聽 DATA CLIE->CODIGO 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽FONT 1
聽 聽 聽 聽COLUMN TITLE "RUT" 聽 聽 聽 聽 聽 聽 聽 聽DATA CLIE->RUT 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 FONT 1
聽 聽 聽 聽COLUMN TITLE "TELEFONO" 聽 聽 聽 聽 聽 DATA CLIE->FONO 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽FONT 1
聽 聽 聽 聽COLUMN TITLE "CORREO" 聽 聽 聽 聽 聽 聽 DATA CLIE->CORREO 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽FONT 1
聽 聽 聽 聽COLUMN TITLE "CONTACTO" 聽 聽 聽 聽 聽 DATA CLIE->CONTACTO 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽FONT 1
聽 聽 聽 聽COLUMN TITLE " " 聽 聽 聽 聽 聽 聽 聽 聽 聽DATA 1 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 FONT 1 TOTAL
聽 聽 聽 聽COLUMN TITLE "EST" 聽 聽 聽 聽 聽 聽 聽 聽DATA IIF(CLIE->ACTIVO,"<A>","-I-") 聽 聽 聽 聽 聽 聽 聽 聽 FONT 1 SIZE 6 CENTER GRID 1 SHADOW
聽 聽END REPORT
聽 聽oRpt:lJoin 聽 聽 聽 聽 聽 := .T.
聽 聽oRpt:lAutoland 聽 聽 聽 := .T.
IF oRpt:lCreated
聽 聽 聽 聽oRpt:bPreInit 聽 聽 聽 聽 := {|| CLIE->(dbGotop()) }
聽 聽 聽 聽oRpt:lJoin 聽 聽 聽 聽 聽 聽:= .T.
聽 聽 聽 聽oRpt:lAutoland 聽 聽 聽 聽:= .T.
聽 聽 聽 聽oRpt:oTitle:aFont[3] 聽:= {|| 2 }
聽 聽 聽 聽oRpt:Stabilize()
END
IF cValor = "21" 聽 聽 ; ACTIVATE REPORT oRpt ON ENDGROUP oRpt:NewLine() FOR CLIE->ACTIVO = .T.
ELSEIF cValor = "22" ; ACTIVATE REPORT oRpt ON ENDGROUP oRpt:NewLine() FOR CLIE->ACTIVO = .F.
ELSE 聽 聽 聽 聽 聽 聽 聽 聽 ; ACTIVATE REPORT oRpt ON STARTGROUP oRpt:NewLine()
ENDIF
SELECT CLIE ; SET ORDER TO nInd ; DBGOTOP()
oFon[1]:End()
oFon[2]:End()
oFon[3]:End()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Executa( oMet, wRef, xLbx )
LOCAL xRef, nInd
nInd := CLIE->(IndexOrd())
IF lBor = .F.
聽 聽SELECT PA04 聽; ZAP
ENDIF
xRef := ALLTRIM(wRef)
IF EMPTY(xRef)
聽 聽xRef := " "
ENDIF
nIni := 0
SELECT CLIE 聽; SET ORDER TO 3 聽 ; DBGOTOP()
oMet:SetRange( 0, CLIE->(RecCount()) )
DO WHILE !EOF()
聽 聽IF AT(UPPER(xRef),CLIE->NOMBRE) > 0
聽 聽 聽 SELECT PA04 聽 ; 聽DBAPPEND()
聽 聽 聽 PA04->PROV 聽 聽:= CLIE->CODIGO 聽 ; 聽PA04->NOMB 聽 聽:= CLIE->NOMBRE
聽 聽 聽 PA04->ACTI 聽 聽:= CLIE->ACTIVO
聽 聽ENDIF
聽 聽SELECT CLIE 聽 聽 聽; DBSKIP() 聽; oMet:SetPos( nIni++ )
ENDDO
SELECT CLIE 聽 聽 聽 聽 ; SET ORDER TO nInd
SELECT PA04 聽 聽 聽 聽 ; DBGOTOP()
oMet:SetPos(0)
xLbx:UpStable()
xLbx:Refresh()
xLbx:SetFocus()
RETURN Nil
//-------------------------------------------------------------------------
STATIC FUNCTION Buscar(cCod)
SELECT CLIE 聽 聽 聽 聽 ; SET ORDER TO 1
SEEK cCod
RETURN Nil
//-------------------------------------------------------------------------
este es un trozo de codigo de la pantalla principal, es un boton de entrada de un dialogo, una vez validada la contrase帽a de usuario, y en donde abro todas las tablas que utilizo en el sistema