Favor Ayuda

Post Reply
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Favor Ayuda

Post by remtec »

Amigos

Muy buen dia.

Necesito un favor muy grande, requiero en forma urgente un Programa Menu, que me permita controlar Usuarios, es decir que use una DBF con los usuarios y que en el Menu, solo se muestren las opciones para las cuales tiene _ usuario.

Les pido disculpas, pero no cuento con los conocimientos, para realizar este tipo de programa .

Agradeciendo su ayuda,

Les saluda muy atte.

Antonio.
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Favor Ayuda

Post by horacio »

Usa oWnd : SetMenu( MenuUsuario() ) de acuerdo a los permisos del usuario.

Saludos
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Favor Ayuda

Post by cnavarro »

Qué versión de Fwh y Harbour o xHarbour utiliza ?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Favor Ayuda

Post by remtec »

Hola

La version de Fwh 15.02 y Xharbour, me tiene complicado porque vengo de una versión muy antigua y clipper

Muchas gracias por tu atención.

Saludos
Antonio.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Favor Ayuda

Post by remtec »

Perdón, la versión de Fwh es 15.02 y Harbour.
Saludos

Antonio
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Favor Ayuda

Post by FranciscoA »

Hola.
Hechale un vistazo a este código parcial. Espero te pueda servir de guía. Puedes adaptarlo a tus necesidades.

Code: Select all

static aAMBck,aAMBcd,aAMBfa,aAMBrc,aAMBmi, aModulosAcc //perfil usuario perfilusu.prg

Function Main()

IF !lAutorizado()   
   SET RESOURCES TO
   DBCLOSEALL()
   RETURN NIL
ENDIF
***
***
RETURN NIL




//PARA EL MENU

    if cPermiso="T"
      MENUITEM oItem6 PROMPT  "&Administrador"
         MENU
         MENUITEM "Perfil de Usuarios"  ACTION Usuarios()
         ...
         ...
         ENDMENU
      ENDMENU
    endif 


    if cPermiso $ "T/M"
      MENUITEM oItem2 PROMPT  "&Documentos" 
         MENU
         IF ModuloAcces2("CDIARIOS") .or. cPermiso $ "T"
         MENUITEM "Comprobantes de &Diario"
            MENU
            MENUITEM "&Grabar CDiario"     ACTION Comprobante(.t.,"CD",oItem4) WHEN aAMBcd[1] .or. cPermiso $ "T"  //WHEN aAMB[1] 
            MENUITEM "&Modificar CDiario"  ACTION Comprobante(.F.,"CD",oItem4) WHEN aAMBcd[2] .or. cPermiso $ "T"  //WHEN aAMB[2] 
            MENUITEM "&Consultar CDiario"  ACTION ConsulDoc("CD",.f.,.T.,.F.)  //en CompModi.prg  
            MENUITEM "&Anular CDiario"     ACTION ConsulDoc("CD",.t.,.F.,.F.)  WHEN aAMBcd[3] .or. cPermiso $ "T"  // WHEN aAMB[3] //en CompModi.prg
            ENDMENU
         ENDIF

         IF ModuloAcces2("RCAJAS") .or. cPermiso $ "T"
         MENUITEM "Recibos de &Caja (C/D)"   //TIPO CDIARIO
            MENU
            MENUITEM "&Grabar Recibo"     ACTION Comprobante(.t.,"RJ",oItem4) WHEN aAMBrc[1] .or. cPermiso $ "T"   //WHEN aAMB[1] 
            MENUITEM "&Modificar Recibo"  ACTION Comprobante(.F.,"RJ",oItem4) WHEN aAMBrc[2] .or. cPermiso $ "T"   //WHEN aAMB[2] 
            MENUITEM "&Consultar Recibo"  ACTION ConsulDoc("RJ",.f.,.T.,.F.)     //en CompModi.prg
            MENUITEM "&Anular Recibo"     ACTION ConsulDoc("RJ",.t.,.F.,.F.)  WHEN aAMBrc[3] .or. cPermiso $ "T"   //WHEN aAMB[3]  //en CompModi.prg
            ENDMENU
         ENDIF 

         IF ModuloAcces2("MINUTAS") .or. cPermiso $ "T"
         MENUITEM "Minutas de &Deposito (C/D)"   //TIPO CDIARIO
            MENU
            MENUITEM "&Grabar Deposito"    ACTION Comprobante(.t.,"MI",oItem4) WHEN aAMBmi[1] .or. cPermiso $ "T"   //WHEN aAMB[1]
            MENUITEM "&Modificar Deposito" ACTION Comprobante(.F.,"MI",oItem4) WHEN aAMBmi[2] .or. cPermiso $ "T"   //WHEN aAMB[2]
            MENUITEM "&Consultar Deposito" ACTION ConsulDoc("MI",.f.,.T.,.F.)      //en CompModi.prg
            MENUITEM "&Anular Deposito"    ACTION ConsulDoc("MI",.t.,.F.,.F.)      WHEN aAMBmi[3] .or. cPermiso $ "T"     //WHEN aAMB[3]//en CompModi.prg
            ENDMENU
         ENDIF 

         IF ModuloAcces2("CHEQUES") .or. cPermiso $ "T"
         MENUITEM "&Cheques"
            MENU
            MENUITEM "&Grabar Cheques"            ACTION Comprobante(.t.,"CH",oItem4)  WHEN aAMBck[1] .or. cPermiso $ "T"    //WHEN aAMB[1]
            MENUITEM "&Modificar Comprob/Cheques" ACTION Comprobante(.F.,"CH",oItem4)  WHEN aAMBck[2] .or. cPermiso $ "T"    //WHEN aAMB[2]
            MENUITEM "&Consultar Cheques"         ACTION ConsulDoc("CH",.f.,.T.,.F.)   //en CompModi.prg
            MENUITEM "&Imprimir Cheques"          ACTION ImpriCheq(space(len(Cheques->codibancos)),0,0)  WHEN aAMBck[1] .or. cPermiso $ "T"
            MENUITEM "&Anular Cheques"            ACTION ConsulDoc("CH",.t.,.F.,.F.)   WHEN aAMBck[3] .or. cPermiso $ "T"    //WHEN aAMB[3]  //en CompModi.prg
            ENDMENU
         ENDIF

         *IF ModuloAcces2("FACTURAS") .or. cPermiso $ "T"
         *MENUITEM "&Facturas (C/D)"   //TIPO CDIARIO
         *   MENU
         *   MENUITEM "&Grabar Facturas"     ACTION Comprobante(.t.,"FA",oItem4) WHEN aAMBck[1] .or. cPermiso $ "T"    //WHEN aAMB[1]
         *   MENUITEM "&Modificar Facturas"  ACTION Comprobante(.F.,"FA",oItem4) WHEN aAMBck[2] .or. cPermiso $ "T"    //WHEN aAMB[2]
         *   MENUITEM "&Consultar Facturas"  ACTION ConsulDoc("FA",.f.,.T.,.F.)   //en CompModi.prg
         *   MENUITEM "&Anular Facturas"     ACTION ConsulDoc("FA",.t.,.F.,.F.)  WHEN aAMBck[3] .or. cPermiso $ "T"    // WHEN aAMB[3]//en CompModi.prg
         *   ENDMENU
         *ENDIF

      ENDMENU
     Endif





//----------------------------------
Function lAutorizado()
local oDlg,oBt1,oBt2, oIco, oCbx, oPw, cItems:={},cVar, cPw, lOK:=.f., lAutoriza:=.f.
LOCAL cPath:=GetPvProfString("config","DrivDirUsers","..\.\WCONT",cIniFile)
local nClrTxt:= RGB(255,255,255)  //blanco por defecto

SET DELETED ON

dbUseArea(.t.,,cPath+"\Usuarios","Usuarios",.t.)
usuarios->(dbgotop())

if Usuarios->(bof())  // Si no hay permisos, acceso es total por defecto.
   cUsuario:=" "
   cNombUser:="No users"
   cPermiso:="T" 
   aAMB:={.T.,.T.,.T.}
   usuarios->(dbCloseArea())
   return .t.
endif

While Usuarios->(!eof())
  aadd(cItems,Usuarios->nombre)
  usuarios->(dbskip())
Enddo

