Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2016
ronalg ronalg is offline
Miembro
 
Registrado: may 2003
Ubicación: Sucre - Bolivia
Posts: 68
Poder: 21
ronalg Va por buen camino
Generar números de serie consecutivos para productos

Buenas tardes, estoy refinando un programa de compras, ventas y almacenes y necesito ayuda con algo; se trata de que al vender/comprar un producto determinado al por mayor se debe registrar los numeros de serie de los productos uno por uno, siendo que el contenido de una cada de dichos productos tiene las series en secuencia, es muy moroso pasar por el escaner los prosductos.

para esto se me ocurrio (obviamente) hacer un menu meno flotante (TPopupmenu) que entre otras opciones tiene la de "Autocompletar Serie" hasta ahi todo ok, la serie se almacena en un campo varchar(30) (Ojo yo no hice el sistema lo mejoro) , pero cuando vi los tipos de series que manejan dentro de la tienda vi que habian series: NUMERICAS Y ALFANUMERICAS (LO PERO CON TERMINACION EN LETRAS - ESAS SON LAS PROBLEMATICAS)

Se me ocurrio (y esta es mi duda) si puedo convetir el "nro de serie" que es string a binario y de ahi sumarle en un bucle "1" para obtener el siguiente codigo en binario convertirlo nuevamente a string y almacenarlo en la tabla y asi autocompletar las series consecutivas.

¿Es esto factible? (soy neofito en manejo de binario)

Cita:
Según lo que supongo:

Tengo serie = AF005t9843A en binario podria ser 11010010110101010111101111 por decir algo.

Le sumo uno (tampoco se como hacerloen delphi) osea 11010010110101010111110000

Y "Vuala" lo convierto a string nuevamente y "según yo" deberia obtener AF005t9843B.
Espero que se posible

si lo fuera

¿Como convierto un string a binario y lo regreso a string despues de sumarle 1?

Si no lo fuera

¿Que sugerencia me harian?

Mil gracias de antemano
__________________
Saludos desde Sucre - Bolivia
"Si te lo puedes imaginar lo
puedes resolver" Pyriel
Responder Con Cita
  #2  
Antiguo 27-05-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La solución que piensas es de lo mas raro que he escuchado hoy!

Lo triste es que escuchamos ideas mas raras todo el tiempo

-----

La solución a los problemas no es buscando evadirlo. Es preguntándose:

1- Cual es el *verdadero* problema
2- Es posible *eliminar* la necesidad de tener que "solucionarlo"? (Como el chiste: Me duele cuando me toco la nariz... entonces deja de tocarte la nariz!)

Si no tienes claro el problema, terminaras creando una solución ingeniosa para un problema distinto.

-----

El problema es este: Porque las series son asi. Pueden cambiarse a algo mas simple? Estan usando un estandar de codigo de barras? Como sea, debes entender el porque asi son las series, y como es su funcionamiento. Solo entonces podras ver como resolver el problema.

Y aunque parece muy obvio el que "generar los números" sea una solución, preguntate: PORQUE es un problema usar la herramienta de lector de barras? PORQUE es mejor hacerlo como dices? Acaso hay otro problema de fondo?

Ponle animo a hacer muchas preguntas cuando surge un problema. Aun cuando probablemente llegas a la misma conclusion que haciendolo mas ingenuamente, el resultado sera MUCHO mas efectivo.

----

P.D:

1- Si se puede convertir cadenas a binarios y viceversa en Delphi. Busca en google como
2- No, esa no es la forma de hacer lo que buscas, pero es claro que tampoco entiendes el tema de los binarios. Hay varios videos en youtube muy esclarecedores al respecto. Ademas, es SUPER importante que aprendas como se codifica/decodifica la informacion (osea: Pasar de un formato a otro). Pon eso en tu lista de cosas por reforzar
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 27-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola ronalg,

una opcion es que le pidas a tu proveedore que te mande un listado de los numeros de serie que os estan entregando, ya que ellos supuestamente deberian de tenerlos registrados. Y solo los importas.


Por los general los numeros de serie contienen algun tipo de algoritmo, como es el codigo EAN, si te lo quieres hacer comodo sin mucha complicacion, asi al menos sabes como se compone el numero y si quieres le agregas dos numeros para verificar la integridad del numero.

AÑO MES DIA NUMEROPRODUCTO SERIE
AAAAMMDDPPPPPPPPPSSSSS
2016 05 27 000001234 0001
Responder Con Cita
  #4  
Antiguo 28-05-2016
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Smile Generacion Series

Podrias compartir un grupo de series para buscar una solucion al problema?

AF005t9843A
AF005t9843B
AF005t9843C
...
AF005t9843Z
Si llega a Z sigue la series asi?
AF005t9844A
AF005t9844B
..
Porque si es asi una posible soluccion seria
reemplazar el ultimo caracter posicion 11 con la siguiente letra que seria por decir la C y asi sucesivamente
ahora las letras tienen un orden conocido ejemplo A=1 B=2, C=3 ... Z +/- 23 lo que es una sucesion

Espero que te pueda ayudar en algo
Responder Con Cita
  #5  
Antiguo 30-05-2016
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Podrías octener el código ascii de cada carácter para luego llevarlo a binario de largo fijo, y luego sumar un 1, lo cual no garantiza que sea un serie. Por ejemplo si el íntimo caracter en una A sabemos que su valor ascii 65 si le sumas 1 te daría 66 al llevarlo nuevamente a caracter te daria una B, pero que pasa si es una Z al sumarle uno te daria una cosa diferente a lo que esperas, igual si el un numero. Te recomiendo que veas como se genera las series.

Enviado desde mi SM-G900H mediante Tapatalk
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #6  
Antiguo 30-05-2016
ronalg ronalg is offline
Miembro
 
Registrado: may 2003
Ubicación: Sucre - Bolivia
Posts: 68
Poder: 21
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
  #7  
Antiguo 30-05-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
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
  #8  
Antiguo 01-06-2016
ronalg ronalg is offline
Miembro
 
Registrado: may 2003
Ubicación: Sucre - Bolivia
Posts: 68
Poder: 21
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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 02:51:15.


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