TDPEDIT CLASS

/*
// Clase TDpEdit
// Edición de Formulario para: Incluir, Consultar, Modificar y Eliminar Registros
// 01/12/2002
*/

CLASS DPEDIT

  DATA lAutomatic AS LOGICAL INIT .F.
  DATA lSalir                           // Condicion de Salida o Cerrar el Control
DATA lChange                        // Indica si Hubo Algún Cambio en el Formulario
  DATA lMultiple                         // Indica que la misma Variable tiene multiples ejecuciones
  DATA lAutoInclude                    // Indica si incluye de manera automática
  DATA lCancel                           // Cancelación Solicitada Afirmativa
  DATA lDlg                              // Indica si es MDI/DLG Controles
DATA lDesign                          // Si ha sido Diseñado o No
  DATA lDialog INIT .F.           // Si el Formulario no es MDI solo Dialogo
  DATA lEdit
  DATA lFirst INIT .F.
  DATA lSaveHead                         // Indica que el Encabezado ya fué Grabado
  DATA lMdi
  DATA lActivated
  DATA lFound
  DATA lMsgError                         // Evita los Mensajes de Error SCRIPT
  DATA lErrorSave INIT oDp:lErrorSave // Muestra el Error Cuando APLICA COMMIT
  DATA lIsDef
  DATA lEscClose                         // Cerrar con ESC
  DATA lMsgBar INIT .F.
  DATA lWnd INIT .T.           // Con esta Clase no se requiere Ventana
  DATA lPaste INIT .T. // Activa la Opcion Pegar cuando se presiona Buscar
  DATA lSetDef INIT .T.
  DATA lSavedDsn INIT .F.
  DATA lBrwCopy INIT .F. // Copia lista de los Browse
  DATA lClose INIT .F. // JN 06/11/2016
  DATA lSqlBegin INIT .T. // Caso de DPXBASE, Guarda en DpXbase y no en el formulario DPEDIT
  DATA lCreaRegIntRef INIT .T.
DATA lAutoClose INIT .F. // indica cerrar el formulario cuando falla scrollget por la falta de campos
DATA lIntRef INIT .T. // Valida la Integridad Referencial
DATA lMdiBar INIT .F. // En caso .T. La Barra de botones sera ampliada
DATA lPrint INIT .T. // Boton es Imprimir
DATA lFileEdt INIT .F. // Requiere Archivo EDT, Cuando se crea el formulario podra indicarse la condicion .T.
// Funciones para ScrollGet
DATA lVScroll INIT .F.
DATA lHScroll INIT .F.
// Restringir estos Botones
DATA lInc INIT .T.
DATA lCon INIT .T.
DATA lMod INIT .T.
DATA lEli INIT .T.
DATA lLock INIT .F.
DATA lEof INIT .F.
DATA lBof INIT .F.
// MSGRUNVIEW
DATA lMsgBar INIT .F.
DATA lStop_ INIT .F.
DATA lReset INIT .F.
DATA lStop INIT .F.

  DATA aDataKey AS ARRAY INIT {}
  DATA aVars AS ARRAY INIT NIL
    DATA aIncremental // Campos que se AutoIncrementan
  DATA aSetKey AS ARRAY INIT {}
  DATA aScrollSize INIT {}
  DATA aSayGroup INIT ARRAY(250)
    DATA aBtnActive // Permisos en Botones
  DATA aRecord // Copia del Registro que esta en Edición
  DATA aCopyEdit // Hace una Copia de las Variables declaradas
DATA aScrollGets // Lista de los Scrolls Gets
DATA aButtons // Botones de Opciones, tipo Documento
    DATA aFind     // Controles Find
  DATA aControls // Controles
   DATA aLevel     // Etiqueta de los Campos
    DATA aFieldsTable
    DATA aBrwFocus INIT {} // Copia de los Browse Copiados en BlostFocus
  DATA aTablesH INIT {} // Requerido DPCLASS para Generar HTML

    // Para Buscar y Consultar
