FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ejemplo de un mantenimiento con vtna no modal
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Ejemplo de un mantenimiento con vtna no modal
Posted: Tue Oct 25, 2016 06:55 PM

Gente:

Podrian ayudarme con dos cositas.

1.Proporcionar un ejemplo de un browse que haga un mantenimiento(ABC) sobre una ventana de dialogo no modal

  1. Invocar al browse anterior desde un get (me interesa la parte de traer al get los datos de la fila seleccionada en el browse)

Si el browse estuviese montado sobre una ventana modal si puedo capturar los datos, pero cuando es una ventana no modal no logro
traer los datos al get

Mil Gracias

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
Re: Ejemplo de un mantenimiento con vtna no modal
Posted: Tue Oct 25, 2016 09:36 PM
Buen d铆a:

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.

Code (fw): Select all Collapse
//------------------------------------------------------------------------
//---- 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

Code (fw): Select all Collapse
聽 聽DEFINE DIALOG oDlg RESOURCE 200
聽 聽 聽 REDEFINE BITMAP Bit2 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ID 14 OF oDlg RESOURCE 10
聽 聽 聽 REDEFINE BITMAP oBit 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ID 12 OF oDlg RESOURCE 55

聽 聽 聽 REDEFINE GET oPas VAR 聽cPas ID 102 PICTURE "XXXXXXXX" 聽 聽 OF oDlg VALID Val_Pass(cPas)

聽 聽 聽 oPas:bGotFocus 聽:= {|| oPas:SetColor(nRGB( 聽0, 聽0, 聽0),nRGB(203,222,254)), oPas:Refresh() }
聽 聽 聽 oPas:bLostFocus := {|| oPas:SetColor(nRGB(192,192,192),nRGB(255,255,255)), oPas:Refresh() }

聽 聽 聽 oPas:cToolTip 聽 := " Aqu铆 se ingresa la Clave personal "+CRLF+ ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽" 聽asignada por el Administrador... "

聽 聽 聽 oMet := TProgress():Redefine( 13, oDlg )

聽 聽 聽 REDEFINE BUTTON ID 103 OF oDlg 聽 聽 ACTION ( Respuesta := AbrirTablas( oMet, cUni, oMsg, cAbre, Data1, Data2 ), oDlg:End() ) // WHEN EVAL({|| cPas <> SPACE(08) })

聽 聽ACTIVATE DIALOG oDlg CENTER ON PAINT oMsg := TMsgBar():New( oDlg, " ALM Systems庐 1998-2005 ",.F.,.F.,.T.,.F.,GetSysColor(7),,oFont,.F. )


y aqui la funcion en donde abro las tablas

Code (fw): Select all Collapse
FUNCTION AbrirTablas( oMet, cUni, oMsg, cAbre, Data1, Data2 )
LOCAL Valor := .T.

nIni := 0

oMet:SetRange( 0, 34 )

聽 聽oMsg:SetMsg( "Archivo : Clientes.dbf")
聽 聽USE &(cUni+"\FRUSUR.05\BASES\CLIENTES.DBF") 聽 ALIAS CLIE SHARED NEW
聽 聽IF !FILE(cUni+"\FRUSUR.05\INDICES\CLIENTES.CDX")
聽 聽 聽 INDEX ON CLIE->CODIGO 聽 聽 聽 聽 聽 聽 聽 TAG 1 TO &(cUni+"\FRUSUR.05\INDICES\CLIENTES.CDX")
聽 聽 聽 INDEX ON CLIE->RUT 聽 聽 聽 聽 聽 聽 聽 聽 聽TAG 2 TO &(cUni+"\FRUSUR.05\INDICES\CLIENTES.CDX")
聽 聽 聽 INDEX ON CLIE->NOMBRE 聽 聽 聽 聽 聽 聽 聽 TAG 3 TO &(cUni+"\FRUSUR.05\INDICES\CLIENTES.CDX")
聽 聽ENDIF 聽 聽 聽 ; SET INDEX TO &(cUni+"\FRUSUR.05\INDICES\CLIENTES.CDX")
聽 聽oMet:SetPos( nIni++ )

