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.
Favor Ayuda
Re: Favor Ayuda
Usa oWnd : SetMenu( MenuUsuario() ) de acuerdo a los permisos del usuario.
Saludos
Saludos
Re: Favor Ayuda
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.
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.
Re: Favor Ayuda
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.
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.
Re: Favor Ayuda
Perdón, la versión de Fwh es 15.02 y Harbour.
Saludos
Antonio
Saludos
Antonio
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Favor Ayuda
Hola.
Hechale un vistazo a este código parcial. Espero te pueda servir de guía. Puedes adaptarlo a tus necesidades.
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
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: Favor Ayuda
Hola Francisco
Muchas gracias por tu ayuda, muy agradecido.
Veré si me da para adaptarlo.
Muchos saludos
Antonio
Muchas gracias por tu ayuda, muy agradecido.
Veré si me da para adaptarlo.
Muchos saludos
Antonio