Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Bazooka en Mayo 16, 2011, 11:19:44 am

Título: Alguien tiene algo parecido a esto AAA001
Publicado por: Bazooka en Mayo 16, 2011, 11:19:44 am
Hola necesito ir creando codigos para un articulo en una base de datos con este formato AAA000 Y EL SIGUIENTE AAA001 Y asi hasta llegar a AAA999 Y LUEGO cambiar la letra AAB000, AAB001 .
PARECE  que fuera una boludez pero me enrolle y hace 2 horas estoy perdiendo tiempo y no lo pude resolver asi que lo dejo para mañana o tal vez alguno me tire un salvavidas!!!

AAA000, AAA001, ........... AAA999, AAB000, AAB001, ETC

desde ya muchas gracias!!


MIKE
Título: Re:Alguien tiene algo parecido a esto AAA001
Publicado por: Juan Luis López en Mayo 16, 2011, 01:26:36 pm
Muy facil mike.
Calcula cuanto vale AAAAAA en decimal y haces:

Código: [Seleccionar]
Dim n as integer
for n = 0 to (el valor de AAAAAA)
     codigo = hex(n)
next n
Título: Re:Alguien tiene algo parecido a esto AAA001
Publicado por: Bazooka en Mayo 16, 2011, 01:34:15 pm
Hola Juan pero nota que son letras y numeros AAA000 ...
Título: Re:Alguien tiene algo parecido a esto AAA001
Publicado por: YAcosta en Mayo 16, 2011, 02:15:25 pm
Nose, creo que mejor tomas el valor ascii y aumentas 1., lo hare como seudocodigo al vuelo porque estoy con 100 temas ahorita y ninguna es VB jeje, si la idea te funciona tu lo pules, sino sorry.

Separas la parte numerica de la parte texto

si los ParteNumerica son 999 entonces
   NuevoLetraNumero = funcionConvertirLetraNumero(AAA)
   NuevoID =NuevoLetraNumero & "000"
Sino
   ParteNumerica = ParteNumerica + 1
   NuevoID = ParteTexto & ParteNumero
FinSi

(No me acuerdo de donde a donde es el valor ascii de A hasta Z que es facil obtener, pero supongamos que A sea 100 y Z sea 128, es medio artesanal pero porsiaca no encuentres una forma "academica" de hacerlo)

Private function funcionConvertirLetraNumero(Cadena as string) as string
   Letra1 = Ascii(Mid(cadena, 1,1))  ----  repito, no me acuerdo la funcion pero de la letra sacas el numero
   Letra2 = Ascii(Mid(cadena, 2,1))
   Letra3 = Ascii(Mid(cadena, 3,1))
   SI Letra1 > 99 and Letra1 < 129 then
       Letra1 = Letra1 + 1
      funcionConvertirLetraNumero = Char(Letra1) & Char(Letra2) & Char(Letra3)
   ElseSi Letra2 > 99 Letra2 < 129 then
       Letra2 = Letra2 + 1
      funcionConvertirLetraNumero = Char(Letra1) & Char(Letra2) & Char(Letra3)
   ElseSi Letra3 > 99 and Letra3 < 129 then
       Letra3 = Letra3 + 1
      funcionConvertirLetraNumero = Char(Letra1) & Char(Letra2) & Char(Letra3)
  EndSi
end function


ojo!!!, ES UNA IDEA , esta en borrador, no esta factorizado ni bien limitado ni bien seudoCodificado, si te parece que la idea te cuadra pero se te complica hacerlo dame hasta la noche y publico el proyecto.
Título: Re:Alguien tiene algo parecido a esto AAA001
Publicado por: Bazooka en Mayo 16, 2011, 07:50:55 pm
Hola Ivan muchas gracias por tu aporte un poco con tu idea y un poco con la mia le di forma y ya está  aca posteo la solucion !!

A veces hay que despejar la cabeza no? nunca les paso que llega un punto que te bloqueas....

Código: [Seleccionar]
'CON ESTO LO PROBAMOS PONIENDO UN COMMAND1 Y UN LISTBOX EN UN FORM
Private Sub Command1_Click()

For n = 1 To 1000
    'lo llama 1000 veces para probar
    List1.AddItem ObtenerSERIE
Next

End Sub

'FUNCION PARA DEVOLVER UNA CADENA FORMATEADA CORRELATIVA CON 3 LETRAS Y 3 NUMEROS (AAA000)
Private Function ObtenerSERIE() As String
Dim LETRA(1 To 3), TMPnum
Dim Clave As String

Clave = App.EXEName

'leemos el valor guardado del registro
TMPnum = GetSetting(Clave, "SERIES", "NUMERO", "0")
'

'si es menor que 999
If Val(TMPnum) < 999 Then
    SaveSetting Clave, "SERIES", "NUMERO", TMPnum + 1 'incrementar el contador
    TMPnum = GetSetting(Clave, "SERIES", "NUMERO", "0") 'leemos nuevamente para actualizarlo
    ''''
    'leemos las 3 letras guardadas por separado en el registro
    'el valor "65" (por defecto) es el codigo ASC de la letra A mayuscula
    'tambien ya le asignamos a la variable el valor comvertido mediante
    ' Chr$ a su respectivo valor numerico A=65 hasta la Z=90
    LETRA(1) = Chr$(GetSetting(Clave, "SERIES", "LETRA1", "65"))
    LETRA(2) = Chr$(GetSetting(Clave, "SERIES", "LETRA2", "65"))
    LETRA(3) = Chr(GetSetting(Clave, "SERIES", "LETRA3", "65"))
Else
    'cargamos las variables de letras con lo valores del registro
    LETRA(1) = GetSetting(Clave, "SERIES", "LETRA1", "65") '1º letra
    LETRA(2) = GetSetting(Clave, "SERIES", "LETRA2", "65") '2º letra
    LETRA(3) = GetSetting(Clave, "SERIES", "LETRA3", "65") '3º letra
   
    'si el valor es menor que 90 incrementar el contador correspondiente a la letra nº 3
    If CInt(LETRA(3)) < 90 Then
        LETRA(3) = CInt(LETRA(3)) + 1
        SaveSetting Clave, "SERIES", "LETRA3", LETRA(3)
    'si el valor es menor que 90 incrementar el contador correspondiente a la letra nº 2
    ElseIf CInt(LETRA(2)) < 90 Then
        LETRA(2) = CInt(LETRA(2)) + 1
        SaveSetting Clave, "SERIES", "LETRA2", LETRA(2)
    'si el valor es menor que 90 incrementar el contador correspondiente a la letra nº 1
    ElseIf CInt(LETRA(1)) < 90 Then
        LETRA(1) = CInt(LETRA(1)) + 1
        SaveSetting Clave, "SERIES", "LETRA1", LETRA(1)
    End If
       
        LETRA(1) = Chr$(LETRA(1))
        LETRA(2) = Chr$(LETRA(2))
        LETRA(3) = Chr$(LETRA(3))
        '
        SaveSetting Clave, "SERIES", "NUMERO", "0"
        TMPnum = GetSetting(Clave, "SERIES", "NUMERO", "0")
        '
   
End If

ObtenerSERIE = LETRA(1) & LETRA(2) & LETRA(3) & Right("000" & TMPnum, 3)

End Function

ojalá alguna vez le sirva a alguien!!
Se puede mejorar lo hice que lea del registro pero tal vez sería mejora que leyera los datos de un file oculto por alli