# Navegación por facturas

## Navegación por facturas

### Conceptos a tratar

* [Enlace a hermano contiguo](../../proyectos-objetos-y-editores/proyecto-de-datos/tabla/enlace#hermano-contiguo).

### Descripción

En nuestra facturación, una vez abierta una factura, queremos poder navegar a otras facturas siguiendo los siguientes criterios:

* Anterior y siguiente factura por código.
* Anterior y siguiente factura por fecha.
* Anterior y siguiente factura del mismo cliente por fecha.
* Anterior y siguiente factura del mismo cliente y de la misma fecha.&#x20;

### Esquema de la aplicación

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/YTBjUgBp5nubjeMuiHpL/esquema_navegacion.png)

Comenzamos con un esquema básico de FACTURAS y CLIENTES, ambas de tipo [maestro normal con clave numérica](../../proyectos-objetos-y-editores/proyecto-de-datos/tabla#maestro-normal-con-clave-numérica).

Ahora bien: ¿Cómo las enlazamos? Para verlo hemos de enunciar las siguientes frases:

* "Varias facturas pueden ser emitidas al mismo cliente"
* "Una factura sólo puede ser emitida a un cliente".

Está claro que FACTURAS va a ser un [plural](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/plural) de CLIENTES ([singular](../../proyectos-objetos-y-editores/proyecto-de-datos/tabla/enlace#maestro)), de modo que enlazaremos ambas tablas mediante un enlace singular-plural.

Al establecer el enlace, se crea automáticamente el [campo](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/campo) Clientes y el [índice](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/indice) Clientes en la tabla FACTURAS, mientras que en la tabla CLIENTES crea el [plural](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/plural) FACTURAS\_CLIENTES.

Ahora debemos establecer la navegación de una factura a otra.

Como todos los [enlaces](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/enlace), hacen uso de un [índice](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/indice), siendo esto lo primero que hemos de definir.

#### Navegación por número de factura

Para la navegación por número de factura ya tenemos el índice necesario, el índice ID, por lo que únicamente hemos de hacer será crear dos campos, ID\_ANT e ID\_SIG y definirlos como **enlaces** de tipo [Hermano contiguo](../../proyectos-objetos-y-editores/proyecto-de-datos/tabla/enlace#hermano-contiguo).

Elegiremos el **índice** ID, dejaremos las **partes comunes** a 0 y elegiremos la **dirección** correspondiente: _Anterior_ o _Siguiente_. De esta forma, la ficha se encontrará enlazada con el registro anterior por código y con el siguiente registro existente por código.

#### Navegación por fecha

Para poder acceder a la ficha anterior por fecha, en vez del índice ID, hemos de usar el [índice](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/indice) correspondiente al [campo](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/campo) fecha.

De igual forma que habíamos configurado los enlaces a hermano contiguo, en esta ocasión crearemos dos campos que usarán el **índice** FECHA para enlazar con el anterior y el siguiente registro. De nuevo, **las partes comunes** serán 0 en ambos.

#### Navegación por facturas de un cliente

Para enlazar con la factura anterior o siguiente del mismo cliente por fecha, debemos usar un [índice](../proyectos-objetos-y-editores/proyecto-de-datos/tabla/indice) que contenga ambos campos como [partes](../../proyectos-objetos-y-editores/proyecto-de-datos/tabla/indice#partes-índice) del índice, primero debe tener el campo CLIENTES y como segunda parte el campo FECHA . Para ello podemos crear un nuevo índice o añadir una nueva parte al índice CLIENTES ya existente.

Cuando definamos el **enlace** de tipo _hermano contiguo_, además de seleccionar el índice CLIENTES debemos definir una **parte común**. De esta forma, el enlace se realizará con aquel registro que tenga el mismo cliente en común con la ficha de partida, navegando de un registro a otro según la fecha de la ficha.

Cuando ya no existan más facturas del mismo cliente, bien hacia adelante o bien hacia atrás en el tiempo, no permitirá continuar con la navegación.

Si queremos que, además de navegar por las fichas que tengan el mismo cliente, lo hagan por las fichas que tengan la misma fecha, hemos de configurar los hermanos contiguos con tantas **Partes comunes**, como campos que queramos equivalentes.

En este caso serán dos partes comunes: Clientes y Fecha.

Usaremos de nuevo el índice CLIENTES la que habíamos añadido la parte FECHA. De esta forma, el enlace se realizará con aquel registro que tenga el mismo cliente y la fecha en común con la ficha de partida, navegando de un registro a otro según el orden de creación de los registros. Si queremos definir otro orden, nos basta añadir otra parte al índice que determine el orden.

En el control [botón](../proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario/controles-de-entrada/boton) del objeto [formulario](../proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario) encontraremos el comando [moverse al hermano](../../proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario/controles-de-entrada/boton#moverse-a-hermano) que nos permitirá desde un formulario de una ficha acceder al siguiente registro o al anterior según el enlace que definamos en el comando.

Así, podremos definir tantos botones como enlaces a hermano contiguo que hemos creado en la tabla.
