Consultas sobre un programa con Visual FoxPro

Saludos:
1. Quiero guardar consecutivos con letra y rellenar con ceros lo demás, por ejemplo: E000033 y que al guardar ese consecutivo y de uno nuevo sea E000034 y así sucesivamente.
2. Quiero "desglosar" un numero de un text, y rellenar otros text de la form basados en ese desglose sacado de tablas sueltas:
Por ejemplo: Tengo las siguientes tablas: Color, Material y Proveedor, con los siguientes datos por ejemplo:
Color
10 Negro
11 Blanco
12 Azul
Etc
Material
30 Algodón
31 Nylon
32 Fibra
Etc
Proveedor
50 Sandy
51 Sergio
52 Oscar
Etc
QUE cuanto el usuario teclee en un text por ejemplo: 1030550 y le de enter en otros text me ponga:
Color: Negro,
Material: Algodón,
Almacén: 5,
Proveedor: Sandy
Como si los hubiera tecleado por separado así: 10 30 5 50, no sé si me di a entender.
Gracias.

1 Respuesta

Respuesta
1
Sencillo en los procedimientos almecenados de la base de datos crea una función que se llame por ejemplo Nuevo_código y crea una tabla que se llame consecutivos para almacenar el consecutivo de la tabla a la que se le ingresen datos ejemplo:
Nombre de la Tabla: Códigos Campos: Nom_tabla C(10), Código N(8) (en ambos campos se debe establecer índice ascendente).
Los posibles datos de la tabla podrían ser los siguientes:
NomTabla Código
Productos 1
Pedidos 1
Function Nuevo_codigo(tcAlias)
Local lcAlias, lcOldArea, lcOldReprocess, lcCodigo, lcNuevoCodigo
lcOldArea = Select() &&Número de la área actual
lcOldReprocess = Set("REPROCESS")
lcAlias = Iif(Parameters() < 1, Alias(), Upper(tcAlias))
If !Used("Codigos")
Use Codigos In 0
Endif
Select Codigos
If Seek(lcAlias, "Codigos", NomTabla)
If Rlock()
lcCodigo = Codigos.codigo
Replace Codigos.codigo With lcCodigo + 1
Unlock
Endif
Endif
lcNuevoCodigo = Alltrim(Str(lcCodigo))
Esta línea devuelve E000001.
lcNuevoCodigo = "E" + Replicate("0", 6 - Len(lcNuevoCodigo)) + lcNuevoCodigo
Set Reprocess To (lcOldReprocess)
Select(lcOldArea)
Return lcNuevoCodigo
Endif
Abres la tabla en la que se desea ingresar el código en modo de diseño para efectos de nuestro ejemplo escogeremos la tabla Productos y en el cuadro valor predeterminado del campo donde debe ir el código supongamos que se llame Cod_pro escribimos Nuevo_codigo()
En cuanto al punto 2 en el eventos KeyPress del cuadro textbox podrías escribir el siguiente código:
Evento KeyPress del control
LParamenters nKeyCode, nShiftAltCtrl
* Suponiendo que el código ingresado tiene 6 números en formato caracter.
* Los campos códigos de la tabla deben ser claves y de formato caracter.
* Si el los códigos es menor que 10 debería ir con el siguiente formato:
* 01, 02, 03, 04, 05, 06, 07, 08, 09
If nKeyCode = 13 And !Empty(This.Value) And Len(This.value) = 6
* Suponiendo que la tabla se llame Color y el campo clave
* se llame cod_color y así mismo con las otras tablas.
=Seek(Substr(This.Value, 1,2), "Color", "Cod_color")
=Seek(Substr(This.Value, 3,2), "Proveedor", "Cod_prov")
=Seek(Substr(This.Value, 5,2), "Material", "Cod_mat")
Thisform. Refresh()
Endif
Saludos Gracias por contestar. Voy a Calar lo del punto 1.
Sobre el punto 2, si esta en formato carácter pero en realidad son 25 caracteres los que se usan para la clave(puse 6 solo por que pensé que seria lo mismo con 6 q con los q ocupo). Por ejemplo: R103462759807574040895, lo malo de esto es q alguna claves o desgloses son de 3 caracteres y otros de 2, y ademas hay cosas q no se usaran tablas, en el caso del ejemplo q te mando la "R" yo no la uso para nada, pero el cliente si, y el ultimo numero es el numero de almacen, así q solo se especifica eso. No se si me di a entender, gracias por tu tiempo.
Pues es sencillo, sólo debes tener en cuenta la cantidad de caracteres que tiene cada código de los registros de las diferentes tablas, por ejemplo tomemos el que enviaste R103462759807574040895, dices que hay caracteres que no se usan para nada entonces no se los toman por ejemplo si la R no se la utiliza para nada entonces no se la toma y supongamos que los siguientes cuatro caracteres son el código de la tabla proveedores entonces escribiríamos la siguiente línea:
=Seek(Substr(This.Value, 2,4), "Proveedores", "Cod_prov")
Ahora supongamos que el sexto y séptimo carácter no se utilizarán para nada, y los siguientes tres caracteres representan el código del color entonces escribiríamos esto:
=Seek(Substr(This.Value, 8,3), "Color", "Cod_color")
Y tomemos lo que tú dijiste que el último dígito representa el código del almacén, entonces escribiríamos esto:
=Seek(Substr(This.Value, 25,1), "Almacén", "Cod_alm")

Añade tu respuesta

Haz clic para o