cPw:=space(len(usuarios->codigo))
cVar:=cItems[1]
DEFINE DIALOG oDLG RESOURCE "USUARIOS" TRANSPARENT
REDEFINE ICON oIco ID 400 OF oDlg RESOURCE "USUARIOS" 
REDEFINE SAY ID 101 OF oDlg COLOR nClrTxt
REDEFINE SAY ID 102 OF oDlg COLOR nClrTxt
REDEFINE ComboBox oCbx VAR cVar ID 103 OF oDLG ITEMS cItems ON CHANGE (oCbx:GotFocus(),oCbx:Refresh())
REDEFINE GET oPw VAR cPw ID 202 OF oDLG
REDEFINE BUTTONBMP oBt1 ID 312 OF oDLG BITMAP "ACEPTAR"  TEXTRIGHT  ACTION (lOK:=.t.,oDlg:End())
REDEFINE BUTTONBMP oBt2 ID 313 OF oDLG BITMAP "CANCELAR" TEXTRIGHT  ACTION (lOK:=.f.,oDlg:End())
*oDlg:bPainted := {|hDC| Gradient( oDlg:hDC, { oDlg:nTop, oDlg:nLeft, oDlg:nHeight, oDlg:nWidth }, 10298112,16619611, .T. ) }
oDlg:bPainted := {|hDC| Gradient( oDlg:hDC, { oDlg:nTop, oDlg:nLeft, oDlg:nHeight, oDlg:nWidth }, 10197915,0, .T. ) }
ACTIVATE DIALOG oDlg CENTERED 
if lOK
   usuarios->(dbgotop())
   locate for ALLTRIM(usuarios->codigo)+ALLTRIM(usuarios->nombre) = ALLTRIM(Encrypt(cPw,"FapSoft"))+ alltrim(cVar)
   IF found()
     if upper(Usuarios->Administ)="T"  //acceso total
       lAutoriza:=.t.
       cUsuario:=usuarios->codigo
       cNombUser:=cVar
       cPermiso:=usuarios->administ
     elseif upper(Usuarios->Administ)<>"T" .and. Usuarios->CONTAB=.t.
       lAutoriza:=.t.
       cUsuario:=usuarios->codigo
       cNombUser:=cVar
       cPermiso:=usuarios->administ
     elseif upper(Usuarios->Administ)<>"T" .and. Usuarios->CONTAB !=.t.
       lAutoriza:=.f.
       MsgStop("No tiene autorizacion para este modulo.","Alto")
     endif

     //[A]gregar,[M]odificar,[B]orrarAnular
     aAMB := {}  //static para controlar nivel de acceso
     aadd(aAMB,usuarios->Grabar)
     aadd(aAMB,usuarios->Modifi)
     aadd(aAMB,usuarios->AnuBor)

   ELSE
     MsgStop("Acceso Denegado.","Alto")
   ENDIF
endif
usuarios->(dbCloseArea())
return lAutoriza

