PROYECTO TERMINAL DE INGENIERIA ELECTRONICA DE CONTROL DE ...148.206.53.84/tesiuami/UAM7826.pdf ·...

49
PROYECTO TERMINALDE INGENIERIA ELECTRONICA DE CONTROL DE INSTRUMENTACION Y TALLERES" ASESOR: ING. YUDIEL PEREZ ESPEJO 152975 REALIZADO POR: AYALA 1 Junio 1994.

Transcript of PROYECTO TERMINAL DE INGENIERIA ELECTRONICA DE CONTROL DE ...148.206.53.84/tesiuami/UAM7826.pdf ·...

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.

.. ._" ".

CODIGOS FUENTES

"SISTEMA DE CONTROL DE INSTRUMENTACION Y TALLERES"

** ** ** ** ** ** ** ** ** ** ** ** **

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 &ampo=="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