PDA

Ver la Versión Completa : Aumentar un folio de tipo string


ThePhantomAgony
22-07-2014, 19:16:32
Hola estoy haciendo un trigger, que se dispare cuando se haga una inserción en una tabla de inventarios(esto desde una aplicación), dicha inserción sera una entrada en el inventario a un almacen1.

El trigger se disparara a partir de esa entrada en el inventario,y generara un movimiento en esa misma tabla pero como salida , bueno hasta ahí ningún problema, en lo que me atore es que esta tabla de inventario asigna un folio de tipo string a dicho movimiento (no me refiero al identificador llave del registro cuyo campo si es un entero), y no se como aumentarlo, es decir si mi ultimo folio es INV1008 el siguiente debe ser INV1009.

Yo se que tengo que separar el numero de la cadena y aumentarlo , pero cómo, o que función puedo usar para saber que lo que estoy substrayendo de ese dato string es un número?
¿O tienen alguna idea para aumentar este folio?

(La base de datos es de un sistema que compramos, por lo cual no puedo cambiar el tipo de dato del campo)

Gracias!!^\||/

Al González
22-07-2014, 20:35:25
Hola. No sé si has considerado hacerlo desde Delphi, pero en tal caso yo usaría la función ghInc de GHF (http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/__GH_Freebrary__/):
Uses
GHFRTL;

...

Begin
Folio := 'INV1008';
Folio := ghInc (Folio); // Folio ahora es 'INV1009'
Folio := ghInc (Folio); // Folio ahora es 'INV1010'
Puede que te den otras soluciones, adopta la que sea más viable o adecuada en tu caso.

Un cordial saludo.

duilioisola
23-07-2014, 12:42:45
En Firebird esto lo solucionas mediante SUBSTRNG


/* Asumo que folio contiene el max(folio) */

/* Obtengo los 4 caracteres que queden a partir del 4 caracter */
nro_folio = cast(substring(folio from 4 for 4) as integer);
/* incrementeo el numero */
nro_folio = nro_folio + 1;
/* aqui falta controlar el largo de nro_folio (<10 agregar '000', <100 agregar '00', < 1000 agregar '0') */
folio = 'INV' || nro_folio;

ThePhantomAgony
23-07-2014, 23:43:08
:D Gracias duiliosola me diste una idea, creo que así ya lo puedo hacer, y pues Al Gonzalez yo se que lo podría programar en una aplicación, pero lo necesito que se haga en automático desde la base de datos.