//---------------------
Function Usuarios()
local cAlias,oBrw,oCol, n, oDlg, cOldSele:=Select(), oBrush, cBrush:=".\Fondo1.bmp"
LOCAL cPath:=GetPvProfString("config","DrivDirUsers",".\",cIniFile)
local lAdmor:=.f., oBtImp, nPosColHide:=0, oFont, oBmp

SET DELETED ON
dbUseArea(.t.,,cPath+"\Usuarios","Usuarios",.t.)
cAlias:=Alias()

usuarios->(dbgotop())
if (cAlias)->(bof())
   MsgInfo("Debe definirse primero un administrador del sistema","Advertencia")
endif

DEFINE BRUSH oBrush FILENAME cBrush  

DEFINE FONT oFont NAME "ARIAL" SIZE 0,-12 BOLD
DEFINE DIALOG oDlg RESOURCE "USUARCTRL" TITLE "USUARIOS" ;
       FONT oFont  BRUSH oBrush Transparent

  oBrw := TXBrowse():New( oDlg ) 
  oBrw:cAlias:=cAlias

  //ESTILOS DE LINEAS
  *oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW //ilumina toda la linea actual
  oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLCELL  //solo ilumina la celda actual
  oBrw:nColDividerStyle    := LINESTYLE_INSET 
  oBrw:nRowDividerStyle    := LINESTYLE_INSET 
  oBrw:lColDividerComplete := .f. 
  oBrw:lFastEdit := .t.

  //HEADERS Y FOOTERS
  oBrw:nHeaderHeight        := 24   //Altura cabeceras de col
  oBrw:lRecordSelector      := .f.  //poner o no, COL de la flechita de la izq
  //oBrw:lFooter              := .t.  //Que tendrá footer 
  //oBrw:nFooterLines         := 1    //Lineas del footer 
  //oBrw:nFooterHeight        := 30   //Altura del  Footer

  //COLORES (texto y fondo del texto)
  oBrw:bClrHeader    := {|| { nRGB(140,  0,  0), nRGB(229,0,0) } }  // VERDECITO
  oBrw:bClrFooter    := oBrw:bClrHeader
  oBrw:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }  // colores para lineas normales
  oBrw:bClrSelFocus  := {|| { nRGB(  0,  0,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control tiene el foco
  oBrw:bClrSel       := {|| { nRGB(  0,  0,  0), nRGB(248,195, 34) } }  // para barra de linea selecc cuando el control no tiene el foco
  oBrw:nRowHeight    := 18  //altura entre lineas
  oBrw:oFont:=oFont

  oBrw:CreateFromResource(118) 
  oBrw:SetRDD() 
  
  For n:=1 to len(oBrw:aCols)
     if oBrw:aCols[n]:cHeader $ "NOMBRE/NUMUSER/ADMINIST/CODIGO"
        oBrw:aCols[n]:nEditType := 0   //no editable
     else
        oBrw:aCols[n]:nEditType := EDIT_GET  //editable
     endif
     if oBrw:aCols[n]:cHeader $ "CODIGO"
        nPosColHide:=n
        oBrw:aCols[n]:Hide()
     endif
  Next


  oBrw:nFreeze := 1  //fijar columna 1 del nombre
  oBrw:bLDblClick := { || if(GetKeyState(VK_CONTROL) .AND. GetKeyState(VK_SHIFT), oBrw:aCols[nPosColHide]:Show() ,) }

REDEFINE BITMAP oBmp ID 400 OF oDlg RESOURCE "USUARIOS2"    
REDEFINE BUTTONBMP ID 301 OF oDlg BITMAP "NUEVO" TEXTBOTTOM ACTION ( UsuarConf(.T.), oBrw:Refresh() )
REDEFINE BUTTONBMP ID 302 OF oDlg BITMAP "MODIFICAR" TEXTBOTTOM ACTION ( UsuarConf(.F.), oBrw:Refresh() )
REDEFINE BUTTONBMP ID 303 OF oDlg BITMAP "BORRAR" TEXTBOTTOM ACTION ( BorrUsuar(), oBrw:Refresh() )
REDEFINE BUTTONBMP oBtImp ID 304 OF oDlg BITMAP "IMPRIMIR" TEXTBOTTOM //ACTION //( ImprUsuar(), oBrw:Refresh() )
REDEFINE BUTTONBMP ID 305 OF oDlg BITMAP "SALIR" TEXTBOTTOM ACTION ( oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED ;
         Valid AdmorOK();
         ON INIT ( oBtImp:Hide(), oBrw:SetBackGround(".\stone.bmp"), oBrw:Refresh() )

  oFont:End()
  oBrush:End()

  (cAlias)->(dbCloseArea())
  dbSelectArea(cOldSele)
  MsgInfo("Si hubo cambios, el usuario debe cerrar el programa "+CRLF+;
          "y reabrirlo para que tomen efecto.","Advertencia")
RETURN NIL

//------------------------------------
Function AdmorOK()
local nRecno, lAdmor:=.f.

     if usuarios->(Bof())
        Return .t.   //para poder salir cuando no hay ninguno registrado
     endif

  //averiguar si queda algun administrador
     lAdmor:=.f.
     nRecno:=usuarios->(Recno())
     Usuarios->(dbgotop())
      While usuarios->(!eof())
        if usuarios->Administ = "T"  //hay un administrador
           lAdmor:=.T.
        endif
        usuarios->(dbskip())
      Enddo
      Usuarios->(dbgoto(nRecno))
      if !lAdmor
        MsgStop("¡¡¡ DEBE DEFINIRSE UN ADMINISTRADOR (ACCESO TOTAL)!!! Hagalo en este instante.","Alto")
      endif
Return lAdmor


//--------------------
Function UsuarConf(lAppend,lCambAcc)
local oDlg,oNomb,oCodi,oCodi2,oRadio, lOK:=.f., oBrush,cBrush:=".\Fondo1.bmp", oUsers
local cNomb,cCodi,cCodi2, nVar, cTipoAcc:={"T","M","L"}, cAcceso, n:=0, cCodiAnt
local lGrabar:=.f.,lModifi:=.f.,lAnuBor:=.f., oGrabar,oModifi,oAnuBor
local lContab:=.t.
local oContab
local nNumeUser, nRecno

DEFAULT lCambAcc:=.f.

//Da Num de cajero o usuario (automatico,dbf no esta index)
//Esto es porque usuario puede modif nombre y su clave de acceso
//y para los reportes de cortes de caja-ventas debe haber un control unico

if lAppend
  Usuarios->(dbgobottom())
  nNumeUser:=Usuarios->NumUser+1
  Usuarios->(dbGotop())
  While usuarios->(!eof())   //ck que no exista
    if Usuarios->NumUser = nNumeUser   //si ya existe
       nNumeUser+=1
       Usuarios->(dbGotop())
       loop
    endif
    Usuarios->(dbskip())
  Enddo
endif

if lAppend
  Usuarios->(dbgobottom())
  Usuarios->(dbskip())
  nVar:=2
  cAcceso:=cTipoAcc[nVar]
else
  cAcceso:=Usuarios->Administ
  for n:=1 to len(cTipoAcc)
   if cTipoAcc[n] = cAcceso
      nVar:=n
   endif
  Next
endif

lGrabar:= Usuarios->Grabar
lModifi:= Usuarios->Modifi
lAnuBor:= Usuarios->Anubor

lContab:=Usuarios->Contab

cNomb:=usuarios->nombre
if lAppend
 cCodi:= usuarios->codigo
 cCodiAnt:=usuarios->codigo
 cCodi2:=space(len(usuarios->codigo))
else
 cCodi:=Decrypt( usuarios->codigo, "FapSoft" )
 cCodiAnt:=Decrypt( usuarios->codigo, "FapSoft" )
 cCodi2:=cCodi
endif


DEFINE BRUSH oBrush FILENAME cBrush  

DEFINE DIALOG oDLG RESOURCE "USUARIOCONF" TITLE if(lAppend,"Perfil de Usuario","Modificar Perfil de Usuario") BRUSH oBrush Transparent
REDEFINE ICON oUsers RESOURCE "USUARIOS" ID 400 OF oDlg
REDEFINE GET oNomb VAR cNomb ID 101 OF oDlg Valid if(empty(cNomb),(MsgStop("Debe ingresar el nombre.","Alto"),.f.),.t.)
REDEFINE GET oCodi VAR cCodi ID 102 OF oDlg Valid if(empty(cCodi),(MsgStop("Debe ingresar la clave.","Alto"),.f.),.t.)
REDEFINE GET oCodi2 VAR cCodi2 ID 103 OF oDlg 
REDEFINE RADIO oRadio VAR nVar ID 104,105,106 OF oDlg ON CHANGE cAcceso:=cTipoAcc[nVar]

REDEFINE CHECKBOX oGrabar   VAR lGrabar   ID 121 OF oDlg 
REDEFINE CHECKBOX oModifi   VAR lModifi   ID 122 OF oDlg 
REDEFINE CHECKBOX oAnuBor   VAR lAnuBor   ID 123 OF oDlg 
REDEFINE CHECKBOX oContab   VAR lContab   ID 127 OF oDlg 

REDEFINE BUTTONBMP ID 312 OF oDLG ACTION (if(CodiAccOK(cCodi,cCodiAnt,cCodi2,nVar),(lOK:=.T.,oDlg:End()),) ) BITMAP "ACEPTAR" TEXTRIGHT
REDEFINE BUTTONBMP ID 313 OF oDLG ACTION (lOK:=.F.,oDlg:End()) CANCEL BITMAP "CANCELAR" TEXTRIGHT

ACTIVATE DIALOG oDLG CENTERED ;
   ON INIT if(lCambAcc,(oNomb:Disable(),oRadio:Hide(),oGrabar:Hide(),oModifi:Hide(),oAnuBor:Hide(),oContab:Hide()),)

IF lOK
 if lAppend
    if !Usuarios->(PudoAgregar())
       oBrush:end()
       return nil
    endif
 else 
   if !Usuarios->(pudoBloq(.f.))
      oBrush:end()
      return nil
   endif
 endif

  if lAppend
    usuarios->NumUser := nNumeUser  //Num automatic
  endif 

  Usuarios->nombre := cNomb
  Usuarios->codigo := Encrypt(cCodi,"FapSoft")
  Usuarios->administ:=cAcceso

  if cAcceso=="T"
    Usuarios->Grabar:=.T.
    Usuarios->Modifi:=.T.
    Usuarios->Anubor:=.T.

    Usuarios->Contab:=.T.
  else
    Usuarios->Grabar:=lGrabar
    Usuarios->Modifi:=lModifi
    Usuarios->Anubor:=lAnuBor

    Usuarios->Contab:=lContab
  endif

  Usuarios->(dbCommit())
  Usuarios->(dbUnlock())

ELSE
  Usuarios->(dbGotop())
ENDIF
oBrush:end()
return nil

//--------------------------------------
Function CodiAccOK(cCodi,cCodiAnt,cCodi2,nVar)
local nRec:=Usuarios->(Recno())

usuarios->(dbgotop())
if usuarios->(bof()) .and. nVar != 1  //si es el primer usuario...
   MsgStop("Debe ingresarse primero un administrador con acceso total.","Alto")
   return .f.
endif
Usuarios->(dbGoto(nRec))

if cCodi==cCodiAnt 
   return .t.
else    //cambio contraseña
  if cCodi<>cCodi2  
     MsgStop("Error en contraseña o no confirmada. Reintente...!!!","Alto")
     return .f.
   elseif cCodi==cCodi2 .and. !empty(cCodiAnt)
     MsgInfo("La contraseña ha sido cambiada...!!!")
   elseif cCodi==cCodi2 .and. empty(cCodiAnt)
     MsgInfo("La contraseña ha sido ingresada satisfactoriamente.")
  endif
endif
return .t.

//--------------------------
Function BorrUsuar()
 local Borrado := .f., cBorrar:="", nRecno:=recno()
 LOCAL oFont, oDlg, oBmp, oBrush, cBrush:=".\Fondo1.bmp"

 if bof()
    MsgStop("Fichero se encuenta vacio.","Alto")
    return borrado
 endif

 if nRecno=LastRec()
    nRecno:=nRecno-1
 endif

   DEFINE BRUSH oBrush FILENAME cBrush  

   DEFINE FONT oFont NAME "Arial" SIZE 5,14 BOLD
   DEFINE DIALOG oDlg RESOURCE "ELIMINAITEMS" TITLE  " Eliminar Items:" TRANSPARENT FONT oFont ;
          BRUSH oBrush

   REDEFINE BUTTONBMP PROMPT "Borrar &Registro Actual"  ID 301 OF oDlg ACTION ( cBorrar := 'R', oDlg:End(),oFont:End() )  BITMAP "BORRAR" TEXTRIGHT
   REDEFINE BUTTONBMP PROMPT "Borrar &Todos los items"  ID 302 OF oDlg ACTION ( cBorrar := 'T', oDlg:End(),oFont:End() )  BITMAP "BORRAR2" TEXTRIGHT
   REDEFINE BUTTONBMP PROMPT "&Cancelar (Salir)"        ID 303 OF oDlg ACTION ( cBorrar := ' ', oDlg:End(),oFont:End() )  BITMAP "SALIR" TEXTRIGHT

   ACTIVATE DIALOG oDlg CENTERED

IF cBorrar = 'R'
   if MsgNoYes("Esta seguro de borrar este registro?","Borrar Registro" )
      if Usuarios->(PudoBloq(.f.))
          Usuarios->(dbdelete())
          Usuarios->(dbunlock())
          Borrado:=.t.
          Proceso(cNombUser+" Borro usuario "+cUsuario)
       endif
   endif
   dbgoto(nRecno)

ELSEIF cBorrar = 'T'
   if MsgNoYes( "Esta seguro de borrar todo?","Borra Todo")
      if Usuarios->(PudoBloq(.T.))
         Usuarios->(dbgotop())
          While Usuarios->(!eof())
            Usuarios->(dbdelete())
            Usuarios->(dbskip())
          Enddo
         Usuarios->(dbunlock())
          Borrado:=.t.
          Proceso(cNombUser+" Borro todos los items de usuarios")
      endif
   endif
   dbgoto(nRecno)

ELSE
   dbgoto(nRecno)
ENDIF
 oBrush:End()
return( Borrado )
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Favor Ayuda

Post by remtec »

Hola Francisco

Muchas gracias por tu ayuda, muy agradecido.

Veré si me da para adaptarlo.

Muchos saludos

Antonio
Post Reply