聽 聽oMsg:SetMsg( "Archivo : Comprado.dbf")
聽 聽USE &(cUni+"\FRUSUR.05\BASES\COMPRADO.DBF") 聽 ALIAS COMP SHARED NEW
聽 聽IF !FILE(cUni+"\FRUSUR.05\INDICES\COMPRADO.CDX")
聽 聽 聽 INDEX ON COMP->CODIGO 聽 聽 聽 聽 聽 聽 聽 TAG 1 TO &(cUni+"\FRUSUR.05\INDICES\COMPRADO.CDX")
聽 聽 聽 INDEX ON COMP->RUT 聽 聽 聽 聽 聽 聽 聽 聽 聽TAG 2 TO &(cUni+"\FRUSUR.05\INDICES\COMPRADO.CDX")
聽 聽 聽 INDEX ON COMP->NOMBRE 聽 聽 聽 聽 聽 聽 聽 TAG 3 TO &(cUni+"\FRUSUR.05\INDICES\COMPRADO.CDX")
聽 聽ENDIF 聽 聽 聽 ; SET INDEX TO &(cUni+"\FRUSUR.05\INDICES\COMPRADO.CDX")
聽 oMet:SetPos( nIni++ )

聽 聽oMsg:SetMsg( "Archivo : Frutas.dbf")
聽 聽USE &(cUni+"\FRUSUR.05\BASES\FRUTAS.DBF") 聽 聽ALIAS FRUT SHARED NEW
聽 聽IF !FILE(cUni+"\FRUSUR.05\INDICES\FRUTAS.CDX")
聽 聽 聽 INDEX ON FRUT->ESPECIE+FRUT->COD_RA TAG 1 TO &(cUni+"\FRUSUR.05\INDICES\FRUTAS.CDX")
聽 聽 聽 INDEX ON FRUT->NOMBRE 聽 聽 聽 聽 聽 聽 聽 TAG 2 TO &(cUni+"\FRUSUR.05\INDICES\FRUTAS.CDX")
聽 聽 聽 INDEX ON FRUT->COD_RA 聽 聽 聽 聽 聽 聽 聽 TAG 3 TO &(cUni+"\FRUSUR.05\INDICES\FRUTAS.CDX")
聽 聽ENDIF 聽 聽 聽 ; SET INDEX TO &(cUni+"\FRUSUR.05\INDICES\FRUTAS.CDX")
聽 聽oMet:SetPos( nIni++ )

....
....

RETURN Valor


una imagen por si te sirve




Espero que te sirva

Saludos
SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Ejemplo de un mantenimiento con vtna no modal
Posted: Tue Oct 25, 2016 10:11 PM

Excelente maestro! voy a chequear tu codigo y te aviso

Gracias

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Ejemplo de un mantenimiento con vtna no modal
Posted: Fri Oct 28, 2016 06:21 PM
Armando y foro
lo que quiero hacer es poner un get y si el usuario no sabe que codigo de articulo escribir entonces da un Enter en blanco y se abre un cuadro de dialogo NO MODAL con un browse para que el usuario seleccione su codigo con un Enter y se cierre el browse y regrese
al get, pero se carga la ventana de la ayuda y el control se regresa al get sin haber esa dependencia que si existe en el dialogo MODAL

Defino el browse (ayuda)
Code (fw): Select all Collapse
FUNCTION Brwartic( nTipo, labre, aValRet)
聽 聽LOCAL aRect, oBtn
聽 聽LOCAL cBmp1
聽 聽LOCAL cClase, cTipo, nOrd
聽 聽Local lSalir 聽 := .F.

聽 聽DEFAULT nTipo := 1
聽 聽DEFAULT lAbre := .T.

聽 聽SELECT ARTICULO
聽 聽ARTICULO->(DBGotop())

聽 聽cBMP1 := LoadBitMap(GetResources(), "MARCA" )

聽 聽//Crea Ventana para el Browse
聽 聽DEFINE DIALOG oDlg RESOURCE "BRW_ARTICULOSA" TITLE "Maestro de Articulos" 

