Pregunta: | 62913 - NUMERO CORRELATIVOS EN TABLAS |
Autor: | Patrick Ramirez |
Buenas tardes a todos, me estoy iniciando en visual fox, he creado unas tablas que tienen el campo llamado "codproveedor", como puedo hacer para generar un numero correlativo cada vez que quiera ingresar un nuevo registro en la tabla. |
Respuesta: | Marga del Pino |
Si tienes un boton Nuevo, y un campo ReadOnly cod donde reflejas el nuevo valor calculado del articulo, pon en el evento valid del boton Nuevo
algo como esto. Hay botones alta,baja,cambios y nuevo en el formulario que responden a la funcion que realizan , la tabla que se va a llenar se ordena por nombre para visualizarla en un campo grid o rejilla del formulario, pero en la funcion creacodnum hay que ordenar temporalmente por el campo cod, para poder encontrar numeros vacios y darlos WITH THISFORM STORE " " TO .nomb.VALUE .cod.VALUE=creacodnum() && se ordena por tag cod .cod.REFRESH set order to tag nomb STORE .F. TO .baja.ENABLED,.cambios.ENABLED .alta.ENABLED=.T. ENDWITH Debajo tienes la funcion que debes poner en el fichero de procedimientos de la aplicacion, para poder utilizarla en otro formulario FUNCTION creacodnum PARAMETERS caralf * Debe utilizarse para ficheros con pocos artículos, con campo COD numérico, * o alfabético pero que solo contenga números y en ese caso incluir el * parametro caralf indicando cuantos caracteres tiene la cadena (1 a 3) SET ORDER TO TAG cod GOTO TOP m.num=RECCOUNT() esta=.T. m.cad=" " *Si no hay artículos en m.esta debe ser .T FOR i=1 TO m.num esta=.F. SCAN WHILE NOT esta IF PARAMETERS()=1 && cod es de tipo CHARACTER IF i=VAL(cod) esta=.T. EXIT ENDIF ELSE && cod es de tipo NUMERIC IF i=cod esta=.T. EXIT ENDIF ENDIF ENDSCAN IF NOT esta EXIT ENDIF ENDFOR m.num=IIF(NOT esta,i,m.num+1) IF PARAMETERS()=0 RETURN m.num ELSE DO CASE CASE caralf=1 OR (caralf=2 AND m.num>9) OR (caralf=3 AND m.num>99) m.cad=STR(m.num,caralf) CASE (caralf=2 AND m.num<10) OR (caralf=3 AND m.num>9 AND m.num<100) m.cad="0"+STR(m.num,caralf-1) CASE (caralf=3 AND m.num<10) m.cad="00"+STR(m.num,1) ENDCASE RETURN m.cad ENDIF |