= iso 8859 1 q guia de las mejores pr=e1cticas de clarion

7
Tipos de Campos Acordarse siempre que lo que define el almacenamiento es la opción Characters, la opción Picture es solo como se va a mostrar Clarion Que se puede almacenar Byte (de 1 a 99) Short (de 1 a 9,999) Long (de 1 a 999,999,999) Decimal (de 1 a 9,999,999,999,999,999,999,999,999,999,999) String (de 1 a 4 Mega-Bytes) Para guardar hasta 99,999.99 se define un campo del tipo Decimal con un character de 7 decimal 2 picture @N9.2 Para campos alfanuméricos grandes se puede usar CSTRING pero en characters hay que poner uno más del que se quiere almacenar Pictures para Fecha y Hora @D6 DD/MM/YYYY @D17 Fecha corta según formato Windows @D18 Fecha larga según formato Windows @T1 HH:MM @T4 HH:MM:SS @T7 Hora corta según formato de Windows @T8 Hora larga según formato de Windows Para todos los pictures si se especifica B esto hará que cuando el campo es cero se muestre blanco (@D6B), otros ejemplos comunes son @N10 <<,<<<,<<<# Ejemplo de CUIT @N_10 <<<<<<<<<# Decimal 11 Picture @P##-########-#P @N010 ########## los guiones nunca son almacenados Para el ingreso de datos la forma mas sencilla es la siguiente Campos Entry Mode 1

Upload: victor-david-montanez

Post on 30-Dec-2015

28 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

Tipos de Campos

Acordarse siempre que lo que define el almacenamiento es la opción Characters, la opción Picture es solo como se va a mostrar

Clarion Que se puede almacenar

Byte (de 1 a 99)

Short (de 1 a 9,999)

Long (de 1 a 999,999,999)

Decimal (de 1 a 9,999,999,999,999,999,999,999,999,999,999)

String (de 1 a 4 Mega-Bytes)

Para guardar hasta 99,999.99 se define un campo del tipo Decimal con un character de 7 decimal 2 picture @N9.2

Para campos alfanuméricos grandes se puede usar CSTRING pero en characters hay que poner uno más del que se quiere almacenar

Pictures para Fecha y Hora

@D6 DD/MM/YYYY

@D17 Fecha corta según formato Windows

@D18 Fecha larga según formato Windows

@T1 HH:MM

@T4 HH:MM:SS

@T7 Hora corta según formato de Windows

@T8 Hora larga según formato de Windows

Para todos los pictures si se especifica B esto hará que cuando el campo es cero se muestre blanco (@D6B), otros ejemplos comunes son

@N10 <<,<<<,<<<# Ejemplo de CUIT

@N_10 <<<<<<<<<# Decimal 11 Picture @P##-########-#P

@N010 ########## los guiones nunca son almacenados

Para el ingreso de datos la forma mas sencilla es la siguienteCampos Entry Mode

1

Page 2: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

Numéricos InsertFecha OverwriteString OverwriteRelación tipos de campos entre Clarion y MS-SQL ServerCLARION MS-SQL SERVERByte Bit (de 0 a 1)Byte Tinyint (de 1 a 99)Short SmallInt (de 1 a 9,999)Long Int (de 1 a 999,999,999)Decimal Decimal (999.99 se define como: (pres 5 esc 2)String CharCString VarCharDate DateTime (Fecha y Hora)Time DateTime (Fecha y Hora)Para un buen funcionamiento de las aplicaciones todos los índices deben ser Únicos y los campos se deben definir sin el atributo NULL

Manejo de Tablas

Acceso a un registro CLEAR(TBL:RECORD) TBL:CAMPO = XXXXX IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN !El registro existe ELSE !El registro no extite END

Insertar un registro CLEAR(TBL:RECORD) TBL:CAMPO = XXXXX IF Access:TABLA.Insert() <> LEVEL:BENIGN ! Error al crear el registro

Cambiar un registro CLEAR(TBL:RECORD) TBL:CAMPO = XXXXX IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN TBL:CAMPO = XXXXX IF Access:TABLA.Update() <> LEVEL:BENIGN !Error al actualizar el registro END END

Borrar un registro CLEAR(TBL:RECORD) TBL:CAMPO = XXXXX IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN Access:TABLA.DeleteRecord() !Alternativa 1 Relate:TABLA.Delete(0) !Alternativa 2 Delete(TABLA) !Alternativa 3 END

2

Page 3: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

Lectura secuencial CLEAR(TBL:RECORD) TBL:CAMPO = XXXXX SET(TBL:CLAVE,TBL:CLAVE) LOOP Until Access:TABLA.Next() OR TBL:CAMPO <> XXXXX !!!! END

Igualar los registros de dos tablas TB1:RECORD :=: TB2:RECORD :=: es una igualación en profundidad Esta instrucción iguala solo los campos que se llamen igual en ambas tablas independientemente de la posición de cada uno de ellos

Antes de abrir la ventana como saber si en el Form estoy en modo ADD-CHANGE-DELETE-VIEW

Window Manager - Init - Open the window (PR-8000) IF SELF.Request = InsertRecord IF SELF.Request = ChangeRecord IF SELF.Request = ViewRecord IF SELF.Request = DeleteRecord La última instrucción solo es valida siempre que el Form muestre el registro a borrar

Agregar código antes que el Form realice el ADD-CHANGE-DELETE

Window Manager - TakeCompleted (PR-5000) IF SELF.Request = InsertRecord IF SELF.Request = ChangeRecord IF SELF.Request = DeleteRecord

Agregar código después que el Form realizo el ADD-CHANGE-DELETE exitosamente

Window Manager - TakeCompleted (PR-5001) IF ReturnValue = Level:Benign IF SELF.Request = InsertRecord IF SELF.Request = ChangeRecord IF SELF.Request = DeleteRecord La última instrucción solo es valida siempre que el Form muestre el registro a borrar

Como salir un procedimiento antes de abrir la window RETURN Level:Fatal

Donde colocar código para hacer una validación en un campo en un procedimiento del tipo Form

Control Events – Accepted – Generated Code (PR-7000) IF Condicion BEEP MESSAGE('Texto del Error','Texto de la Ventana’,&| ICON:Exclamation,BUTTON:Cancel,BUTTON:Cancel,1) SELECT(?) CYCLE

3

Page 4: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

END

Si quiero tomar control de los botones del cuadro de mensajes CASE MESSAGE('Texto del mensaje’,’Texto de la Ventana’,&| ICON:Question,BUTTON:Yes+BUTTON:No,BUTTON:No,1) OF BUTTON:No SELECT(?) CYCLE OF BUTTON:Yes END

Como forzar la validación de un campo

Control Events – Selected – Generated Code (PR-4000) ?CAMPO{PROP:Touched} = TRUE

Como saber en la validación de un campo si se esta pasando cuando se presiono el botón OK IF NOT ThisWindow{PROP:AcceptAll} o IF NOT (Nombre de Ventana){PROP:AcceptAll}

Como saber si luego de que un control del tipo Field LookUp que accedió a un browse para validar se le dio Select IF GlobalResponse = RequestCompleted

Como colocar código en un Browse para cada registro leído

Local Objects – Browse on Tabla – SetQueueRecord (PR-2500)

Como filtrar un Browse antes de mostrarlo

Se puede hacer por record filter Si es mas complejo se puede hacer en

Local Object – Browse on Table – InitSort (PR-10000) IF Condicion = 1 BRW1.SetFilter('(TCON:CVP_B <> 0)') BRW1.ApplyFilter() END

Como filtrar un registro en un Browse o Reporte antes que se muestre

Local Objects – Browse on Tabla – ValidateRecord (PR-4500) IF Condition THEN RETURN Record:Filtered;END

Como controlar desde un Browse justo antes de llamar a un Form

Local Object – Browse on Table – Ask(Byte Request) (PR-4999) IF Request = InsertRecord

Como abrir una tabla en modo exclusivo

Colocar la tabla en OTHER TABLE

Window Manager - Init – Open Files (PR-7501) Relate:TABLA.Close

4

Page 5: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

Access:TABLA.SetOpenMode(12h);Relate:TABLA.Open Relate:TABLA.Close

O También abrir la tabla en modo exclusivo

Como ordenar una tabla para luego imprimirla en ese orden en un reporte

OpenReport – Code (PR-5000) ThisReport.SetOrder('TBL:CAMPO1',TBL:CAMPO2’,’-TBL:CAMPO3’) ThisReport.ApplyOrder()

CAMPO1 Y 2 en orden ascendente CAMPO3 en orden descendente

Como filtrar una tabla para luego imprimirla sin esos registros en un reporte

OpenReport – Code (PR-5000) ThisReport.SetFilter('TBL:CAMPO1 = XXXX’) ThisReport.ApplyFilter()

Tanto para el Order como para el Filter los campos a utilizar si no están pintados en el reporte tienen que estar definidos como HOT FIELDS

Como manejar un Browse con una clave compuesta por más de un campo e ir refrescándolo por cada cambio en esos campos

Clave de la Tabla

Empresa

Cliente

Fecha

Colocar en Range Limit siempre el último campo de la clave que se quiere limitar, en este caso Cliente

Si se cambia la Empresa colocar TBL:Empresa = GLO:Empresa BRW1.AddRange(TBL:Empresa) BRW1.ApplyRange() ThisWindow.Reset(True)

Si se cambia el Cliente colocar TBL:Cliente = GLO:Cliente BRW1.AddRange(TBL:Cliente) BRW1.ApplyRange() ThisWindow.Reset(True)

Como refrescar un Browse SETCURSOR(CURSOR:WAIT) BRW1.ResetFromFile() BRW1.ResetFromBuffer() ThisWindow.Reset(True) SETCURSOR

5

Page 6: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

Como ordenar un Browse antes de abrir la ventana

Local Objects – Browse on Tabla – InitSort (PR-10000) BRW1.SetOrder('TBL:CAMPO')

Como agregar otro ítem al PopUp menú de ABM del browse

Agregar un botón debajo de los estándar ADD-CHANGE-DELETE con atributo Hide

Window Manager - Init – Prepare Alert Key (PR-9001) BRW1.PopUp.AddItemMimic('Texto',?Boton)

Como borro un boton de update en ABM del browse

Window Manager - Init – Open the Window (PR-8000) BRW4.DeleteControl = 0

Como pararse en un browse de entrada en distintas partes

Window Manager - Init - (PR-9000) POST(Event:ScrollUp,?Browse) ! subir un registro POST(Event:ScrollDown,?Browse) ! descer un registro POST(EVENT:ScrollTop,?Browse) ! primer registro POST(EVENT:ScrollBottom,?Browse) ! ultimo registro

Para apretar un botón desde la lógica POST(EVENT:ACCEPTED,?Boton)

Colas en memoria (Queue)

Para recorrer toda una cola LOOP Q# = 1 TO RECORDS(COLA) BY 1;GET(COLA,Q#) !Codigo END GET(COLA,CAMPO) Busca un registro (El campo a buscar tiene que ser de la cola previamente igualado) ADD(COLA) Inserta un registro PUT(COLA) Modifica un registro DELETE(COLA) Borra un registro

Bloquear una Tabla AUX:TABLA_UseLogOut = Relate:A_STOPRO.UseLogOut Relate:TABLA.UseLogout = FALSE LOOP;LOGOUT(1,TABLA);UNTIL ERRORCODE() = 0 !Mi código COMMIT Relate:TABLA.UseLogOut = AUX:TABLA_UseLogOut

Validación de campos en Browse EIP

Local Object – EIP Manager for browse using ?Browse:1 – Take Completed (BYTE Force) (PR-4999) IF BRW1.Q.TBL:CAMPO <> 1 Return

6

Page 7: = Iso 8859 1 Q Guia de Las Mejores Pr=E1cticas de Clarion

END

Poner disable un campo del EIP por una condición

Local Object – EIP Manager for browse using ?Browse:1 – GetEdit (PR-5001) IF SELF.Req = ChangeRecord AND Self.Column = 1 AND TBL:MARCA <> 'E' ReturnValue = FALSE END

Agregar código antes que el EIP realice el ADD-CHANGE-DELETE

Local Object – EIP Manager for browse using ?Browse:1 – TakeCompleted Force (PR-4999) IF SELF.Request = InsertRecord IF SELF.Request = ChangeRecord IF SELF.Request = DeleteRecord BRW1.Q.COU:DESCRIPTION = CLIP(UPPER(BRW1.Q.COU:DESCRIPTION))

Agregar código después que el EIP realice el ADD-CHANGE-DELETELocal Object – EIP Manager for browse using ?Browse:1 – TakeCompleted (PR-5001)

IF ReturnValue = Level:Benign IF SELF.Request = InsertRecord IF SELF.Request = ChangeRecord IF SELF.Request = DeleteRecord

7