Autor Tema: Alguien tiene algo parecido a esto AAA001  (Leído 2939 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Alguien tiene algo parecido a esto AAA001
« 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
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Re:Alguien tiene algo parecido a esto AAA001
« Respuesta #1 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
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Alguien tiene algo parecido a esto AAA001
« Respuesta #2 en: Mayo 16, 2011, 01:34:15 pm »
Hola Juan pero nota que son letras y numeros AAA000 ...
« última modificación: Mayo 16, 2011, 01:40:12 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Alguien tiene algo parecido a esto AAA001
« Respuesta #3 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.
Me encuentras en YAcosta.com

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Alguien tiene algo parecido a esto AAA001
« Respuesta #4 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
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.