PROYECTO TERMINAL DE INGENIERIA ELECTRONICA
DE CONTROL DE INSTRUMENTACION Y TALLERES"
ASESOR: ING. YUDIEL PEREZ ESPEJO 1 5 2 9 7 5
REALIZADO POR: AYALA 1
Junio 1994.
SCIT-UAMI
INDICE
INTRODUCCION.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
DIAGNOSTICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
OBJETIVOS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
DEFINICION DE ENTIDADES Y ATRIBUTOS.. . . . . .5
CONCLUSIONES.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
BIBLIOGRAFIA.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
1 SCIT-UAMI
INTRODUCCION
El sistema de control de instrumentación y Talleres es un sistema desarrollado bajo el concepto
de programación orientada a objetos implantado con el lenguage de programación Clipper versión
5.01 usando como utileria para interface grafíca la libreria "Visual Interface" Versión l . l . Lo cual
nos permite tener una interface de usuario muy agradable, fácil de entender y operar .
Este sistema surge debido a la problematica de control de los servicios prestados a la
Comunidad Universitaria por este departamento originada por las crecientes demandas de los
usuarios hacia estos servicios. La implantación de este sistema nos permitirá dar seguimiento a
todo el proceso de servicio, desde que se recibe la orden de trabajo hasta que el trabajo es
concluido. Tambien se podra obtener informació sobre los empleados y ademas obtener
inf'ormacion sobre estimaciones de costos de los trabajos realizados.
2 SCIT-UAMI
DIAGNOSTICO:
La coordinación de Recursos Materiales es el organismo de la UA"1 que se encarga del
mantenimiento de la estructura material de esta unidad, a esta coordinación se encuentra adscrito
el departamento de Instrumentación y Talleres en el cual se lleva a cabo la reparación y diseiio de
equipos de laboratorio e investigación. Este departamento cuenta con 5 áreas las cuales son :
Soplado de vidrio, Electrónica, Taller mecanico, Optic0 analítica y Vacio criógenico . El proceso
de atención a usuarios es el siguiente.
* El usuario elabora una orden de trabajo la cual contiene lo siguiente:
- divisiódcoordinación y departamento del solicitante.
- información acerca del equipo a reparar o diseñar.
- datos del solicitante.
* La orden de trabajo es enviada junto con el equipo a reparar o con las especificaciones en caso
de diseños al departamento de Instrumentación y talleres, ya dentro de departamento la orden es
canalizada al área correspondiente y asignada a algun empleado especifico el cual se encarga de
reparar o de elaborar el d i d o del equipo.
* En caso de no poderse realizar la reparación de dicho equipo dentro de las inatalaciónes de
dicho departamento este es enviado a reparación externa.
3 SCIT-UAMT
* Al terminar la reparación de dicho equipo el empleado lo entrega al usuario y procede a entregar
la orden con los datos pertinentes al jefe del departamento.
4 SCIT-UAMI
OBJETIVOS:
Los objetivos de este sistema son los siguientes :
* poder contar con información oportuna y actualizada de los equipos en reparación tanto dentro
del departamento asi como lo que se encuentren en reparación externa.
* obtener informacion a cerca del rendimiento de los trabajadores.
* obtener estadisticas de ordenes de trabajo realizadas por l a s áreas del partamentos en cierto
periodo de tiempo.
* calcular los costos de reparación o diseño de equipos tanto de mano de obra asi como por
gastos en material de repuesto o construcción.
* llevar un control de gastos por compras directas de material para reparación o diseño.
* elaborar reportes cuatrimestrales del número de ordenes realizadas durante dicho periQd0
desglosado por departamentos y coordinacioneddivisiones.
* elaborar estadisticas cuatrimestrales y anuales del presupuesto gastado por el departam&o.
5 SCIT-UAMI
DEFINICION DE ENTIDADES Y ATRIBUTOS.
EMPLEADO:
-NumEmp (Numero de empleado)
-NomEmp (Nombre del empleado)
-CveArea (Area a la que pertenece el empleado)
-Sueldo
-Antigúedad
WAS:
-CveArea (Areas de trabajo)
-NomArea (Descripción del áea)
EST-ORG: (Estructura organica)
-CveEstOrg (Clave estructura organica)
-Description
6 SCIT-UAMI
ORDEN-T: (Ordenes de trabajo)
-NumOrd (Número de orden)
-CveProg (Clave de la estructura organica)
-1nvEqu (Numero de inventario del equipo)
-DescTrab (Descripción del trabajo a realizar)
-ModEqu (Modelo del equipo)
-NumSer (Número de serie del equipo)
-Fsol (Fecha de solicitud de la orden)
-Solicitante ( Solicitante de la orden)
-ExtSol (Extencion del solicitante)
-EdoOrd (Edo de la orden)
PROCORD: (Proceso de ordenes)
-NumOrd (Número de la orden)
-NumEmp (Numero del empleado al que se asigna la orden)
-CveArea (Area a la que pertenece el empleado)
-FIni (Fecha de inicio del trabajo)
-FFin (fecha de terminación del trabajo)
- T o a s (Total de bras ocupadas en el trabajo)
-TQW (Tipo de 'servicio)
- 0 w m e s
7 SCIT-UAMI
CONCLUSIONES :
En la implantación de este sistema el entorno de programación se eligio de acuerdo a las
necesidades y posibilidades del departamento de Instrumentación y Talleres, es asi que se eligio el
lenguaje de programación Clipper debido a que anteriormente se llevaba el control de ordenes de
trabajo mediante algunas bases de datos en el entorno de DBASE de las cuales se utilizo la
información ya capturada para d nuevo sistema evitando asi tener que capturar nuevamente la
información de las ordenes de trabajo lo cual es una cantidad de inormación bastante considerable,
ademas de que el equipo nesesario para la operación del sistema es de facil adquisición y de que se
genera un programa ejecutable el cual se puede correr bajo el sistema operativo MS-DOS.
8 SCIT-UAMI
BIBLIOGRAFIA
Clipper 5 Referencia rápida Francisco Marín Quirós, Antonio Quirós Casado, Antonio Torres Lozano. Grupo Eidos 199 1 Macrobit Editores.
Visual Interface AClass Library For Clipper Versión l. 1 1992 Pinacle Publishing, Inc.
MS-DOS Manual de Usuario y Referencia. 199 1 MIcrosoR Corporation.
Analisis Estructurado Moderno Edward Yourdon Prentice-Hall Hispanoamericana, S.A. 1993.
Análisis y Diseño de Sistemas de Información James A. Senn. McGraw-Hill 1992.
.. ._" ".
** ** ** ** ** ** ** ** ** ** ** ** **
o SCIT.PRG
SISTEMA DE CONTROL DE INSTRUMENTACION Y TALLERES
CUERPO PRINCIPAL DEL PROGRAMA
Copyright: WILLEl3ALDO CORONADO AYALA
Autor: Willebaldo Coronado Ayala Fecha: Junio 1994 Ultima Act. :
#include "inkey.ch" #include "vi.ch"
** ............................................................... ** ...................
...............................................................
................... Cuerpo principal .......................... ** ............................................................... ...............................................................
PROCEDURE Main LOCAL owin PUBLIC Hoy,nNumUsr,nNombreUsr
cls SET DATE BRITISH SET EXACT ON Hay:=DATE() cYear:=SUBSTR(S~AR(HOY),4),3,2) ? "hi- sistema gr fico para SCIT Ver 1.0 ..... por favor espere" vclassIllit() // Se inicialian clases SET TYPEAHEAD TO O // Se deshabilita rutinas desde teclado set cursor off // Se deshabilita el cursor set deleted on // No se visualizan archivos marcados para borrado VOpen(SYSDIR, EGAFONT, VGAFONT) / / S e declara video y fonts VGraphics(J3LACK) // Modo gr fico MuestraWPortada(O,O,59,79, "IT.PCX") N Se pone la presentaci#n VActivat@ // Esta qui hasta que se sale del programa VTextO // Se regresa a l modo texto VCl0,Seo // Se cierra la aplicacien
quit // Fin del programa y salida al DOS
I
** ** PRESENTA.PRG
** Rutina para generar la pantalla de presentacien
** Fecha: mayo 1994.
**
**
** * ................................................................ * ......................... * ................................................................ ................................................................ ......................... PRESENTA ............................. ................................................................
#include "inkey.ch" #include "vi.ch"
FUNCTION Muestrawportada(nYl,nX1,nY2,nX2,cGRAFICO) LOCAL owindow,oGrafím
VReSetPaletteo owindow := VWindowNew(nYl,nXl,nY2,nX2,1OOO,,BLACK,CYAN) ContinuaFondo(oWindow) oG~ali~:=VPictureNav(oWindav,K~ALT~E,nYl,nXl,nY2,nX2,,PC~PCX,&~CO) oGrafíco:inactive() oWindow:show()
R E r n ( N I L )
STATIC PROCEDURE Contin@ondo(oWin) LOCAL oPB
oPB:= vpushBtnNew(oWin, K-ALT-E, 46,47,50,55, O, BLACK, WHITE, "&ENTRAR") oPB: action:= ( I s e l f l seKwindow:delde(), PonFondo() 1
RETURN
STATIC PROCEDURE PonFondo() LOCAL oWinTapiz
oWinTaDiz:= ~indowNew(0,0,59,79, lOOO,,BLACK,C' YAN) o T a p i z : = ~ ~ N ~ o W i n T a p i z , K - ~ T - P , O , O , 5 9 , 7 9 , , P C - ~ X + F C - N O P ~ E ~ , ;
oTapiz:inactive() oWinTapiz: show()
"LOGOUAM.FCX")
IF !seguridad()
VMOUS&Il()
Pausa(30,20,5,"ACCESO DENEGADO")
oWinTapiz:postquit() ELSE
ENDIF
RETURN
MuestraWMenu()
1 5 2 9 7 5
** ** ** ** ** ** ** ** ** ** ** ** **
o SCIT.PRG
MODULO DE SEGURIDAD DE ACCESO AL SISTEMA
CUERPO PRINCIPAL DEL MODULO
Copyright: UNIVERSIDAD AUTONOMA METROFOLITANA, 1993
Autor: Willebaldo Coronado Fecha: mayo 1994. Ultima Act. :
IZTAPALAPA.
STATIC CCveUsr // variable que guarda el campo CVE-USR del archivo dbf STATIC oWin STATIC oPic2 STATIC oPic3 STATIC nCol STATIC intento:= 1 STATIC oNumUsr
#include "inkey.ch" #include "setam.ch" #include "vi.ch"
#define TpoNet 10
** ............................................................... ** ................... ** ...............................................................
...............................................................
................... cuerpo PrinCipQl ..........................
...............................................................
FUNCTION Seguridad0 LOCAL Valret:=.F.
setcolor(",W+,,")
IF PideUsr()
ELSE
ENDIF
valRet:= PidePmQ
RETURN(.F.)
RETuRN(ValRet)
FUNCTION PideUsrO LOCAL ValRet:=.F.,valor
SELECT (1) N Area para USUARIOS IF NET-USE("USUARIOS",.F.,TpoNet)
ENDIF owin:= VWindowNew(9,10,51,66,1OOO,WS~~~LEBORDER+WS~QUICK+;
nCol:=oWin:Cols/;! oTxNmUsr:= VTextLineNew(oWin,6,5,O,BLACK,HIWHI~, "NUMERO DE USUARIO: ") oPicl:= VPictureNew(oWin,K~ALT~P,2,35,11,42,,PC~XX,"puERTA.PCX") oPic 1 :inactive()
SET INDEX TO USUARIOS
WS-LOCKSIZE,HIWHITE, RED)
oWin:show() valor:=SPACE(S) oNumUsr:=GetNew(3,24,{lpl IF(PCOUNT()=O,Valor,Valor:=p)),,,,,"") oNumUsr:picture:="99999"
DO WHILE (intento<=3 .and. ValRet=.F.) VMouseOff()
Set Cursor on SetCursor(2) m " ( { oNumUsr 1) Set cursor off ValRet:=BuscaUsr() IF (VaLRet=.F.)
ENDIF ENDDO
oNumUsr:varht(SPACE(5))
oNumUsr:undo() RETuRN(ValRet)
FUNCTION BuscaUsr()
nNumUsr:=VAL(ALL'I"(oNumUsr:varGet())) SEEK nNumUsr IF FOUND0 cCveUsr:=ALL'I"(CVE-USR) nNombreUsr:=ALL'I"(NOMBRE) RETURN(.T.)
ENDIF Pausa(30,20,5,"NUMERO DE USUARIO NO ENCONTRADO") ++intento RETURN(.F.)
FUNCTION pidepSw() LOCAL ValRet:=.F.,valor,oCveUsr
intento:=l VTextLineNew(oWin,16 ,5 ,O,BLAC~~,"CLAW DE USUARIO: "):refresh() oPic3:= VPictureNew(oWin;K_ALT_P,13,35,24,42,,X-X~"LLAVE.PCXH):refreshO valor:=SPACE( 10) set cursor on DO WHILE (intento<=3 .and. ValRet=.F.)
Set Cursor on SetCursor(2) oCveUsr:=GetCript(8,24,@valor) Set cursor off ValRet:=BuscaPsw(&eUsr) IF (ValRet=.F.)
ENDIF ENDDO set cursor off
RETURN(ValRet)
valor:=SPACE(lO)
FUNCTION BwcaPsw(&eUsr) LocALnNum
nNum:=CRIPT(ALLTRIM(&eUsr)) IF (nNum=cCveUsr)
VTextLineNew(oWin,29,nColyTL~MIDyBLACK,~~,;
oPiC2:= VPictureNew(oWin,K-ALT-Py3 1,25,42,42,,PC-PCX,"PUERTAl.XX"):refres) inkey(2) Set Cursor O f € VMouseOn() oWin:delete() RETURN(.T.)
"BENVEND0 "+nNombreUsr):refreshO
ENDIF Pausa(30y20,5,"CLAVE DE USUARIO NO ENCONTRADO") ++intento RETURN(.F.)
FUNCTION Cript(cCad1) LOCAL nLong,nPos,cCar
nLong:=LEN(cCadl) nPos:=l FOR nPos:=l TO nLong cCar:=CHR(ASC(SlJElSTR(cCadl,nPos,l))+nlong)
cCadl:=STUFF(cCadl,nPos,l,d=ar) NEXT RETURN(cCad1)
FUNCTION GetCript(nFQla,nCol,cValor) LOCAL &Sali~nTecla , cTecla ,nLenCa~m-a~~tV~n
nLenCad:=LEN(cValor) m-aux:=ARRAY(nLenCad) RetVal:=SPACE(O)
g:= GetNew(nFila,nCol, ([PI IF(PCOUNT()==O,cValor,cValor:=p)))
IF READINSERT() // Forzamos la sobreescritura
ENDIF g: SetFocusO
READINSERT(.T.)
IF g:TypeOut
ELSE
ENDIF
Salida:=.T.
Salida:= .F.
WHILE !Salida
IF g:Typeout EXIT
ENDIF
nTecla:=INKEY(O)
DO CASE CASE nTecla=K ESC
g:undoo ar-aux:=ARRAY(nLenCad) EXIT
EXIT CASE nTecla=K-ENTER
CASE nTecla=K-LEm
CASE nTecla=K-RIGHT
CASE nTecla=K-BS
OTHERWISE
g:lefto
g:Righto
g:backspace~
IF nTecla>=32 .and. nTecla€=255 cTecla:= CHR(nTecla) ar-aux[g:pos]=UPPER(cTeda) g:Overstrike("*")
ENDIF ENDCASE
ENDDO g:ASsign() g:Reset() g:-ocuso
FOR n:=l TO nLencad IF (ar-aux[n]=NIL)
ar-aux[n]:=SPACE( 1) ENDIF RetVal=RetVal+ar-aux[n]
NEXT g:undo()
4
I
!
i
RETURN(RetVal)
** ** MEW.PRG
** MODULO DE MENU PRINCIPAL DE SCIT
** Autor: WLLEBALDO CARONADO AYALA ** Fecha: mayo 1994
** **
**
##include "inkey.ch" #include "vi.ch" #define TpNet 10
// variables globales a este m#dulo
STATIC oWin STATIC oNumEmp STATIC oMainMenu STATIC oT;dLn
FUNCTION MuestraWMenuO LOCAL owindow
WinHelp() //Secrealaventanadeayudaperonosemuestra
owindow := WinMenu() N Se crea la ventana de men€ y sus controles owindow : show() // Se muestra el m e n € al usuario
RETURN (OWindOW)
STATIC FUNCTION WinMenuO LOCAL aMain, aControl
Vrdalet te() oWin := VWindowNew(7, O, 44,79,1000,WS-DOUl3LEBORDER+WS-~E+ ;
WS-MENU+WS-QUICK,HIWHITE, YELLOW,; "SISTEMA DE CONTROL DE INST. Y TALLERES VER. 1.0")
aMain := { {K-ALT-C, .T., "&Catalogos"},; {K-ALT-O, .T., "&Ordenes"},;
{K-ALT-Y, .T., "A&yuda"}} {K-ALT-R .T., "BtReportes"},;
aCatalogos:= { {K-ALT-E, .T., .F., "&Empleados", {la,q Empleado@, b) } }, ; {K-ALT-A, .T., .F., "&Areas", { bbl Areas(a,b) } }, ; {K-ALT-E, .T., .F., "&EstOrg", {la,bl Estorg(a,b) 1 1, ; {o,.F.,.F.,"qt,{l 1,; {K-ALT-S, .T., .F., "&!jalir", { la, bl WMSalir(a, b) } } }
aOrdenes:= { {K-ALT-O, .T., .F., {la,q Ordenes(a, b) } } ,; {K-ALT-E, .T., .F., "&ProcOrd", {la,b/ ProcOrd(a, b) } } }
aReportes := { {K-ALT-I, .T., .F., "&RendEmp", { l s e l f l Infoint(self) } }, ; {K-ALT-E, .T., .F., "BiTotPDep", { I s e l f l Infoext(self) } } }
aHelp:= ( (K-ALT-A, .T., .F., "&Ayuda", ( l s e l f l HelpHelp(self) } },; (IC-KT-U, .T., .F., "&Utilerias", {lseq Usuarios(self) } },; (K-ALT-C, .T., .F., "A&cerca", ( l s e l f l HelpAbout(self) } } }
oMainMenu := VMenuNew(oWin,MU-HELP, HIBLUE, HIWHFTE, aMain) WlDownNew(oWh, K-ALT-C, O, aCatalogos) WlDownNew(oWin, K-ALT-O, O, aordenes) VPullDownNew(oWin, K-ALT-R, O, aReportes) VPullDownNew(oWin, K-KT-Y, O, aHelp) Reloj(oWin) RETURN (OWin)
..................... OpcIoNES DE MENU ..................................
I
STATIC FUNCTION Areas(self,oM) ProcGral("AREAS DE TRABIwON,"BrowAreas()","pcExamo","IndexAreaso")
STATIC FUNCTION Ordenes(self,oM) ProcGd("0RDENES DE TRAB~O","BrowOrden()","IX!E~()","Inde~&n()")
nmwlf) STATIC FUNCTION ProcOrd(self,oM)
T R A B I w O " , ~ ~ ~ d ~ , " ~ E ~ , " I ~ ~ ~ ) ProcGraI("PROCES0S DE ORDENES DE
RETURNO STATIC FUNCTION In€&t(self,oM) RendEmp()
==(self)
STATIC FUNCTION Infoext(self,oM) ProcesoTmp(self,oM)
RETuRN(self)
...................................................................... 11:::::::::: RUTINAS DE USO DIVERSO PARA kd'oY0 ........................ ...................................................................... .....................................................................
FUNCTION WMsalir( self) I1 Rutina para salir del pulldown
1 5 2 9 7 5
FUNCTION WinComun(titulo) // Ventana para poner la lista LOCAL owin
oWin:=VWindowNew(lS, 19,42,61, 1O00, ; WS~DOUBLEJ3ORDER+WS"ITI'L,E+WS QUICK, HIWHITE, RED, titulo)
RETURN (OWin) -
FUNCTION WinMensaje(titul0) // Ventana para poner un mensje RETURN ( VWindowNew(20,25,35,50, 1O00, ; WSDOUBLEBORDER+WS-I'ITLE+WS-QUCK, HIWHITE, RED, titulo) )
I 1
PROCEDURE CancelBtn( oWin ) // Boton de cancelacifh
VPushBtnNew(oWin, K-ALT-C, oWin:rows-3, O, oWin:mws-l, oWin:mls-l, ; O, BLACK, WHITE, "Cancelar"):action := { la, b( PBCancel(a, b) 1
RETURN
FUNCTION PBCancel(self ,OM) self: window: delete()
RETuRN(self)
FUNCTION ProcesoTmp(self,oM)
titulo:= "VENTANA TEMPORAL" oWin:= Wincomun(titulo) oTxtLn := VTextLineNew(oWin, 3,10, O, BLACK, HIWHITE,;
oTxtLn :refí-&() "PROCESO EN DESARROLLO......")
Cancel€3tn(oWin) owin:show()
RETuRN(oWin)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
** ** PROCESOS.PRG
** MODULO DE PROCESOS PROPIOS DE SCR
** Autor: ** Fecha: Mayo 1994
** **
**
* Descripcien del arreglo pasado como parametro pa~a &cien Y altas. * aCpos * 1. Nombre deícampo. caracter * 2. Valor del campo bloque * 3. Mascarilla caracter * 4. Editable bloque * 5 . Validacien (Bloque) bloque * 6. Longitud num,rico * 7. Tipo de dato caracter * 8. Posicien de la base de datos num,rim * 9. Se puede modificar boolean0 * 10. Posicien de Y num,rico * 11. Posicien de X nwn,rim
* Descxipcien del arreglo pasado como parametro para P m S * moc * BLOQUE ACTIVACION * 1. Altas B * 2. Bajas B * 3. Cambios B * 4. Procesos B * 5. Ayudas B * 6. Salir B
* ( n w ~ 1 , n w ~ l , n ~ 2 , n w X 2 ) : dimensiones de la caja de dialogo * cTit : Titulo de la caja de dialogo
*
*
#include "vi.ch" ##include "inkey.ch" #include "setcurs.ch"
#defineTpoNet 10 //Tiempode red #defineTamMax 80 #define LargoMax 60
STATIC oWin /I &#o para la@) ventana@) STATIC aCpos /I arreglo de campos STATIC n C p N &mero de campos STATIC LongTit N Longitud de los titulos STATIC oPBSave /I PushButton para salvar STATIC *=NIL I / arreglo para guardar elbuffer de edicien STATIC F€egAct,Reght STATIC owinPC STATIC Born, lSuel, lCat, lAdsc
/I :::::: Rutinas de mantenimiento, reportes e indexaci$n de empleados ::: // .......................................................................
FUNCTION BrowEmpleados()
SELECT(2) // Area para empleados IF NET_USE("EMPLEADO",.F.,TpoNet)
SET INDEX TO EMPLEADO ELSE
ENDIF =m(NIL)
aEmp:= ARRAY(5,8)
amp[ 1, l]:="No.EMPLEADo" aEmp[l,2]:=(l( N U M E M P } aEmp[lY3]:=REPLICATE ("9",5) aEmp[1,4]:=(JI .T.} aEmp[l,S]:=(JI ValidaNumero(2, 1, "Clave duplicada")} aEmp[1,6]:=5 amp[ 1,7] :="N" aEmp[1,8]:=1
aEmp[2,1]:="NOMBRE M." aEmp[2,2]:=(ll NOMEMP} aEmp[2,3]:=REPLICATE ("!",45) aEmp[2,4]:=(ll .T.} aEmp[2,5]:=( 11 ValidaNombre("CADENA NO PERMITIDA")} aEmp[2,6]:=45 aEmp[2,7]:="C" aEmp[2,8]:=2
aEmp[3,1]:="AREA" aEmp[3,2]:={{l CVEAREA} aEmp[3,3]:="!" &mp[3,4]:={ 11 .T. } aEmp[3,5]:={ll ValAreaO} aEmp[3,6]:=1 aEmp[3,7]:="C" aEmp[3,8]:=3
aEmp[4,l]:="SuELDo" aEmp[4,2]:=(II SUELDO} aEmp[4,3]:="9999.99" aEmp[4,4]:= (11 .T.} aEmp[4,5]:= {I1 .T.} aEmp[4,6]:=7 aEmp[4,7]:="N" aEmp[4,8]:=4
aEmp[5,1]:="ANTIGn
aEmp[5,3]:="9999.99" aEmp[5,4]:=((1 .T.} aEmp[5,5]:=(II .T.} aEmp[5,6]:=7 aEmp[5,7]:="N" aEmp[5,8]:=5
aEmp[5,2l:=(ll
,
I
nCpos:=5 aCpos:= a m p
Procesos[1,2]:={ll .T.) Pr~sos[2,2]:={ 11 .T.} Procesos[3,2]:={Il .T.} Procesos[4,2]:=(IJ .T.} Procesos[5,2]:={IJ .F.} Pr-[6,2]:={ 11 .T. )
PROCEDURE IndexEmpleados() Continua(20,25,{11 IndxGral("EMPLEADO","EMPLEADO", ""P")) , ;
{ 11 NIL},""DESEA INDEXAR?") REm
11 ....................................................................... I/ :::: Rutinas de mantenimiento, reportes e indexacitn de areas :::::: // ....................................................................... .......................................................................
FUNCTION BrowAreas()
SELECTO) N Areaparaareasdetrabajo IF NET_USE("AREAS",.F.,TpoNet)
ELSE
ENDIF
SET INDEX TO AREAS
RETURN (NIL)
aAreas:= ARRAY(2,8)
aAreas[l,l]:="AREA" aAreas[ly2]:={ll CVEAREA) aAreas[l,3]:="!" aAreas[l,4]:= (11 .T.] aAreas[l,5]:= (11 ValAreaO) aAreas[ly6]:=l
aAreas[l,8]:=1 aAreas[l,7I:="C"
aAreas[2,1]:="NOMBRE AREA" aAreas[2,2]:={(l NOMAREA} aAreas[2,3]:=REPLICATE ("!",18)
aAreas[2,4]:={ll .T.} aAreas[2,5]:={II ValidaNombre("CADENA NO PERMITDDA")} aAreas[2,6]:=18 aAreaS[2,7]:="CW aAreas[2,8]:=2
nCpos:=2 aCpos:= aAreas
FVocesos:= ARRAY(6,2) Procesos[l,l]:={ll Altaso> Procesos[2,1]:={ 11 Bajas()} Procesos[3,1]:={ll NIL) Procesos[4,1]:={~~ NIL} Procesos[S,l]:=(Il NIL) Procesos[6,1]:={ll Psalir(oWin)}
? I
Procesos[l,Z]:={II .T.} Procesos[2,2]:={Il .T.} Procesos[3,2]:={ 11 .F. } Pr0cesos[4,2]:={JI .F.} ptocesos[5,2]:={~~ .F.} Procesos[6,2]:={ll .T.}
PROCEDURE IndexAre@ Continua(20,25,{1 I IndxCM("AREAS","AREAS", "CVEAREA")),;
{ 11 NIL},""DESEA INDEXART) RETURN
I/ ....................................................................... /I :::: Rutinas de mantenimiento, reportes e indexaci#n de ::::: 11:::: proyectosdecontratodepersonaiacadembordinario ::::: // .......................................................................
.......................................................................
FUNCTION BrowOrden()
SELECT(6) I/ AreaparaEstructuraOrganica IF NET-USE("EST-ORG",.F.,TpoNet) SET INDEX TO EST-ORG
RETuRN(NIL) ELSE
ENDIF
SELECT(4) // Area para ordenes IF NET-USE("ORDEN",.F.,TpoNet)
ELSE
ENDIF
SET INDEX TO ORDEN
(NIL)
aOrden:= ARRAY( 10,8)
aOrden[l,l]:="No.ORDEN" aOrd@l,2]:={() NUMORD) aOrden[l,3]:=REPLICATE ("9",6) aOrden[l,4]:= {I1 .T.} aOrden[l,5]:= {I1 ValidaNumero(4, 1, "Cve Duplicada")} aOrden[1,6]:=6 a0rden[lY7]:="N" aOrden[l,8]:=1
aOrden[2,1]:="CVE PROG" aOrden[2,2]:={ 11 CVEPROG} aOrden[2,3]:=REPLICATE ("!",5) aOrden[2,4]:={II .T.} aOrden[2,5]:={II ValCad(6,l)) aOrden[2,6]:=5 aOrden[2,7]:="C" aOrden[2,8]:=2
a0rden[3,1]:="INVENT.EQtTIpo" aOrden[3,2]:={II CVEEQU) aOrden[3,3]:=REPLICATE ("!",18) aOrden[3,4]:={II .T.} aOrden[3,5]:={ll .T.} aOrden[3,6]:=18 aOrden[3,7]:="C" aOrden[3,8]:=3
aOrden[4,1]:="DESC.TRAB." aOrden[4,2]:= {I[ DESCTRAB} aOrden[4,3]:= REPLICATE ("!",a) aOrde1[4,4]:={ll .T.} aorden[4,5]:={ 11 .T.} aOrden[4,6]:=60 aOrden[4,7]:="C" aOrden[4,8]:=4
aOrden[5,1]:="MODELO EQUIPO" aOrden[5,2]:={ 11 MODEQU} aOrden[5,3]:=REPLICATE ("!",lo) aOrden[5,4]:={ll .T.} aOrden[5,5]:={ll ,T.} aOrden[5,6]:=10 aOrden[5,7]:="C" aOrden[5,8]:=5
aOrden[6,1]:="No.SERIE" aOrden[6,2]:={ 11 NUMSER} aOrden[6,3]:=REPLICATE ("!",lo) aOrden[6,4]:= { I 1 .T.} aOrden[6,5]:= {I! .T.} aOrden[6,6]:=10 aOrden[6,7]:="Cn aOrden[6,8]:=6
aOrden[7,1]:="FECHA SOL" aOrden[7,2]:=(1( FSOL} aOrden[7,3]:="99/99/99"
aOrden[7,4]:= (11 .T.} aOrden[7,5]:= (11 Vali&kcha(9O,"FECHA INVLIDA")) aOrden[7,6]:=8 aOrden[7,7]:="N" aOrden[7,8]:=7
aOrden[8,1]:="SOLICITANTE" aOrden[8,2]:={ll SOLICIT} aOrden[8,3]:=REPLICATE ("!",45) aOrden[8,4]:= (11 ,T.} aOrden[8,5]:= (11 ValidaNombre("CADENA NO PERMITIDA")) aOrden[8,6]:=45 aOrden[8,7]:="CH aOrden[8,8]:=8
aOrden[9,1]:="EXTENSION SOL" aOrden[9,2]:={ 11 EXTSOL} aOrden[9,3]:=REPLICATE ("9",4) aOrden[9,4]:= {I1 .T.} aOrden[9,5]:= (11 .T.} aOrden[9,6]:=4 aOrden[9,7]:="N" aOrden[9,8]:=9
aOrden[lO, l]:="EDO ORDEN" aOrden[ 10,2]:={ 11 EDOORD} aOrden[10,3]:="!" aOrden[ 10,4]:= { 11 EdoIniOrdO} aOrden[10,5]:= {I[ ValEdoord()} aOrden[10,6]:=1 aOrden[10,7]:="Cn aOrden[10,8]:=10
nCpos:=lO aCpos:= aOrden
Procesos[l,2]:={Il .T.} Procesos[2,2]:={I[ .T.} Prooesos[3,2]:={ 11 .T.} Procesos[4,2]:={ 11 .T. 1 frocesos[5,2]:={II .F.} -[6,2]:={ 11 .T.}
PROCEDURE Indexorden()
- ..~_"._ _I.~"""I~""̂L."- - . ". "- -
N ....................................................................... /I :::: Rutinas de mantenimiento, reportes e indexaci#n de ::::: /I :::: Proceso de ordenes ..... // .......................................................................
..... .......................................................................
FUNCTION BrowProcOrd()
SELECT(2) N Areaparaempleado§ IF NET_USE("EMPLEADO",.F.,TpoNet) SET INDEX TO EMPLEADO
ELSE
ENDIF REW(NIL)
SELECT(4) /I Areaparaordenes IF NET-USE("ORDEN",.F.,TpoNet)
ELSE
ENDIF
SET INDEX TO ORDEN
RETURN (NIL)
SELECT(5) I/ Area para proceso de ordenes IF NET-USE("PROCORD",.F.,TpoNet)
SET INDEX TO PROCORD ELSE
ENDIF RETURN(NIL)
aPr&d:= ARF¿AY(9,8)
aProcOrd[ l,l]:="NUM ORDEN" aPr&d[ 1,2]:=( 11 NUMORD} aProcOrd[l,3]:=REF+LICATE ("9",6) aProcOrd[l,4]:={ll .T.} aprocOrd[lY5]:=(ll ValidaNum(4, 1, "Orden",.F.)} aFW&rd[ 1,6] :=f3 aPr&d[l,7]:="Nn aProcOrd[l,8]:=1
aProcOrd[2,1]:="NUM EMP" aProcord[2,2]:=(ll NUMEMP} aprocord[2,3]:=~LICATE ("9",5) aproCord[2,4]:= {I1 .T.} aprocOrd[2,5]:= {I1 ValidaNum(2, 1, "Empleado",.F.)l aprocord[2,6]:=5 aproCord[2,7]:="Nn aFY&d[2,8]:=2
aProcOrd[3,1]:="NOM EMP" aProcOrd[3,2]:= (11 RetCpoS(2,1,Nu"p,{~~ NOMEMP),"NO"P")) aProcOrd[3,3]:= REPLICATE ("!",45) aProcOrd[3,4]:={/I RetEmpO}
I
aProcOrd[3,5]:={ll .T.} aProcOrd[3,6]:=45 aProcOrd[3,7]:="C" aProcOrd[3,8]:=0
aProcOrd[4,1]:="AREA" aprocOrd[4,2]:= (11 CVEAREA) aProcOrd[4,3]:="!" *-[4,4l:=oI RetArea()) aProcOrd[4,5]:={ll .T.} aProcOrd[4,6]:=1 aprocOrd[4,7l:="C" aProcOrd[4,8]:=3
aProcOrd[5,1]:="FlECHA INICIO" aptocord[5,2]:={ll FINI} aProcOrd[5,3]:="99/99/99" aProcOrd[5,4]:={II .T.} aProcOd[5,5]:={ 11 Validaf~ha(90,"~CHA INVALIDA")) aPro&d[5,6]:=8 aprocOrd[5,7]:="N" aProcOd[5,8]:=4
aProcOrd[6,1]:="FECHA TERMINO" aProcOrd[6,2]:={ 11 FFIN) aProcOrd[6,3]:="99/99/99" aProcOrd[6,4]:= (11 .T.] aProcOrd[6,5]:= (11 ValFechFin(4)) aProcOd[6,6]:=8 aProcOd[6,7]:="N" aProcOrd[6,8]:=5
aProcOrd[7,1]:="TOT HORAS" aProcOrd[7,2]:={ll TOTHRS) aprocOrd[7,3]:="999" aProcOd[7,4]:= (11 .T.) aProcOrd[7,5]:= {I1 .T.) aprocOrd[7,6]:=3 aProcOd[7,7]:="N" aProcOrd[7,8]:=6
aProcOrd[8,1]:="TIPO SERV" aProcOrd[8,2]:={ 11 TIPSER) aPr~[8,3]:="!" aprocord[8,4]:= (11 .T.) aProcOrd[8,5]:= (11 ValTipSer()) aProcOrd[8,6]:=1 aProcOd[8,7]:="C" aProcOrd[8,8]:=7
aProcOrd[9,1]:="OBSERVACIONES'* aProcOrd[9,2]:={ll OBS) aProcOrd[9,3]:=REPLICATE("!",20) aprocOrd[9,4]:= (11 .T.] aprocOrd[9,5]:= { 11 .T.} aprocOrd[9,6]:=20 aProcOrd[9,7]:="C" aprocOrd[9,8]:=8
nCpos:=9 aCpos:=aprocOrd
PROCEDURE IndexProcOrd(l Continua(20,25,{1 I IndxGral("PROCORD","PROCO~", "NUMORD")},;
{[I NIL},"'llESEA INDEXAR?") RETURN
FUNCTION BrowEstOrg()
SELECT(6) // AreaparaEstructuraorganica IF NET-USE("EST-ORG",.F.,TpoNet)
ELSE
ENDIF
SET INDEX TO EST-ORG
=TURN (NIL)
aEstOrg:= ARRAY(3,8)
aEstOrg[ 1,1] :="CVE EST ORG"
aEstOrg[l,3]:=REPLICATE ("!",5) aEstOrg[l,4]:={ll .T.}
aEstOrg[l,6]:=5
aEstOrg[l,8]:=1
aEstofg[l,2l:={ll E-0)
aEstorg[l,~1:=~ll .T.}
aEstOrg[ 1,7] :="C"
aEstOrg[2,1]:="DESCRIPCI0Nw aEstOrg[2,2]:= { 11 DESCRIP} aEstOrg[2,3]:= REPLICATE ("!",30)
aEstOrg[2,4]:={ I ] .T. ) aEstOrg[2,5]:={(l .T.) aEstOrg[2,6]:=30 aEstOrg[2,7]:="C" aEstOrg[2,8]:=2
aEstOrg[3,1]:="CVE OFICINA" aEstOrg[3,2]:={ll CVEOF} aEstOrg[3,3]:=REPLICATE ("!",7) aEstOrg[3,4]:= {I1 .T.) aEstOrg[3,5]:= {ll .T.} aEstOrg[3,6]:=7
aEstOrg[3,8]:=3 aEStorg[3,7]:="C"
nCpos:=3 aCpos:= aEstOrg
Procesos:= ARRAY(6,2) Procesos[l,ll:={ll Altasol Procesos[2,1]:={IJ Bajas(.F.)l Procesos[3,1]:={~~ EditReco} Procesos[4,l]:={ll PrwBus(5)) Pr~[5,1]:={~~ NIL) Procesos[6,1]:={Il PSalir(oWin))
Procesos[l,2]:={ll .T.} Pmxsos(2,2]:={ll .T.) Procesos[3,2]:={Il .T.} Procesos[4,2]:={II .T.} Procesos[5,2]:={II .F.} Procesos[6,2]:={II .T.}
ManejaDBF(7,1,56,78,Procesos,aEstOrg,TSTRU~ ORGANIC!A"):show()
PROCEDUFEIndexEstOrg(j Continm(20,25,{1 I Indxcral("EST-ORG","EST-ORG", "E-O")),;
{I1 NIL),""DESEA INDEXAR?") RETURN
// ....................................................................... N ::: Rutinas de mantenimiento, reportes e indexaci$n de usuarios ::::: // ....................................................................... .......................................................................
FUNCTION BrowUsuariosO
I
SELECT( 1) IF NET-USE("USUAR.IOS",.F.,TpNet)
ELSE
ENDIF
SET INDEX To USUARIOS
RETURN(d)
aUsuarios:= ARRAY(5,8)
aUsuarios[ 1,1] :="NUM.DE USUARIO" aUsuarios[ 1,2]:={ 11 USUARIO} aUsuarios[l,3]:="99999" aUsuarios[ 1,4]:={ 11 .T.} aUsuarios[lY5]:={ll .T.} aUsuarios[l,6]:=5 aUsuarios[ 1,7] :="N" aUsuarios[1,8]:=1
aUsuarios[2,1]:="NOMBRE DE USUARIO" aUsuarios[2,2]:={l) NOMBRE} aUsuarios[2,3]:=REPLICATE("!",40) aUsuarios[2,4]:={ll .T.} aUsuarios[2,5]:={ll .T.} aUsuariOs[2,6]:=40 aUsuarios[2,7]:="C" aUsuarios[2,8]:=2
aUsuarios[3,1]:="CLAVE DE USUARIO aUsuarios[3,2]:={)l CVE-USR} aUsuarios[3,3]:=REPLICATE("!",lO) aUsuarios[3,4]:={II .T.) aUsuarios[3,5]:={II .T.} aUsuarios[3,6]:=10 aUsuarios[3,7]:="C" aUsuarios[3,8]:=3
aUsuarios[4,1]:="NIVEL" aUsuarios[4,2]:={Il NIVEL} aUdos[4,3]:="!" aUsuarios[4,4]:={II .T.} aUsuarios[4,5]:={ll .T.) aUsuarios[4,6):=1 aUsuarios[4,7]:="C" aUsuarios[4,8]:=4
aUsuarios[5,1]:="FECHA DE VENCIMIENTO" aUsuarios[5,2]:={ll FECHA-CVE} aUsuarios[5,3]:="99/99/99" aUsuarios[5,4]:=(ll .T.} aVsuarios[S,S]:={ll .T.} aUsuarios[5,6]:=8 aUsuarios[5,7]:="CC" aUsuarios[5,8]:=5
nCpos:=5 aCpos:= ausuarios
Procesos[l,2]:={Il .T.} Procesos[2,2]:={ I\ .T.} Procesos[3,2]:={ll .F.} Procesos[4,2]:={ll .T.} Procesos[5,2]:={ll .F.} Procesos[6,2]:={(l .T.}
ManejaDBF(7, 1,56,78,Procesos,aU&my"USU~
PROCEDURE IndexUsuariosO
J0S"):show
I
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
STATIC FUNCTION Alta@ Refresca(.T.)
RETURN (nil)
nLencad:=LEN(cValor) ar-aux:=ARRAY(nL.enCad) RetVal:=SPACE(O)
g:= GetNew(nFila,nCol, { IpI IF(PCOUNT()=O,cValor,cValor:=p)))
g:Picture:=aCpos[Cp,3] g:varPut(cValor) g:preBlock:=EVAL(aCpos[Cp,4])
IF READINSERT() // Forzamos la sobreescritura READINSERT(.F.) SetcurSor(2)
ELSE READINSERT(.T.) SetCursor(3)
ENDIF g:setFocus()
IF g : v WdX=.T.
Salida:= .F. ELSE
ENDIF
*IF g:TypeOut // este if hace que la &cion tenga salida automatica * EXIT *ENDIF
nTecla:=INKEY(O)
DO CASE CASE nTecla==K-ESC
nTeclaEsc:=.T. m-w) EXIT
CASE nTecla=K-ENTER
CASE nTecla=K-Lm
CASE nTecla=K-RIGHT
CASE nTecla=K-BS
CASE nTecla=K-DEL
CASE nTecla=K-W
g:lefto
g:Right()
g:backspaceo
g:Delet@
DO CASE CASE Cp=l
PosAnt:=.F. Cp:=l TONE(600,4) RETuRN(NIL)
PosAnt:=.F. Cp:=l B-W)
c y 2 RETuRN(NIL)
CASE C y 2
OTHERWISE
ENDCASE
Set C m r off CASE nTecla=K-DOWN
IF ! (EV~(~CP~S[CP,W) IF (aAux[Cp]=.T.)
aAux[Cp]:=.F. ENDIF DO CASE
CASE Cp===l
OTHERWISE PosAnt:=.F.
"CP
RETuRN(NIL) ENDCASE
ENDIF IF (Cp==nCpos)
-CP TONE(600,4) RETuRN(NIL)
ELSE
ENDIF OTHERWISE
RETuRN(NIL)
I
. ""
IF nTecla>=32 .and. nTecla<=255 cTecla:= uppmycHR(nTecia)) IF (aCpos(Cp,l]="N" .and. (cTecla ="." .or. cTecla= ",")I
g:End() g:left()
ENDIF ar-auxjg:pos]=cTecla g:Overstrike(cTecla)
ENDIF ENDCASE
ENDDO
g:Assigno aB@Cp]:=g:varGet() Set Cwsor off
IF !(g:postE3lock=EVAL(aCpos[Cp,5])) IF (aAux[Cp]=.T.)
aAux[Cp]:=.F. ENDIF DO CASE
CASE Cp=l
OTHERWISE PosAnt:=.F.
-CP
RETuRN1NIL) ENDCASE
ENDIF
FOR n:=l TO nLencad IF (ar-aux[n]=NIL)
ar-aux[n]:=SPACE(l) ENDIF RetVal=RetVal+ar-aux[n]
NEXT
aAux[Cp]:=.T. RETURN(RetVal)
FUNCTION CmVentana() local i,r,c2, nbg,nXl,valor loca l~ngcpos
LongCpos:=MaxLoag(nCpos,aCpos,.T.) LongTit:= MaxLong(nCpos,aCpos,.F.)
nY l : = R O U N D ( ~ ~ ~ n C p o s * 4 ) ) / 2 , 0 ) ~ nY2:=(nCpos*2)+nYl+15
a l : = ROUND(((),O)-2 m:= LongCpos+LongTit+nX1+5
oWin := VWindowNew(nY1, nX1, nY2 ,m, O,WSDOUBLEBORDER+WS TITLE+; WS_QUiCK,HWJ3ITE, BLUE,"ALTAS")
-
r := 0Win:rows ; c2 := oWin:cols/2 ; nbg := oWin:bgClr
I
152975
oPBSave := VPushBtnNew(oWin, K-ALT-S, r-6, c2-14, r-3, c2-4, ; O,HIWHITE,RED, "&Sa€var") oPBSave:inactiveO 0PBSave:action := (11 PBSavdctO,RefkSC3(.F.)} oPBCan:=VPushBtnNew(oWin, K-mT-C, r-6, c2+3, r-3, c2+13,0,BLACYwHITE,;
Crealineas() RETURN(0Win)
"&Cancelar"):action := (Iself,oMJ Canmlar(self,oM) 1
PROCEDURE Crealineasf) FOR i:=l TO nCpos valor:=SPACE(aCpos[i,6]) VTextLineNew(oWin, i*2,2, O, BLACK, HIWHITE, aCpos[i,l]):refraho VTextLineNew(oWin, i*2, LongTit+3, O, BLACK, WHITE, valor):refresho
NEXT RETURN
PROCEDURE RefkSC3(mnd) LOCAL nTeclaEsc:= .F., i:=l, aEdLineas, aAw n IF amd=.T.
RegAnt:= RECNO()-l RegAct:=RECNO()-l //RegAnt oWin:=creaVentanaO oWin:show()
Credineas() ELSE
ENDIF
aEdLineas := array(nCp0s) aAux:=array(nCpos) aBd.=array(nCpos) FOR n:=l TO nCpos
NEXT aAw[n]:=.F.
VMouseOff() ~lOr(" ,W+, ," ) DO WHILE(i<= nCpos) IF(aAux[i]=.F.)
ELSE
ENDIF pos:=.T. Set Cursor on aEdlineas[i]:= GetLineas(i,LongTit+3,@Valor,@nTeclaEsc, Set Cursor off IF (nTeclaEs=.T.)
EXIT ENDIF
Valor:=SPACE(aCpos[i,6])
Valor:=aB~@]
IF (i=l .and. pos=.F.)
ENDIF ++i
ENDDO Set Cursor off VM0-0
--i
....,.... ." . . . . . . . . .
IF nTeclaEsc==.T. IFRegACFRegAnt
GoRegAnt+l oWin:delete()
oWin:delete() Go RegAct RefreshBrow()
ELSE
ENDIF ENDIF oPBSave:active() oPBsave:setFocus() oPBSave:refresh()
FUNCTION PBSaveAct() append blank FOR i:=l TO nCpos IF aCpos[i,8]==0
H i ENDIF campo=FELD(aCpos[i,8]) replace &campo with Convierte(w,aBfli ] )
NEXT COMMIT RegAct= RECNO() -(NIL)
STATIC FUNCTION CANCELAR(seKoM) IFRegACFRegAnt
Go RegAnt+l oWin:delete()
oWin:&lete() Go RegAct RefreshBrowO
ELSE
ENDIF RETURN (nil)
STATIC FUNCTION Convierte(cCampo,cValm) DO CASE
Case ValType(cCampo)="N"
Case ValType(cCampo)="C"
Case ValType(cCampo)="D"
return val(cValor)
return (cvalor)
return CtoD(cVal0r) ENDCASE m-m)
STATIC FUNCTION MaxLang(nCpos,-aCpos,TipoLong) local i,nTemp,nMayor:=O local aCpos
aCpos:= -aCpos IF Tipobng // Tipolong = .T. calcula longitud de campos
FOR i:=l to n C p nTemp:=aCpos[i,6] IF nMayor<nTemp
nMayor:=nTemp ENDIF
NEXT
FOR i:=l to nCpos ELSE // Tipobng = .F. calcula longitud de titula
nTemp:=LEN(aCpos[i, 13) IF nMayor<nTemp
nMayor:=nTemp ENDIF
NEXT ENDIF
RETURN(nMay0~)
PROCEDURE IndxGral(cNomDBF,cNomNTX,cLLave ) VMCurType(MC_HovRcLASS) IF NET-USE(cNomTlBF,.F.,TpoNet)
PACK INDEX ON Bicuave TO gtcNomNTX
ENDIF
USE
RETURN
~one(600,5)
V M ~ n P e W C - ~ O W
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PROCEDURE Tmp(nYW,nXW,Tpo,TexLin) LOCAL OWhOTL
oWin:= VWindowNew(nWN7nXW,nYW+5,nXW+2O,O,WS~QUICK+WS~DOUBLE~~ER,;
oTL:= VTextL,ineNew(oW~oWin:rows/2,oWin:~ls/2,TL~MlD,RED,WHITE,Te~in) oWin:show() TONE(450,Tpo) inkq.(Tpo) oWin:delete()
WHITE,GREEN,"")
RETURN
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ********e******** PROCFjOS DE BUSQUEDA .......................... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FUNCTIONProcBus(nLGet) LOCAL owinPC1 LOCAL oTL1, on2
............................................................................
FUNCI'ION ValiMecha(nAno,mensaje) LOCAL nDay,nMonth,nYear
IF (VALTYPE(g:varGet())="C") may:= VAL(SUBSTR(g:varGet(),1,2)) Month:= VAL(SUBSTR(g:varGet(),4,2)) nYear:= VAL(SuBSTR(g:varGetO,7,2))
cFecha:= DTOC(g:varGet()) nDay:= VAL@UBSTR(cFecha,1,2)) nMonth:=VAL(SUBS~(cF~~4,2)) nYear:=VAL(SUBSTR(cFecha,7,2))
ELSE
ENDIF
IF(nDay<l .or. nDay>31) Pausa(20,25,5,"FECHA INVALIDA") RETURN(.F.)
ENDIF IF(nMonth4 .or. nfrfonth>l2)
Pausa(20,25,5,"FECHA INVALIDA") RETURN(.F.)
ENDIF IF(nYear<nAno .or. nYear>99)
Pausa(20,25,5,me1qje) RETURN(.F.)
ENDIF RETURN(.T.)
FUNCTION ValFechAnt(pos)
IF !(ValiWecha(74,"FECHA INVALIDA")) RETURN(.F.)
ENDIF IF (aBUf=Ma)
IF(g:varGet()< FINGRESO) Pausa(20,20,5,"FECHA DE TERMINO MENOR QUE FECHA DE INICIO") RETURN(.F.)
ENDIF
IF (CTOD(g:vaTGetO)< CT~(aBuflpOs1)) ELSE
Pausa(20,20,5,"FEcHA DE TERMINO MENOR QUE FECHA DE INICIO") RETURN(.F.)
ENDIF
RETURN(.T.) ENDIF
FUNCI'ION ValFechFin@os) IF (VALTypE(g:wrGetO)="C")
ELSE
ENDIF IF cFecha==" / / "
RETURN(.T.)
cFecha:=g:varCktO
cFecha:= DTOC(g:varCet())
ENDIF IF !(ValidaFecha(74,"FECHA INVALIDA"))
ENDIF RETURN(.F.)
IF (aF3uf===NL) IF(g:varG&()< F-INICIO)
Pausa(20,20,5,"FECHA DE TERMINO MENOR QUE FECHA DE INICIO") RETURN(.F.)
ENDlF
IF (CTOD(g:varGetO)< CTOD(aBuflposl)) ELSE
Pausa(2OY2O,5,"FECHA DE TERMINO MENOR QUE FECHA DE INICIO") RETURN(.F.)
ENDIF
RETURN(.T.) ENDIF
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FUNCTION ValidaHora() LOCAL nHora,nMin
nHora:=VAL(SUBSTR(aEdLEdLineas[2]:varGetO,l,2)) nMin:=VAL(SUElSTR(aJZdLineas[2]:varGetO,4,2)) IF(nHora4 .or. nHoW24)
Pausa(20,25,5,"HORA INVALIDA") RETURN(.F.)
IF(nMin>59) ELSE
Pausa(20,25,5,"€-IORA INVALIDA") RETURN(.F.)
ENDIF ENDIF RETURN(.T.)
FUNCTION ValidaPrevioO LOCAL nHoraC,nMinC,nHoraP,nMinP
IF(nHoraP4 .or. nHorap>24) Pausa(20,25,5,"HORA INVALIDA") RETURN(.F.)
IF(nMitm-59)
RETURN(.F.)
ELSE
Pausa(20,25,5,"HORA INVALIDA")
mn? ENDIF
IF (nHmP>nHOraC)
Pausa(20,25,5,"HoRA DE PREVIO MAYOR QUE HORA DE CITA") RETURN(.F.)
IF (nHOraF==nHOraC) I F ( n " h C )
ENDIF
Pausa(20,25,5,"HORA DE PREVIO MAYOR QUE HORA DE CITA") RETURN(.F.)
ENDIF ENDIF RETURN(.T.)
FUNCTION ValidaDocO LOCAL TipoDoc
TipDoc:=aEdLineas[6]:mrGetO IF(TipoDoc!="C" .and, TipoDoc!="O")
Pausa(20,25,5,"ORIGINAL 6 COPIA (OK)") RETURN( .F.)
ENDIF RETURN(.T.)
STATIC FUNCTION ValidaNm(nASekc, ind, matsaje,cont) LOCAL nClave, ValRet IF (vALTYPE(g:varGet())="N")
nClave:=g:varGet() ELSE nClave:=VAL(ALLTRIM(g:varGetO))
ENDIF ValRet:=EstaS(nASelec, nclave, ind) IF !ValRet IF !writ
Pausa(20,25,5, Mensaje + 'I no dado de alta") RETURN(.F.)
ELSE Pausa(20,25,5, Mensaje + " no dado de alta") *lSalvar:=.T. RETURN(.T.)
ENDIF ENDIF RETURN(.T.)
STATIC FUNCTION ValProcOrd(nASelec, mi, mensaje,cont) LOCAL nclave, ValRet IF (VALTYPE(g:varGet())=="N")
nClave:=g:varGetO ELSE nClave:=VAL(ALLTRIM@:varGet()))
ENDIF ValRet:=EstaS(nAS, &lave, ind) IF ! v a & IF !cont
Pausa(20,25,5, Mensaje + " no dado de alta") RETLTRN(.F.)
ELSE Pausa(20,25,5, Mensa. + " no dado de alta") *lSalvar:=.T.
RETURN(.T.) ENDIF
ENDIF RETURN(.T.)
STATIC FUNCTION ValAreaO LOCAL oWindow,nCbntador,nTipo,ValRet aOpc:=ARRAY(S)
aOpc[l]:="(E)Electr#nica" aOpc[2]:="oTaller Mec nico" aOpc[3]:="(C)Vacio Criog,nico" aOpc[4]:="(V)Soplado de Vidrio" aOpc[5]:="(O)optico Analitica"
nTipo:=ALLTRlM(g:varGet())
DO CASE CASE nTipo=="E" Pausa(20,25,5,"Electr#Ncan) RETURN(.T.)
Pausa(20,25,5,"Taller Mec nico") "(.T.)
Pausa(20,25,5,"Vacio Criog,nim") RETURN(.T.)
CASE nTipo="V" Pausa(20,25,5,"?splado de Vidrio") RETURN(.T.)
CASE nTipo=="M"
CASE nTipo=="C"
CASE nTipo==="O" Pausa(20,25,5,"0ptm Analjtica") RETURN(.T.)
OTHERWISE ValRet:=MsgVent(aOpc) RETURN(.F.)
ENDCASE RETuRN(NIL)
STATIC FUNCTION ValTipSer() LOCAL oWindow,nCbntador,nTipo,ValRet aOpc:=ARRAY(5)
aOpc[ l]:="(R)Reparacl$n" a O p c [ 2 ] : = " ( I ) I # n " aopc[3]:="(A)Adqtacion" aOpc[4]:="@)d1senO" a o p c [ 5 ] : = " ( C ) C $ n n
nTipo:=ALLTRIM(g:varGet())
DO CASE CASE nTipo=="R"
Pausa(20,25,5,"Reparaci#nn) RETURN(.T.)
CASE n T i 7 " I "
P a u s a ( 2 0 , 2 5 , 5 , " I $ n n ) RETURN(.T.)
Pausa(20,25,5,"Adaptaci$nn) RETURN(.T.)
CASE nTipo=="A"
CASE nTipo==="D" Pausa(20,25,5,"DiseRY) -(.T.)
Pausa(20,25,5,"Construcci$n") RETURN(.T.)
CASE nTipo=="C"
OTHERWISE ValRet:=MsgVent(aopc) RETURN(.F.)
ENDCASE RETuwNw
STATIC FUNCTION ValidaEdoCivil() LOCAL ccampo cCamp:=ALLTRIM(g:varGet()) DO CASE
CASE dampo"="S"
CASE &o=="C"
OTHERWISE
Pausa(20,25,5,"So1teroM)
Pausa(20,25,5,"Cn)
Pausa(20,25,5,"SolterdCasado (S/C)") RETURN(.F.)
ENDCASE RETURN(.T.)
STATIC FUNCTION ValEdoL.ab0 LOCAL damp
cCampo:=ALLTRIM(g:V¿UGet())
DO CASE CASE ccampo="A"
CASE ccampo="B"
CASE cCampo=="L"
OTHERWISE
Pausa(20,25,S,"Activo,')
Pausa(20,25,5,"Bajan)
Pausa(2O,25,5,"Licencian)
Pausa(20,25,5,"(A/BL) Activo/Baja/Licencia") RETURN(.F.)
ENDCASE RETURN(.T.)
STATIC FUNCTION ValidaNombre(mensa.) LOCALccampo
ccamp:=ALLTRIM(g:varGet()) IF
Pausa(20,25,5,mensaje) RETURN(.F.)
ENDIF RETURN(.T.)
STATIC FUNCTION ValidaNumero(area,ind,Mensaje) LOCAL nCampo, ValRet
nCampo:=VAL(ALLTRJM(g:varGet())) IF (ncampo==o)
RETURN(.F.) Pausa(20,25,5,"VALOR NO PERMITIDO")
ENDIF ValRet:=EstaS(area, nCampo, ind) IFValRet
Pausa(20,25,5,mensaje) RETURN(.F.)
ENDIF RETURN(.T.)
STATIC FUNCTION ValidaCadena(nLenCp0, mensaje, nArea, nord) LOCAL ccampo cCampo:=ALLTRlM(g:valGet()) valor:=PADR(cCampo, nLenCp0) IF (ccam""")
Pausa(2OY25,5,"Clave Invalids") RETURN(.F.)
ENDIF ValRet:=EstaS(nArea,cCampo,nOrd) IF ValRet
Pausa(20,25,5,men~je) RETURN(.F.)
ENDIF RETURN(.T.)
STATIC FUNCTION ValidaContrato() LOCAL oWindow,nContador,nTipo,ValRet aOpc:=ARRAY(6)
aOpc[l]:="(I)Ingreso tiempo indetemmado aOpc[2]:="@)ingreso tiempo determinado" aOpc[3]:="(A)Ascem escaldonario" aOpc[4]:="(R)Prorroga" aOpc[5]:="(C)Cambio de adscripci#n" aOpc[6]:="(P)Permuta"
- N
nTipo:=ALLTRIM(g:varGet())
DO CASE CASE nTipo=="I"
Pausa(20,25,5,"Ingreso tiempo indeterminado") RETURN(.T.)
Pausa(20,25,5,"Ingreso tiempo determinado") F¿ETlJRN(.T.)
CASE nTipo==="A"
CASE nTipo=="D"
Pausa(20,25,5,"Ascenso escaMonario") RETURN(.T.)
CASE nTipo=="R" Pausa(20,25,5,"F'rorrogan) RETURN(.T.)
CASE nTipo=="C"
RETURN(.T.)
Pausa(20,25,5,"Permutan) RETURN(.T.)
Pausa(20,25,5,"Cambio de adscripcifin")
CASE nTipo=="P"
OTHERWISE ValRet:=MsgVent(aOpc) RETURN(.F.)
ENDCASE R E T u R w w
STATIC FUNCTION MsgVent(aMsg) LOCAL oWindow,ncontador
nLenArr:=LEN(aMsg) oWindow:= VWindowNew(21,41,35,72,1000,WS-DOUBLEBORDER+WS-QWCK,;
WHITE,GREEN) VTextLineNew(oWi~w,O,4,O,GREEN,WHITE,"MOVIMIENTOS VALIDOS") FOR nContador:=l TO nLenArr VTextLineNew(oWindow,nContador*2,O,O,RED,WHITE,aMsg[nContador])
NEXT oWindow:show() TONE(450,5) inkeY(5) oWindow:delete()
RETuRN(NIL)
*
FUNCTION No")
RETURN(.F.) *Pausa(20,25,5,"Camp no modificable")
STATIC FUNCTION ValEmpO *LOCAL nEmp, nDias0, cDias0 *nDiaso:=o IF !ValidaNum(2, 1, "Empleado",.F.)
ENDIF RETURN(.F.)
RETURN(.T.)
STATIC FUNCTION ValEcOt() LOCAL nElnp, miaso, C D i a S o nDiaso:=o nEmp:=VAL(ALLl"(aEh@l])) 43:varGet()N *b:={ 11 NOMEMF'} *cContCpo:=ALLTRIM(RetQoS(2,l,nEmp,b,"NO"P")) *Pausa(20,25,5,cContCp) GO TOP SEEK nEmp IF FOUND()
DO WHILE !EOF() .AND. nEmp==NU"EMF' nDiaS0 += Nuh4DIAs SKIP
ENDDO ENDIF IF nDias0 = 10
cDiasO:=STR(nDias0, 2) Pausa(20,25,5,"Eml& con "+cDiasO+" dps mn#micos otorgados") ValRet:=.F.
ValRet:=.T. ELSE
ENDIF RETuRN(valRet)
STATIC FUNCTION ValDiaEc() LOCAL ValRet, nDias0, nEmp, nTotDias nDiasO:=o nEmp:=VAL(ALL'l'"(Sfll])) nTotDias:=VAL(ALLTRIM(g:va&et())) IF (nTdDias=o)
Pausa(20,25,5,"VALOR NO PERMITIDO") RETUW(.F.)
ENDIF GO TOP SEEK nEmp IF FOUND0
DO WHILE !EOF() .AND. nEmp==NUMEMP nDias0 += NUMDIAS SKIP
ENDDO nTotDias+=nDiasO
ENDIF IF nTotDias > 10
cDiasO:=STR(nDiasO, 1) Pausa(20,25,5,"Excede, dias otorgados "+cDiaso) ValRet:=.F.
ValRet:=.T. ELSE
ENDIF RETuRN(valRet)
STATIC FUNCTION ValNivel0 LocALccampo
ccampo:=ALLTRIM(g:va&et~) DOCASE
CASE cCampo="A"
CASE cCampo=="B"
CASE cCampo="C"
CASE d h ~ ~ = " l ) "
CASE -E"
*Pausa(20,25,5,"Nivel A")
*Pausa(20,25,5,"Nivel B")
*Pausa(20,25,5,"Nivel C")
*Pausa(20,25,5,"Nivel D")
*Pausa(20,25,5,"Nivel E")
CASE cCampo="U"
OTHERWISE Pausa(20,25,5,"Nivel UNm")
Pausa(20,25,5,"Niveles valida: A/B/C/D/EAJ") RETURN(.F.)
ENDCASE RETURN(.T.)
STATIC mTNCTlON VaIEd&d() LOCAL oWindow,nContador,nTipo,VaIRet aopc:=ARRAY(4)
aOpc[l]:="(R)Recíbida" aOpc[2]:="(A)Asignada" aOpc[3]:="(E)En reparaci#n externa" aOpc[4]:="~Terminadan
nTipo:=ALLTRIM(g:varGet())
DO CASE CASE nTipo=="R"
Pausa(20,25,5,"Recibida") RETURN(.T.)
CASE nTipo=="A" Pausa(20,25,5,"Mgnada") RETURN(.T.)
Pausa(20,25,5,"En reparacitn externa") RETURN(.T.)
CASE nTipo=="T"
CASE nTipo=="E"
Pausa(20,25,5,"Terminadan) RETURN(.T.)
OTHERWISE ValRet:=MsgVent(aOpc) RETURN(.F.)
ENDCASE RErnCNIL) RETURN(.T.)
STATIC FUNCTION RetEmpO LOCAL nEmp,nomRet
nEmp:=VAL(ALLTRIM(m2])) nomRet:=RetCpoS(2,1,nEmp,{ll NOMEMP},"NOMEMP") g:varPut(nomRet)
RETURN(.T.)
STATIC FUNCTION RetArea() LOCALnEmp,areaRet nEmp:=VAL(ALLTRIM(al3*2])) are9Ret:=RetCpoS(2,1,nEmp,{ll CVEAREA),"CVEAREA") g:varPut(areaRet)
RETURN(.T.)
STATIC FUNCTION EdoIniOrd()
RETURN(.T.) g:varPut("R")
STATIC FUNCTION ValExEmp(AreaP,Orden) LOCAL AraRet,OrdRet,nEmp,cNom,ValRet AreaRet= SELECTO SELECT(AreaP) IF Orden* Or- INDEXORD() SET ORDER TO Orden
ENDIF nEmp:=VAL(ALLTRIM(aE%al])) cNom:=ALLTRIM(g:varget()) SEEK nEmp IF !FOUM)O
Pausa(20,25,2,"DAndo de alta a: "*Nom) appendblank REPLACE NUMEMP WITH nEmp REPLACE N 0 " P WITH cNom REPLACE CARGOAA WITH "N" COMMIT *ValRet:=.T.
*Pausa(20,25,5,"Numero de empleado ya existe") *ValRet:=.F.
*ELSE
ENDIF IF TYPE("OrdRet")="N"
ENDIF SELECT(AraRet)
SET ORDER TO OrdRet
RETURN(.T.)
STATIC FUNCTION ValCad(nArea,nOrd) LOCAL cCampo, ValRet:=.F. ccamp:=ALLTRIM(g:varGet()) cvalor:=PADR(cCampo, nLenCpo) IF (ccampo="")
Pausa(20,25,5,"Clave Invalida")
IF EstaS(nArea,cCampo,n@d)
ELSE
ENDIF
ELSE
ValRet:=.T.
Pausa(20,25,5,"Clave no dada de alta")
ENDIF RETuRN(valRet)
I
i
Top Related