Ver Mensaje Individual
  #4  
Antiguo 19-03-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Reputación: 21
RONPABLO Va por buen camino
Código SQL [-]
SET TERM ^^ ;
CREATE PROCEDURE P_MAX_CON_LETRAS returns (
  FACTURA VarChar(30),
  NUMERO Integer)
AS
DECLARE VARIABLE c char(1);
DECLARE VARIABLE cadena varchar(30);
DECLARE VARIABLE cadena1 varchar(30);
DECLARE VARIABLE CIFRAS1 integer;
DECLARE VARIABLE i integer;
DECLARE VARIABLE j integer;
DECLARE VARIABLE  AUMENTAR Integer;
DECLARE VARIABLE  CIFRAS Integer;
DECLARE VARIABLE  LETRA VarChar(4);
begin
  /* code */
  for select AUMENTAR, CIFRAS, LETRA from T_CIFRAS
  into :AUMENTAR, :CIFRAS, :LETRA do
  begin
  if (aumentar is null) then
    aumentar = 0;
  if (CIFRAS is null) then
    CIFRAS = 1;
  for select FACTURA from T_DEFINICION_TRATAMIENTO where FACTURA is not null into
  :FACTURA
  do
  begin
     CIFRAS1= CIFRAS;
     cadena = '0';
     numero=0;
     j=1;
     i = strlen(:FACTURA);
     while(j<=i) do
        begin
          c = substr(FACTURA,j,j);
          if (c between '0' and '9') then
             begin
                cadena = cadena || cast(:c as integer);
             end
          else
             cadena1 = substr(FACTURA,1,j);
          j=j+1;
        end
     numero = cast(cadena as integer) + aumentar;
     IF ((CIFRAS1 < i) and (CIFRAS < 2)) then
        CIFRAS1 = i;
     if ((letra is not null) and (letra <> '') and (letra <> ' ') and (letra <> '    ')) then
        cadena1 = letra;
     FACTURA = cadena1 || lpad(cast(numero as varchar(30)),cifras1,'0');
     suspend;
  end
  end
end
^^
SET TERM ; ^^

con el anterior sp lo que hago es obtener un consecutivo de una factura la cual puede tener letras y el numero entero que se ve sin las letras algo aasi

con la ultima factura generada y guardada en la bd con el valor PA0045 después de ejecutar el SP el valor Factura del SP sera PA0046 y el numero sera 46
Responder Con Cita