聽 聽REDEFINE XBROWSE oBrw 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 FIELDS ARTICULO->Cod 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 ,ARTICULO->DesG 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 ,Transform(ARTICULO->Pv, "999.9999") 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 SIZES 70, 250,120, 90 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 HEADERS "Codigo" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 ,"Descripcion" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 ,"Precio S/." 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 COLOR 0, RGB(192,210,192) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 ID 5000 OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 UPDATE

聽 聽 聽 oBrw:SetRdd()

聽 聽 聽 ...
聽 聽 聽 ...
聽 聽 聽 REDEFINE BUTTON oBtn ID ID_ENTER OF oDlg 聽;
聽 聽 聽 聽 聽ACTION ( oDbfArt:Load(), aValRet:={oDbfArt:Cod, oDbfArt:DESG, oDbfArt:uM},oDlg:End() ) CANCEL
聽 聽 聽 聽 聽oBtn:cTooltip := "Selecciona un registro" 聽 聽

聽 聽ACTIVATE DIALOG oDlg CENTERED NOWAIT 

RETURN ( eval({|| msgalert("salio de articulos"), aValRet 聽 }) )


Defino un cuadro de dialogo
Code (fw): Select all Collapse
....
....
聽 聽 聽 聽DEFINE DIALOG oDlgItem RESOURCE "DLG_item_guia" TITLE "Item" 

聽 聽 聽 聽REDEFINE GET oGet VAR carticu ID 101 OF oDlgItem 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 PICTURE "@!" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽; 聽 聽 聽
聽 聽 聽 聽 聽 聽 聽 聽 VALID ValArt(@cArticu, oDlgItem) UPDATE 聽 聽 聽 聽 聽 聽//despues de hacer el valid me deberia estar cargado el valor para la variable carticu
聽 聽 聽 聽 聽 聽 聽 聽 IIF( lmodo, oGet:Enable(), oGet:Disable() )

defino la funcion ValArt()
Code (fw): Select all Collapse
static FUNCTION ValArt(cCod, oDlg)
聽 Local cDesCta, nRecAc, nRecDa, aDatos:={}
聽 local lok
聽 聽IF Empty(cCod)

聽 聽 聽 nRecAc:=ARTICULO->(IndexOrd())
聽 聽 聽 aDatos:=BRWARTIC(2,.F., @aDatos) 聽
聽 聽 聽 IF aDatos[1] <> Nil 聽 聽 聽 聽 聽 聽 聽 聽 聽//esta linea de codigo se ejecuta al abrir la ayuda y no despues de que se muestra la ayuda 
聽 聽 聽 聽 聽cCod:=aDatos[1] 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 
聽 聽 聽 聽 聽cDescri := aDatos[2]
聽 聽 聽 ENDIF
聽 聽 聽 Articulo->(DBSetOrder(nRecAc))
聽 聽EndIf

RETURN ( lok )


Una imagen vale mas que mil palabras reza el dicho

http://subefotos.com/ver/?c68b9d450b4bc ... 9a849o.jpg
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ejemplo de un mantenimiento con vtna no modal
Posted: Fri Oct 28, 2016 07:53 PM

El tema es que si la ventana de ayuda de los articulos es no modal, el control pasa por la ventana y sale (no para). Creo yo en mi humilde opinion que no tiene sentido que esa ventana de ayuda de articulos sea no modal, porque si entro ahi es porque no sabia el codigo y quiere buscarlo.
En mi caso, y creo que es lo mismo que te compartio Armando, cuando entra al dialogo de mostrar los datos del cliente, o en tu caso la ventana de ayuda, creo que el dialogo debe ser modal.

Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Ejemplo de un mantenimiento con vtna no modal
Posted: Wed Nov 02, 2016 06:17 AM

Cmsoft gracias por responder y a convencerme que un sistema los browses no deben abrirse siempre en nomodal, segun sea el caso se abriran
en modal o en no modal.... si se desea que la ayuda devuelva algun dato despues de mostrarse sera modal pero si es por simple consulta
茅ste sera nomodal

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql

Continue the discussion