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.
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).
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.
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=”

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).
El identificar registros con la cláusula FOR está
sujeto a las siguientes reglas:
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
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)>”
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 “
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).

<