Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2016
ronalg ronalg is offline
Miembro
 
Registrado: may 2003
Ubicación: Sucre - Bolivia
Posts: 68
Poder: 22
ronalg Va por buen camino
Gracias por responder

Aclaro un poco el problema:

Al vender un producto ocurre que piden una venta de 8 unidades de la caja de 10, estas 8 unidades tienen números de series consecutivos (del cual el formato es irrelevante pues existen productos de todo tipo), por decirles el primer nro de serie es 462175483
y obviamente los otros 7 serán 462175484 - 462175485 - ......... - 4621754890, en "ventana de registro de la venta" (se ha pedido = orden del jefe de sistemas) que se coloque un botón o un menú emergente o lo que sea que haga el trabajo de "Auto completar Series", esto sería que el usuario escanea o escribe el primer nro de serie y al presionar el sugerido botón las otras series se generen automáticamente (y obvio se inserten en el listado de series que salen del sistema); este es el problema.
Cuando las series tienen terminación numérica no hay problema pues aislamos la parte numérica de la parte alfabética incremento la parte numérica y volvemos a juntar ambas partes. Cuando la terminación es alfanumérica por decirles ASDF653214T; el auto completar las 8 series daría ASDF653214U - ASDF653214V - ASDF653214W - ASDF653214X - ASDF653214Y - ASDF653214Z - ASDF653215A - ASDF653215B, el asunto se complica si existieran series con los dos últimos elementos literales.

Por ahora encontré una solución (gracias rastafarey y ASAPLTDA combinare sus dos sugerencias) que es convertir a binario la serie (o talvez el último dígito) y sumar uno al ultimo bit, así garantizo la sucesión pero cuando llegamos a la "Z" o a la "z" no regresa a la letra "A"; salta a "[" o a "{" con lo cual debo controlar solo el digito que cambia (en eso estoy) que el siguiente código salte a "A" o a "a".

Posiblemte me este complicando mucho y exista una forma de resolver de “forma administrativa” el problema pero bueno los jefes no siempre entiende, algunos solo saben pedir y dar fechas limites a pesar de que uno dé razones muy lógicas (muy personalmente me parece que deberían escanear la serie producto por producto, incluso para verificar, por seguridad, las series).

Mil gracias por la ayuda, cuando termine la función la publicare por si a alguien le puede ser útil.
__________________
Saludos desde Sucre - Bolivia
"Si te lo puedes imaginar lo
puedes resolver" Pyriel
Responder Con Cita
  #2  
Antiguo 30-05-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.917
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Estas complicando mucho el tema, y es muy simple.

Como lo haces a mano? Manualmente? En tu mente?.

De hecho, te doy una pista mejor: Como cuentas con los dedos mas de 10?

Usas un acumulador y *repites todo desde el principio*. Es muy simple, pon las letras en una lista:

a.b.c.....

Arrancas del inicio, brincas +1 y al llegar al final, ACUMULAS y reinicias otra vez. No tienes que hacer cosas raras ni validar que salgas del rango, porque tienes la lista, es conocida y finita y facil de generar!

P.D: Y recuerda que delphi tiene el tipo de datos perfecto:

http://www.delphibasics.co.uk/RTL.asp?Name=Set
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 01-06-2016
ronalg ronalg is offline
Miembro
 
Registrado: may 2003
Ubicación: Sucre - Bolivia
Posts: 68
Poder: 22
ronalg Va por buen camino
No debí llamarle "generar series" debí llamarlo "auto completar series"

MIL GRACIAS YA LO RESOLVÍ, AHÍ LES VA POR SI A ALGUIEN LE SIRVE.

Código Delphi [-]
var
  serie: string;
  finales:set of char = ['Z','z','9'];
  iniciales: set of char = ['A','a','0'];

function siguiente_serie(serie_base: string; longitud: byte): string;
var caracter, caracter_s:char;
begin
     caracter:=serie_base[longitud];
     caracter_s:=caracter_siguiente(caracter);
     if (caracter_s in iniciales) then
     begin
          serie_base:=siguiente_serie(copy(serie_base,0,longitud-1),longitud-1);
     end;
     result:=copy(serie_base,0,longitud-1)+caracter_s;
end;

function caracter_siguiente(caracter_base: char): char;
//var caracter_s:char;
begin
     if caracter_base in finales then
     begin
          case caracter_base of
          'Z': result:='A';
          'z': result:='a';
          '9': result:='0';
          end;
     end
     else
     begin
          //caracter_s:=char((ord(caracter_base)+1));
          result:=char((ord(caracter_base)+1));
     end;
end;

{Usando en un StringGrid name=sg_series rowcount=10}

procedure TForm1.BitBtn1Click(Sender: TObject);
var nueva_serie:string;
    i:integer;
begin
     for i:=2 to sg_series.RowCount-2 do
     begin
          serie:=sg_series.Cells[0,i-1];
          nueva_serie:=siguiente_serie(serie,length(serie));
          sg_series.Cells[0,i]:=nueva_serie;
     end;
end;

FALTA DEPURAR ALGUNAS COSAS PERO FUNCIONA
Archivos Adjuntos
Tipo de Archivo: rar genererar series.rar (206,3 KB, 11 visitas)
__________________
Saludos desde Sucre - Bolivia
"Si te lo puedes imaginar lo
puedes resolver" Pyriel

Última edición por ronalg fecha: 01-06-2016 a las 22:57:13.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un Triger para Generar Número de Serie en MS Sql Server Express 2008 hondaalberto MS SQL Server 8 15-08-2012 16:44:01
Actualizar 500 campos con numeros consecutivos Camilo SQL 2 19-09-2007 21:06:07
no me actualiza numeros consecutivos Camilo SQL 3 03-09-2007 13:25:56
Numeros de Recibo Consecutivos Camilo Conexión con bases de datos 6 03-08-2007 09:46:01
Bloques De Numeros Consecutivos dany2006 C++ Builder 5 15-11-2006 21:06:16


La franja horaria es GMT +2. Ahora son las 21:29:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi