1.      Introducción a XBASEJOAW

 

XbaseJOAw es un sistema que se entrega en las aplicaciones de JOA Computación para que el usuario pueda recibir soporte telefónico al acceder las bases de datos de las mismas.

 

XbaseJOAw está localizado dentro de la carpeta DATA de cada aplicación.

 

Este programa debe ser autorizado al ejecutarse por primera vez.

 

El trabajar con este programa permite al usuario modificar los datos directamente sobre las tablas sin mayor validación por parte de ningún sistema. Por tal motivo SIEMPRE REALICE UN RESPALDO ANTES DE ENTRAR A XBASEJOAW de la carpeta DATA que esté revisando o modificando.

 

2.      Acceso a XBASEJOAW

 

Para entrar a XbaseJOAw entre a la carpeta DATA y ejecute XBASEJOAW.EXE.

 

 

 

 

3.      Definición de “base de datos”, de “tabla”, de “tabla libre”, de “campos”, de “registros”, de “order” y de “archivo de índices”

 

Base de datos.- Conjuntos de datos asociados entre sí. Cada conjunto de datos forma una tabla. Una base de datos está compuesta de un conjunto de tablas.

 

Tabla.- Conjunto de datos que está formado por campos y registros.

 

Campos.- El nombre de cada dato dentro de cada registro (corresponde a las columnas en una tabla).

 

Registro.- Es un conjunto de campos asociados entre sí (representados por un renglón de campos en la tabla).

 

Tabla libre.- Es una tabla que no pertenece a una base de datos.

 

Order.- Es el ordenamiento creado de una tabla de una base de datos en función a uno o más de sus campos. La información se presentará ordenada en función del (de los) campo (s) establecidos en el order. En Visual Fox Pro, todos los orders de una tabla (DBF) se guardan en el archivo CDX correspondiente. El order sólo existe en tablas que pertenecen a una base de datos.

 

Archivo de índices.-  Es un archivo que guarda un ordenamiento sobre un campo o varios campos de una tabla. Su función es semejante a la del order de una tabla que pertenece a una base de datos. Las tablas libres no pueden tener orders por lo que tienen que usar archivos de índices. (*.IDX).

 

 

4.      Abrir una tabla (1. abre)

 

Para abrir una tabla, elija la opción1: Abre y escriba el nombre de la tabla. La tabla puede ser una tabla de una base de datos o una tabla libre.

 

5.      Cambio de área (2. área)

 

En XbaseJOAw puede tener abiertas dos tablas simultáneamente. Una en area 1 y otra en área 2. Para cambiarse de área elija la opción 2: área. Observe como se ilumina de rojo  el área activa.

 

 

Puede cambiar nuevamente de área volviendo a elegir la opción 2: área.

 

6.      Ver el contenido de una tabla (3. ver)

 

Podrá ver el contenido de una tabla pulsando la opción 3: ver. Se mostrarán todos los campos de una tabla. Si desea ver los campos que están a la derecha use las flechas derecha e izquierda del teclado. Pulsar la flecha izquierda del teclado cuando el cursor está en el primer campo, lleva el cursor al último campo del lado derecho.

 

Pulsar con el ratón la primera columna de una tabla desplegada con la opción 3.Ver, dejará marcado el registro para que sea borrado por la instrucción PACK (observe en la imagen que la primera columna queda marcada de color negro). Además, cuando una tabla de InteRest (mr) o de InteHotel (mr) se abre con un order, automáticamente dejará de mostrar y considerar los registros marcados para borrar.

 

 

Para salir de esta opción pulse la tecla <ESC>.

 

Debe ser muy cuidadoso al estar en esta opción ya que está directamente trabajando sobre los datos contenidos en la tabla en cuestión. Si comete un error de pulsar una tecla y alterar un campo, si aún no ha movido el cursor de registro o no ha pulsado <ENTER> podrá pulsar la tecla <ESC> y el cambio no se realizará. En este caso, entre nuevamente a los datos para verificar si el cambio tuvo lugar o no.

 

Cuando quiera agregar un registro a una tabla estando en esta opción, pulse <CTRL><Y> y se agregará un registro en blanco. Sea cuidadoso al rellenar los datos de un registro creado de esta forma para mantener las validaciones que exige InteRest (mr) e InteHotel (mr).

 

1.      Cerrar una tabla (4. cierra)

 

Cuando deje de usar una tabla puede cerrarla usando la opción 4: cierra. El área en que estaba abierta esta tabla queda libre para abrir otra tabla. Antes de salir de XbaseJOAw, cierre las tablas abiertas en las dos áreas.

 

 

2.      Indexar una tabla (5. indexa)

 

Indexar una tabla funciona sobre una tabla libre. Aunque es posible indexar una tabla que pertenece a una base de datos recomendamos no hacerlo. Es preferible copiar la tabla de una base de datos en una tabla libre, cerrar la tabla que pertenece a la base de datos, abrir la nueva tabla libre e indexarla.

 

Al indexar, el sistema pregunta el campo (o combinación de campos) sobre los que va a indexar una tabla. El campo puede ser numérico, alfanumérico (carácter), de fecha o una combinación de ellos. Se debe ser cuidadoso de no mezclar tipos de campos en un índice o de lo contrario marcará error y no se generará el archivo de índice.  Si requiere generar un índice que esté compuesto por varios campos use las siguientes reglas:

 

 

Si clave es carácter y descr es carácter, entonces:

Index on clave+descr to indice1

será una expresión válida para generar un archivo de indice llamado indice1.idx

 

Si clave es carácter y monto es numérico, entonces:

Index on clave+monto to indice1

No será una expression válida ya que clave y monto son de distinto tipo. Para ello, podremos converir uno de los campos al tipo del otro. En nuestro ejemplo:

 

Index on clave+STR(monto,14,2) to indice1

Sera una expression válida, ya que STR(monto,14,2) convierte a monto en una expresión de caracteres con longitud 14 de los cuales 1 es el punto decimal y 2 son las posiciones decimales.

 

Si fecha es un campo de fecha y platillo es un campo de carácter:

Index on PLATILLO+DTOS(FECHA) TO indice1

Será una expresión válida ya que DTOS(FECHA) convierte a carácter una fecha con el formato de siglo (aaaammdd) al campo FECHA, por lo que la concatenación “+” es válida entre dos campos de caracteres, dando por resultado algo como “ABA00120060221” (suponiendo que platillo vale: ABA001 y la fecha es 21 de febrero de 2006.

 

Después de indexar una tabla y usar el comando 3:VER, o C. COPY, la información será desplegada o copiada respectivamente, con el ordenamiento especificado en el índice generado (en nuestro ejemplo: PLATILLO+DTOS(FECHA)).

 

3.      Compactar una tabla eliminando registros marcados para borrar (6.  pack)

 

Los registros marcados para borrar, ya sea por la instrucción DELETE o por el uso del ratón en la primera columna cuando se usa la opción 3 VER o la opción 9 VER CAMPOS o mediante alguna acción de los sistemas InteRest (mr) o InteHotel(mr), serán físicamente desaparecidos al usar la instrucción 6: PACK.

 

Una vez que se usa PACK ya no se posible recuperar un registro eliminado.

 

En el caso de tablas libres, si el archivo de índices no está abierto, será necesario regenerar el índice al usar la instrucción pack. En el caso de tablas que pertenecen a una base de datos, normalmente el order se regenerará automáticamente, sin embargo, recomendamos ejecutar inmediatamente la opción “RECUPERACION DE ARCHIVOS POR FALLAS EN ENERGIA ELECTRICA” ya sea en InteRest ® o en InteHotel ® inmediatamente después de usar PACK, DELETE, o modificar datos directamente por XbaseJOAw.

 

4.       Relacionar una tabla con otra (7. relacionar)

 

Resulta útil relacionar dos tablas en casos en que en una tabla requiere de otra para mostrar información relacionada. Por ejemplo, en la tabla NOTVNDAS de InteRest (mr) se tiene la clave de los platillos vendidos en cada nota de venta pero no su descripción. Por otra parte, en la tabla MATERIA se tiene la clave de cada platillo y su descripción. Si quiero mostrar los nombres de los platillos vendidos en una cuenta debo relacionar la tabla NOTVNDAS con la tabla MATERIA.

 

Para lograr lo anterior, llamemos a MATERIA la tabla padre y a NOTVNDAS la tabla hijo. (lo cual es lógico ya que todos los platillos vendidos en NOTVNDAS debieron de haber salido de MATERIA).

 

En área 2 se debe abrir la tabla padre indexada o con un order sobre el campo que va a servir para relacionar las dos tablas. En nuestro ejemplo se abre en área 2 MATERIA con order MATERIA (este order está basado en el campo CLAVE) que es justo el que necesitamos para la relación con NOTVNDAS.

 

En el área 1 se abre la tabla hijo (no es necesario que tenga order o archivo de índice asociado). En nuestro ejemplo abrimos NOTVNDAS con order NOTVNDAS (el order notvndas está basado en el campo NOTVEN, nota de venta, lo que nos permitirá visualizar los platillos de una misma cuenta todos juntos).

 

Estando activa el área 1 se ejecuta esta opcion: 7 Relacionar y se arma la frase SET RELATION TO aquí se indica el campo de la tabla hijo que acciona sobre el campo de la tabla padre sobre el que existe el ORDER o el archivo de índice, se pulsa <ENTER> y aparece la frase armada. En nuestro ejemplo el campo se llama PLATILLO:

SET RELATION TO PLATILLO INTO MATERIA

 

Una vez que se relacionan dos tablas, aparece una raya en la parte inferior de la pantalla indicando que ambas tablas están relacionadas.

 

 

 

Una vez relacionadas las tablas, se puede pedir con la opción 9: ver campos, que muestre los campos de NOTVNDAS: NOTVEN, PLATILLO y que muestre los campos de materia: DESCR (esto último se especifica MATERIA.DESCR).

 

 

Obsérvese que los campos NOTVEN y PLATILLO provienen de NOTVNDAS y el campo DESCR proviene de MATERIA. Además, cuando se mueva de registro la tabla NOTVNDAS, automáticamente el registro en MATERIA se moverá al registro correspondiente cuya clave corresponda al platillo de NOTVNDAS (si existe, ya que si no existe se moverá al principio o al fin de archivo de MATERIA, este caso se analiza en el siguiente inciso).

 

5.      Mostrar los registros de una tabla que no aparecen en otra (8. sin relación)

 

Este inciso está relacionado con el anterior, por lo que le recomendamos haber leído el inciso anterior: relacionar una tabla con otra.

 

Cuando se quiere saber qué registros de una tabla no tienen un correspondiente en otra, se usa esta opción.

 

Siguiendo con el ejemplo del inciso anterior, si se desea saber qué registros de NOTVNDAS no están en MATERIA (como pasa comúnmente cuando se tienen dos bases de datos distintas para Punto de Venta y para Inventarios). Lo primero que debe hacerse es generar una relación entre NOTVNDAS y MATERIA, como se indica en el inciso anterior.

 

A continuación se elige la opción 8: sin relación para que el sistema muestre los registros de NOTVNDAS, cuyo campo PLATILLO no encuentra un correspondiente en MATERIA. XbaseJOAw pregunta: Indique el dato 1. Aquí se debe indicar el dato a desplegar de los registros de la tabla hijo (NOTVNDAS) que no tienen relación con la tabla padre (MATERIA). En nuestro ejemplo podríamos mostrar NOTVEN (nota de venta) y, a la pregunta indique el dato 2, elegir: PLATILLO y en el dato 3: FECHA y en el dato 4: TURNO. No hace sentido elegir campos de la tabla padre (MATERIA) ya que no existe correspondiente.

 

6.      Mostrar ciertos campos de una tabla o de dos tablas relacionadas (9. ver campos)

 

Al elegir esta opción, debe tener abierta una tabla en el área activa (la que esté marcada con rojo). Si desea obtener información de una tabla relacionada, debe tener abiertas dos tablas y seguir los pasos para relacionar dos tablas según se describe en este documento.

 

Al elegir esta opción XbaseJOAw pregunta: indique el dato1: elija un campo de la tabla activa o de la tabla relacionada. Si es de la tabla activa bastará con que escriba el nombre del campo. Si elige un campo de la tabla relacionada, escriba el nombre de la tabla relacionada, un punto  y el nombre del campo. El número máximo de campos a mostrar son 10.

 

Para salir de esta opción puse la tecla <ESC>

 

Podrá agregar registros a una tabla pulsando <CTRL><Y>. Sea cuidadoso de mantener las reglas que imponen los sistemas InteRest(mr) e InteHotel (mr) en el llenado de registros.

 

7.      Agregar registros al final de una tabla provenientes de otra tabla (A. append)

 

Si desea agregar registros provenientes de otra tabla, a la tabla que esté abierta en el área activa, podrá hacerlo usando esta opción. Los campos con el mismo nombre serán copiados y agregados como registros nuevos en la tabla activa.

 

Por ejemplo. Si notvndas contiene lo siguiente:

 

 

 

Ahora bien, copiamos estos registros a una tabla libre (llamémosla AMIGO) con la instrucción COPY como se explica adelante y después ejecutamos la instrucción APPEND FROM AMIGO FOR <ENTER>

 

 

Ahora bien, se ejecuta append from amigo for <enter>

 

 

Después de esto podremos ver la tabla con los registros agregados.

 

 

 

El complemento FOR de esta instrucción sirve para identificar algunos registros que cumplan la condición especificada y de esta manera no incorporar todos los registros de la tabla origen. En nuestro ejemplo, si repetimos la instrucción pero indicamos en la cláusula

FOR:  PLATILLO=”    21” entonces solo agregará los registros que cumplan esta condición.

 

 

y después de anexados los registros se observa así la información con la opción 9:

 

 

8.      Copiar registros de la tabla activa a otra tabla (C. copy)

 

Cuando se tiene una tabla abierta en el área activa y se desea copiar algunos o todos los registros de dicha tabla a una TABLA LIBRE se debe usar esta instrucción.

 

Lo primero que se debe hacer es abrir una tabla en el área activa. Después se debe ejecutar esta instrucción, indicando el nombre de la tabla destino. La tabla destino se creará o si ya existe se sobrescribirá. Debe tener mucho cuidado de no usar un nombre de una tabla de la base de datos de InteRest (mr) ni de InteHotel (mr) según sea el caso. Aquí en nuestros ejemplos hemos usado el nombre AMIGO, AMIGO1, AMIG, AMI, AM, como nombres de tablas libres que sabemos que no usa el sistema InteRest (mr) ni el sistema InteHotel (mr).

 

Al ejecutar la instrucción COPY, si la tabla destino ya existe, aparecerá un mensaje indicando este hecho:

 

 

 

Si no tiene inconveniente en sobrescribir este archivo responda “YES”, de lo contrario responda “NO” y el proceso de copia se detendrá.

 

Cuando desee copiar solo algunos registros que cumplan una condición utilice la instrucción FOR. Las opciones de la instrucción FOR son iguales para esta y las instrucciones que siguen por lo que se explican una sola vez más abajo.

 

9.      Marcar registros como borrados (D. delete)

 

Un registro se puede marcar para borrar con la opción 3: ver ó 9: ver campos (marcando uno a uno los registros deseados) o masivamente mediante esta instrucción.

 

Al ejecutar esta instrucción se debe tener abierta una tabla en el área activa. En ese momento se le preguntará los registros que quiere borrar mediante la cláusula FOR.

 

 

 

10.  Desmarcar registros como borrados (E. recall)

 

Esta instrucción permite desmarcar los registros que estén marcados como borrados, siempre y cuando no estén bajo el efecto de un order. Cuando un registro marcado como borrado está bajo el efecto de un order, no es mostrado y tampoco considerado en la instrucción RECALL.

 

Al ejecutar esta instrucción debe especificar los registros que desea desmarcar con la cláusula FOR.

 

11.  Terminar de usar XBASEJOAW (F. fin)

 

Al terminar de usar XbaseJOAw, es recomendable que cierre las tablas en las dos áreas. Al finalizar, elija Fin.

 

 

12.  Ir a un registro de una tabla (G. Go To)

 

Escriba un número de registro al que se quiera posicionar. Esta es una manera rápida de desplazarse en una tabla de muchos miles de registros.

13.  Localizar un registro de una tabla que cumpla un criterio determinado (H. locate)

 

Para hacer una búsqueda del primer registro que cumpla una condición específica utilice esta opción. El primer registro encontrado estará en función del ordenamiento presentado por el order o por el archivo de índice según sea el caso. Si no se tiene order o archivo de índice activo, entonces se encontrará el primer registro que cumpla la condición establecida en el FOR de acuerdo al orden físico en el que están grabados los registros.

 

 

14.   Listar todos o algunos de los registros de una tabla (L. list)

 

15.   Modificar la estructura de una tabla (M. Modify)

16.   Asociar una tabla a un “order  determinado para ver los registros ordenados en función del orden establecido por el “order”. (O. Order)

17.   Reemplazar el contenido de un campo en todos o algunos registros de una tabla  (R. Replace).

18.  Buscar un registro bajo el criterio establecido por el “order” o el “archivo de índices” (S. Seek).

19.  Totalizar todos o algunos de los registros numéricos especificados de una tabla en base a un agrupamiento dado por un campo. La tabla está asociada a un “order” o a un “archivo de índices” que ordena la tabla precisamente sobre el campo que queremos que sirva para agrupar y totalizar (T. Total).

20.  Borrar todos los registros de una tabla (Z. Zap).

21.  Exportar todos o algunos de los registros de una tabla a Excel. (X. Export).

22.   Instrucciones especiales para usar en FOR (para elegir algunos registros de una tabla) en algunas de las instrucciones explicadas anteriormente: LEN(), LEN(TRIM()), SPACE(), SPACE(6-LEN(TRIM())+TRIM(), MONTH(),  DAY(), YEAR(), DTOS(), SUBSTR(), STR(), >, <, >=, <=, < >, =, $ .AND. , .OR., STR(VAL(NOTVEN)+100000,6), RECNO(), VAL()

 

El identificar registros con la cláusula FOR está sujeto a las siguientes reglas:

 

  1. Si no se especifica nada en la cláusula FOR, se elegirán todos los registros de la tabla activa.
  2. El resultado de la evaluación de la cláusula FOR debe ser un valor TRUE (cierto) o FALSE (falso) (.T. ó .F.).
  3. Las reglas de valuación del “i lógico” y el “ó lógico” son las siguientes:

Cierto y cierto   produce cierto

Cierto y falso    produce falso

Falso y cierto    produce falso

Falso y falso     produce falso

 

Cierto o cierto   produce cierto

Cierto o falso    produce cierto

Falso o cierto    produce cierto

Falso o falso     produce falso

 

d. Len. Por ejemplo: FOR LEN(CLAVE)>3    se refiere a aquellos registros que tienen una clave con longitud mayor a 3. (aquí no quita los espacios a la izquierda ni a la derecha, por lo que se refiere realmente a la longitud del campo y no del dato grabado en el campo). Esta explicación es útil para el siguiente caso.

 

e. LEN(TRIM(CLAVE))>0. TRIM elimina los espacios a la derecha de la clave. ALLTRIM elimina los espacios a la izquierda y a la derecha de la clave. LEN(TRIM(CLAVE))>0 Se refiere a aquellos registros que tienen una clave con longitud mayor a cero después de quitar los espacios a la derecha de la clave. Un caso relevante de esto es relacionar dos tablas, por ejemplo NOTVNDAS relacionado con MATERIA. Si queremos establecer los registros que están en NOTVNDAS pero no en MATERIA, cuando la tabla padre es MATERIA y la tabla hijo es NOTVNDAS, y están relacionados sobre PLATILLO: LEN(TRIM(MATERIA.CLAVE))=0

 

f. SPACE(5) produce 5 espacios.

 

g. SPACE(6-LEN(TRIM(CLAVE)))+TRIM(CLAVE) PRODUCE LA ALINEACION POR LA DERECHA DE LA CLAVE CUANDO ESTA ES DE LONGITUD 6.

 

h. MONTH(FECHA)=1  Toma todos los registros que su mes es 1=enero.

 

i.DAY(FECHA)=15  Toma todos los registros que el día de la fecha sea 15.

 

j. YEAR(FECHA)=2006 Toma todos los registros con año de su fecha=2006.

 

k. DTOS(FECHA)>”20060115” elige los registros que su fecha es posterior al 15 de enero de 2006.

 

l. SUBSTR(GRUPPLAT,1,1)=”A” Toma todos los registros cuyo grupo de productos sea “A” (alimentos). O bien SUBSTR(GRUPPLAT,1,1) $ “ABVO” Toma todos los registros cuyo grupo de productos sea “A” ó “B” ó “V” ó “O”, esto esto es sólo productos de carta y subrecetas ignorando el caso “M” que es materia prima ya que sólo existen estos 5 casos en InteRest (mr).

 

m. VAL(NOTVEN), convierte a tipo numérico el valor de la nota de venta.

 

n. VAL(NOTVEN)+100000 suma 100000 al valor de la nota de venta.

 

o. STR(8,6) convierte el número 8 en un carácter con 5 espacios y un “8”.

 

p. STR(VAL(NOTVEN)+100000,6) suma al valor de NOTVEN, 100000. Si esto lo quisiéramos hacer solo para los registros cuya fecha es f1, donde f1=15/01/2006, entonces la instrucción quedaría así: REPLACE ALL NOTVEN WITH STR(VAL(NOTVEN)+100000,6) FOR FECHA=F1

 

q. .AND.  Si deseamos elegir las ventas del 15/01/2006 turno 1 deberíamos escribir (FIJANDO PRIMERO F1=15/01/2006) : FECHA=F1 .AND. TURNO=”1”

 

r. .OR. Si deseamos elegir las ventas del 15/01/2006 y del 16/01/2006 podríamos escribir (fijando F1=15/01/2006 y F2=16/01/2006): FECHA=F1 .OR. FECHA=F2   (De acuerdo a las reglas del ó lógico, estamos hablando de las veces en que esta evaluación sea CIERTA: y será cuando la fecha sea 15 ó sea 16 de enero de 2006).

 

s. RECNO(). Si deseamos elegir los registros 25630 al 27200, deberíamos escribir: RECNO()>=25630 .AND. RECNO()<=27200. La instrucción se puede escribir de forma equivalente: RECNO()>25629 .AND. RECNO()<27201

 

 

23.  Forma de referirse a un campo del área que no es la activa

 

Si la tabla de la cual vamos a referirnos a un campo  no está en área activa (por ej. FORPAG en ÁREA 2), y en el área activa (ÁREA 1) tenemos abierta la tabla de NOTVNDAS, en donde se nos solicite el dato del un campo de FORPAG, se deberá de escribir como sigue:

 

            FORPAG.CANTT (en donde CANTT es un campo de la tabla FORPAG).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<