Generar registros consecutivos en formularios a partir de otro registro de otro formulario

Tengo el formulario Partes con el campo Parte. Es un campo texto con formato, ejemplo "CI-0001-22". Necesito un botón que me abra otro formulario en un registro nuevo, "Vales" con el campo "Vale", y le asigne a dicho campo el mismo número que su Parte, pero iniciando una serie, ejemplo"CI-0001-22-1". Y si vuelvo a generar otro Vale desde el mismo Parte me asigne el siguiente "CI-0001-22-2". Y así sucesivamente

3 Respuestas

Respuesta
1

Antonio, si el campo Vale pudiera tener un valor superior a 9, convendría cambiar la instrucción y usar la función Format. Te contesto a lo que dices. Si tengo el formulario Partes

Como no sé desde donde quieres abrir el otro le he puesto un botón pero podría ser en cualquier otro evento. Si lo pulso

Si cierro este formulario Vales, y en cualquier otro momento pulso el botón del formulario Partes en ese mismo registro

Si cambio de registro en Partes y pulso el botón

En este caso( recuerda lo del principio), el código del botón es

Private Sub Comando20_Click()
DoCmd.OpenForm "vales", , , , acFormAdd, acDialog
End Sub

Y en el evento Al activar el registro del formulario Vales le tengo puesto

Private Sub Form_Current()
If CurrentProject.AllForms("partes").IsLoaded Then
Vale = Forms!partes!Parte & "-" & Nz(DCount("*", "vales", "left([vale],10)=forms!partes!parte")) + 1
End If
End Sub

O sea, que si el formulario Partes está cargado ( que SÍ lo está, ya que es el que lo abierto) el valor de Vale sea ese). Lo de Nz es por el primero, ya que en ese momento todavía no hay nada guardado.

¡Gracias! . Solucionado

Me surge un nuevo problema. A veces los vales los tengo que generar desde un segundo campo del formulario Partes, llamado Referencia, ejemplo "OT22-5425". Se podría igualmente generar varios vales desde el mismo registro, ejemplo OT22-5425-1, OT22-5425-2, etc... Teniendo en cuenta que el campo Parte también está relleno?.

Gracias

Antonio siento el retraso pero esta página ya no avisa cuando alguien hace una "repregunta", y si la he visto hoy ha sido de casualidad. Claro que puedes, lo mejor sería que pusieras una imagen pero, así a bote pronto, podrías poner el código como

If current...... then

If not isnull(forms!partes!parte) then

Vale=lo de antes

else

Vale=sustituir en la de arriba donde diga parte poner Referencia

De todas formas, si quieres, repito, si quieres mándame un mensaje, sólo el mensaje a [email protected] y te mando un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Antonio Mª Jiménez, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Si se disecciona el valor que se aplica en el campo 'Partes' se aprecia una serie un guion, un numero que hace sospechar que es correlativo otro guion y lo que pudiera ser el año.

Mi consejo es continuar con el método y con una dos o el numero de dígitos que se consideren necesarios (pongamos tres) la numeración se generase así:

CI-0001-22-001, CI-0001-22-002, ..., CI-0001-22-999

Lo primero es que si no se hace así, se obtendrá un orden incorrecto ya que es un texto y después del (1) vendrá el (11) antes del (2) al que continuara el (21) ... etc.
Con un numero fijo de dígitos su orden seria: (001), (002) ... (020), (021) ...

El método se conoce como 'falsos auto-numéricos' y hay abundantes ejemplos
En este caso es mas sencillo pues la raíz viene impuesta, basta con filtrar por la raíz:
"InStr([Vales], "CI-0001-22") = 1

Obtener el mayor evaluando solo los últimos caracteres
"Val(Right ([Vales] ,3)"

Aplicar la función Nz por si fuera el primero e incrementarlo una unidad.

Para una tabla (VALES) con el dato en el campo (VALE) y la raiz en el campo (PARTE) del formulario:

= PARTE & Format(Nz(DMAX("Val(Right(VALE,3))", "VALES", "Instr(VALE,'" & PARTE & "') = 1"), 0),"-000")

Inapreciable Eduardo Pérez Fernández, si una simple línea como respuesta es mucho o poco, es quien hizo la pregunta el que podrá evaluarlo.

Inapreciable Eduardo Pérez Fernández, he leído 'la recomendación' pero ni la comparto, ni tiene a mi juicio valor alguno.
Le sugiero que juzgue las que Ud. publica tanto en su extensión como su calidad.

Access permite la creatividad, cerrarse a resultados únicos solo crea copias sin valor e ignorantes.

Respuesta
1

Enriqueh se complica mucho, la respuesta de Julián es más que suficiente

Tómelo como una recomendación, soy libre de opinar.

No entro en polémica con ineptos, cuando responda apóyese en imágenes pero no confunda a los usuarios. Si quiere aprender VBA avanzada con gusto le puede enseñar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas