Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado 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
-
Muy facil mike.
Calcula cuanto vale AAAAAA en decimal y haces:
Dim n as integer
for n = 0 to (el valor de AAAAAA)
codigo = hex(n)
next n
-
Hola Juan pero nota que son letras y numeros AAA000 ...
-
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.
-
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....
'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