DATA aValid // Validación de los Controles (Buscar y Consultar)
  DATA aWhen // Condicion de los Controles
  DATA aItems // Itemns de los ComboBox
  DATA aOpcButtons // Botones de las Opciones
  DATA aEditButtons // Botones de la Edición
  DATA aDpEdit // Formularios Relacionados
  DATA aTableLink // Tablas Enlazadas
  DATA aMemo // Datos del Memo
    DATA aRepeatget
    DATA aDataTable
    DATA aMsgItem INIT {}

  DATA cName AS CHARACTER INIT "" READONLY
  DATA cFile // Nombre del Archivo de Controls
  DATA cTitle // Titulo de la Ventana
  DATA cVarPublic // Nombre de la Instancia
  DATA cFileEdit // Nombre del Archivo de Controles
  DATA cScript // Nombre del Programa Script que se Ejecuta
  DATA cTable // Nombre de la Tabla
  DATA cCancel // Function que se ejecuta para Cancelar
  DATA cPreSave // PreGrabar
  DATA cSave // PostGrabar
  DATA cView // Programa Consultar
  DATA cLoad // Programa de Carga de Datos
  DATA cAfterLoad INIT "AFTERLOAD" // ejecutar luego del Load
  DATA cWhere // Condición del Campo que se Modifica
  DATA cDataKey // Clave del registro
  DATA cPrint // Programa que Ejecuta la Impresión
  DATA cDelete // Función que Ejecuta Eliminar
  DATA cList // Programa que hace el ListBox
  DATA cListWhere // Where para la Lista de Trabajadores
  DATA cFind // Programa Buscar FRMFIND
  DATA cListTitle // Titulo para Browse
  DATA cSqlIni // Query Inicial
  DATA cSingular // Nombre Singular
    DATA cFileChm
    DATA cTopic
  DATA cFileBmp // Bmp para el Brush
    DATA cFindNoEnter
  DATA cScope INIT "" // Filtro
  DATA cScopeF INIT ""
  DATA cIdFrm INIT ""
  DATA cFieldFile INIT "" // Campo Digitalizacion de Documentos VINCULO con DPFILEEMP
  DATA cFileRtf INIT "" // Archivo de Ayuda RTF
  DATA cFileRtfOld INIT oDp:cHelpRtf
  DATA cNombre INIT ""
    DATA cOrderBy,cPrimary,cDesde,cHasta,cActual
  DATA cFieldAud INIT "" // Pistas de Auditoria
  DATA cMsgBar INIT "" // Mensaje de Barra Inferior
  DATA cVarName INIT "" // Necesario BRRUNNEW/DPXBASE
  DATA cOnClose INIT "ONCLOSE"
  DATA cTextGroup INIT ""
  DATA cBtnList INIT "xbrowse.bmp"
  DATA cScrFind INIT "DOCFIND"
    DATA cScopeFind,cSqlFin // Filtro para Buscar
  DATA cText INIT ""

  DATA nMode // Tipo de Formulario =0 Simple
  DATA nMaxButtons // Cantidad de Botones, Edicion Linea Superior
  DATA nPos AS NUMERIC INIT 0 READONLY // Posicion de la ultima Variable
  DATA nOpction // Número de Opción de Ejecución
  DATA nOrder AS NUMERIC INIT 1 // Orden del Encabezado
  DATA nClrPane // Color del Dialogo
  DATA nFileMain AS NUMERIC INIT 0 // Registro con DPFILEEMP
  DATA nBtnWidth INIT 40
  DATA nBtnHeight INIT 40
  DATA nBarHeight INIT 40+5
  DATA nClrPane1 INIT 0
  DATA nClrPane2 INIT 0

  DATA oDlg // Dialogo de Controles
  DATA oWnd // Ventana MDI
  DATA oScript // Programa DpXbase que se Ejecuta con la Clase
  DATA oScroll //
  DATA oWhere // Objeto para Asignar los Filtros Mediante Otro Formulario MDI
  DATA oBrw // Browse de Navegación
  DATA oTable // Tabla de Datos
  DATA oToolMsg // ToolTip
  DATA oBody // Cuerpo de Documento
  DATA oTmr // Controlador
  DATA oCtrDoc // Controlador de Inclusión de Documentos
  DATA oIntRef // Control de Integridad Referencial
  DATA oEditMemo // Edición de Campo Memo
  DATA oEditScr // Edición SCROLL para Campos Adicionales
  DATA oFocus // Foco del Get
  DATA oControl // Foco perdido con Lost/Got Focus
    DATA oBrush
    DATA oFrmLnk
  DATA oDb // Gestor de la Base de datos
    DATA oDpLbx
    DATA oSayRecord // Muestra en la Super de la Barra la Posición
    DATA oAdjustWnd // Ajusta el Control según
  DATA oBar // Contiene Controles
  DATA oMeter INIT NIL
  DATA oBtnStop INIT NIL
  DATA oMeter INIT NIL

DATA nNumLbx // Número del ListBox Que llamó al Formulario
DATA nNumEdit
DATA nRecno INIT 0
DATA nRecnoOld INIT 0 // Registro Anterior
DATA nRecCount INIT 0
DATA nData INIT 0
DATA nRadio INIT 1
DATA nRecord INIT 0

    DATA bEnd
  DATA bValid // Validación de Salida
  DATA bSet // Actualiza Desde Otro Formulario
  DATA bInit // Ejecución Cuando se Inicia el Dialogo
    DATA bKeyF10
  DATA bPostRun init {||NIL}
    DATA bLostFocus // JN 06/11/2016
  DATA bGotFocus // Recuperación de Focus

    DATA uValue1,uValue2,uValue2,uValue3,uValue4,uValue5

    METHOD NEW(cTitle, cFile, cVarPublic, lWindows, lDialog, oWnd, lModal, lOnlyMdi )
    METHOD End()

    METHOD NOTIFY() INLINE NIL

    METHOD Add( cName, xValue )
    METHOD Del( cName )
    METHOD Get( cName )
   METHOD Set( cName, xValue )
    METHOD VarPut(cName,xValue)
    METHOD NewFilter(nOption,cOption) INLINE EJECUTAR("BRWNEWFILTER",Self,nOption,cOption)

    METHOD SetBotBar()

    METHOD SETMSGBAR_ON()
    METHOD SetMsgItem(cText,nlen,bAction) INLINE AADD(::aMsgItem,{cText,nLen,bAction,NIL}),::lMsgBar:=.T. // JN 12/07/2018
    METHOD SetMsgItemText(nId,cText) INLINE IF(nId>0 .AND. nId<=LEN(::aMsgItem), (::aMsgItem[nId,4]:SetText(CTOO(cText,"C")),::aMsgItem[nId,4]:Refresh()),NIL)
    METHOD SetMsg(cMsgBar) INLINE (::cMsgBar:=cMsgBar,;
                                  IF(ValType(::oWnd)="O",(::oWnd:oMsgBar:SetMsg(::cMsgBar),::oWnd:oMsgBar:Refresh()),NIL))

    METHOD GetPos( cName )
    METHOD Release()

    METHOD BtnSetMnu(cBtn,cOption,cFunction,cFileBmp,cPrgSubmenu) INLINE AADD(::aBtnMnu,{cBtn,cOption,cFunction,cFileBmp,cPrgSubmenu}) // Opciones para ser Incluidas en los Botones

    METHOD SetScroll(n1,n2,n3,n4) INLINE (::lVScroll:=.T.,;
::lHScroll:=.T.,;
::lMsgBar :=.F.,;
::aScrollSize:={n1,n2,n3,n4})

    METHOD GetWhere(cPrimary)
  METHOD RECCOUNT(lIni)
    METHOD IsDef(cName) // INLINE (::lIsDef:=.t.,oSend(Self,cName)!=NIL)
    METHOD Load( nOption, nSkip)
    METHOD CheckBtn()
    METHOD SetColorBar(nClrText,nClrPane) // Color para las Barras
    METHOD CreateVars( oObj )
    METHOD SetTimer( bAction, nInterval )
    METHOD SetTable( oTable, lCreateWindow, oDb )
    METHOD SetEdit(lOn) // Establece Condicion de Edición
    METHOD GetValue(cField) // GetValue()
    METHOD ViewTable(cTable,cField,cWhere) // Indica la cantidad de tablas asociadas
    METHOD LbxRefresh()
    METHOD BuildLink()                    // Visualiza las Tablas Asociadas
    METHOD Activate( bInit,bValid )
    METHOD Incremental( cVarName, lZero, cSql, cWhere )
    METHOD LinkTable(cTable,cSql)
    METHOD CreateWindow()
    METHOD Windows() INLINE CreateWindow()
    METHOD ValUnique( cKey,cField,cMsg,cWhere ) //jn
    METHOD LostFocus()
    METHOD GotFocus()
    METHOD RunBtn(nPos,nValid)
    METHOD Save() //jn
    METHOD Cancel(lAsk,lFromValid) //jn
    METHOD DestroyMsg()
    METHOD GetWhereMax()
    METHOD MOVETO(oControl)INLINE EJECUTAR("FRMMOVE",SELF,oControl) // Mueve el Control hacia la posición del Control
    METHOD Delete()INLINE ::RunScr(::cDelete)
    METHOD RunScript(cFunction,uPar1,uPar2)
    METHOD DelRecord(lIntRef) // Borra con la Integridad Ref
    METHOD PutVar(cVarName,nValue,oSay) // Asigna Valir y Refresca Objeto
    METHOD SetMemo(cField,cTitle,nTop,nLeft,nWidth,nHeight)
    METHOD SetBmp(cField,cTitle,nTop,nLeft,nWidth,nHeight)
    METHOD SetAdjuntos(cField,cTitle)
    METHOD SetIcon(cFile)
    METHOD RepeatGet(aFiedls,aExcluye)
    METHOD Find()
    METHOD CancelFind()
    METHOD ChkIntRef()
    METHOD RunKey(nKey) // Opciones I,C,M del Formulario
    METHOD SetKey(nKey,bAction)
    METHOD ValidDlg()
    METHOD ValidWnd(bValid)
    METHOD Prepare()
    METHOD Paste()
    METHOD Inspect() INLINE EJECUTAR("INSPECT",Self)
    METHOD SetScript(cScript)
    METHOD AdjustWnd(oControl) INLINE ::oAdjustWnd:=oControl
    METHOD ONCLOSE()
    METHOD DEFBTN()

    METHOD UpdateFromTable()

    METHOD ApEditMemo() INLINE (CursorWait(),;
                                KillGetCol(::oBody),;
                                ::oEditMemo:=_DPMEMOEDIT(Self,::oEditMemo),;
                                ::LinkEdit(::oEditMemo))

    METHOD LockTable( ) INLINE (IIF(!::lLock,::oTable:LockTable(),NIL),;
                                    ::lLock:=.T.)

    METHOD UnLockTable( ) INLINE (IIF(::lLock,::oTable:UnLockTable(),NIL),;
                                    ::lLock:=.F.)

    METHOD EditMemo() INLINE ::SetMemo()

    METHOD IsSaveHead(lUpdate,cPrimary)
    METHOD RunScr(cProgram)
    METHOD SetDefault()
    METHOD SetDefValue() INLINE EJECUTAR("FRMSETDEFAULT",SELF) // JN 8/12/2018, Asigna los Valores por Defecto
    METHOD ONINIT()

    METHOD List(cWhere,cTitle)
    METHOD RUNPRINT()
    METHOD ScrollGet(cTable,cFileScg,cExcluye,oWnd,nType,oFont,nStyle)
    METHOD ScrollField(cTitle) // Campos AdicionaleS
    METHOD LinkEdit(oDpEdit) INLINE (AADD(::aDpEdit,OCLONE(oDpEdit))) // JN 28/02/2014 ,DpFocus(oDpEdit:oDlg)) // Relación Entre Formularios
    METHOD KillEdit(oDpEdit)
    METHOD OpcButtons(cOption,cBmp,cRun,cWhen,nKey,cType) INLINE;
                                        nKey:=IIF( nKey=NIL, 0 , nKey ),;
                                      AADD(::aOpcButtons ,{cBmp,GetFromVar(cOption),cRun,cWhen,nKey,cType})

    METHOD CloseAllEdit()

    METHOD EditButtons(cOption,cBmp,cRun,cWhen,nKey) INLINE;
                                             nKey:=IIF( nKey=NIL , 0 , nKey ),;
                                             AADD(::aEditButtons,{cBmp,cOption,cRun,cWhen,nKey})

    METHOD SetMsg(cMsg) INLINE IIF( ::lMsgBar , (::oDlg:oMsgBar:SetMsg(cMsg),::oDlg:oMsgBar:Refresh()) , NIL)

    METHOD SetBtnBar(nAlto,nAncho,oBar,nCol)

    METHOD Close()

    METHOD ShowMsg(cToolTip,oControl,nClrPane,nClrText) // JN CLASS TWindow
    METHOD MensajeErr(cToolTip,oControl,nRow,nCol) INLINE ::ShowMsg(cToolTip,oControl,nRow,nCol)
    METHOD Level(cField)
    METHOD SetLevel(cField,cText)

    METHOD FRMTITLE(cTitle)
    METHOD FRMCENTRAR()
    METHOD FRMSETTOTAL(nCant)
    METHOD FRMSET(n,lSay,bBlq)
    METHOD FRMTEXT(cText,bBlq)
    METHOD FRMSAY(cText,bBlq)
    METHOD FRMHIDE()
    METHOD FRMSHOW()
    METHOD FRMCLOSE()

    METHOD HandleEvent( nMsg, nWParam, nLParam ) EXTERN ;
WndHandleEvent( Self, nMsg, nWParam, nLParam )

    METHOD COMMAND(nValue) INLINE 1=1

ERROR HANDLER OnError( cMsg,nPar1,nPar2,nPar3,nPar4,nPar5,nPar6,nPar7,nPar8,nPar9,nPar10,nPar11,nPar12,nError )

ENDCLASS
//EOF