# Transacciones e identificadores Una transacción en el contexto del sistema ERP de Induxsoft es el registro de una operación amparada por un documento. Por ejemplo una venta (ticket, factura, etc.), un movimiento de inventario (vale), un pago de cliente (recibo), etc. Cada transacción se almacena en una o más tablas que a su vez están relacionadas generalmente a otras tablas. En R5, un Ticket (de venta) ocupa una fila en la tabla ‘venta’ y una o más filas en la tabla ‘dventa’. Por su parte, las tablas ‘venta’ y ‘dventa’ tienen relaciones (a través de claves foráneas) hacia otras tablas, por ejemplo ‘venta’ apunta a las tablas: cliente, cconsumo, foliosdocumentos, cdocumentos, cstatusfacturacion, etc. (Vea la referencia de la estructura de la base de datos). Para transportar transacciones, hay que determinar las filas de las tablas que habrá que llevar y cuáles no. Por regla general se llevarán las filas de las tablas en las que se almacenan datos que son integrantes como unidad indivisible de la operación y se omitirán aquellas referenciadas mediante claves foráneas. Para la implementación del transporte de transacciones se definirá un catálogo de transacciones que especificará cuáles filas deben llevarse y cuáles no, así como el mecanismo para reconstruir las claves foráneas partiendo del supuesto de que las filas que no se transportan existen en el destino, aun cuando tengan otra identidad. ## Identidad de las filas Cada fila tiene una clave primaria (sys_pk) y una clave global (GUID) (sys_guid). Adicionalmente, la mayoría de los catálogos (clientes, proveedores, productos, etc) tiene un código (clave alfanumérica). Por tanto, las claves foráneas apuntan generalmente a los valores del campo sys_pk (por cuestiones de rendimiento), pero si habrá que reconstruirlas en el destino, tendrá que basarse en la sys_guid, el código o cualquier otra columna (o columnas) que permitan establecer la identidad en ambas bases de dato (origen y destino). ### Ejemplo: El campo icliente de la tabla venta contiene el valor numérico (entero) de la clave primaria (campo sys_pk) de la tabla cliente. Para fines de transporte no puede usarse el valor que se tiene en icliente (en el origen) porque no hay garantía de que corresponda al mismo cliente en la base de datos destino. Por lo tanto, será más conveniente llevar en el campo icliente el sys_guid o mejor aún, el valor del campo código del cliente al que apunta y durante la importación en el destino, determinar con base en ese dato, cuál es el valor de sys_pk (en la tabla cliente del destino) que le corresponde.