Trabajando con números consecutivos para mis contratos.

Tengo una BD en Access donde mis clientes (Entidad) están identificados por el Sector de Mercado a que pertenecen. Esto lo hago a través de un combo como se ve a continuación.

A su vez estos clientes me generan contratos y suplementos por lo que tengo relación de 1 a varios entre la tabla NG_Ficha del Cliente con la Tabla NG_Contratacion. En esta Tabla NG_Contratacion le asigno a cada documento contractual un código y es aquí donde necesito asesoría.

El código está compuesto por el año (solo los últimos dos dígitos, por ej del año 2023 solo se toma el 23) y en función del sector de mercado declarado a cada cliente se va formando así 23-100. El año permanece fijo durante todo el año y solo cambia cuando se pasa de un año a otro, mientras que va en aumento el consecutivo por ej. 23-101;23-102;23-103... Así sería por ej. Para todos los declarados Vivienda cuyo número de código de inicio es 100. Cuando cambia de año el consecutivo debe volver al inicio por ej. 24-100, 24-101,24-102... Así con todos los clientes y sus diferentes sectores de mercado que como ves en la lista desplegable cada uno tiene un número diferente. Solo he creado provisionalmente un campo donde pongo el código completo, pero realmente si puedo lograr automatizar este proceso sería mejor. ¿Alguna forma de lograr esto?

1 Respuesta

Respuesta
1

Si se puede (hay mucha literatura sobre los 'falsos autonuméricos') el campo suele ser de texto y se compondrá de dos partes separadas por un guion.
Lo que me parece corta es la segunda parte, en ella (y con tres dígitos) tenemos que el primero es fijo (del uno al nueve) y si aparece algún sector más (el diez o el noventa y nueve) solo quedará un dígito más para la serie, esto es, en el mejor de los casos solo se dispondrá de series cortas (00-99) o muy cortas (0-9).

Como se generará:
El año se conoce, el sector habrá que seleccionarlo y a partir de ese momento ya es calculable el siguiente.
Con la siguiente línea se obtiene el siguiente teniendo en cuenta el cambio de año, que sea el primero y que se inicie una nueva serie (con solo tres digitos/caracteres seria muy limitada)

Me. Sector >>> el combo
NG_Contratacion >>>> la tabla
Codigo >>>> el campo de la tabla

Codigo = Format(Date, "YY\-") & Left(Me_Sector, 1) & Format(Nz(DMax("Val(MId(Codigo,5,2))", "NG_Contratacion", "left (Codigo, 4) = '" & Format(Date, "YY\-") & Left(Me_Sector, 1) & "'"), 0) + 1, "00")

Perdona mi ignorancia, ¿dónde pego este código que me has mandado?

Lo adecuado: en el evento 'después de actualizar' del objeto [sector] (es un dato previo e indispensable).

Aconsejo que antes de asignarlo se verifique que se esta en un registro nuevo (que tendrá el/ese dato en blanco a la espera de su calculo), podría ser algo así:

Private Sub Sector_AfterUpdate()
If Me.NewRecord Then Codigo = Format(Date, "YY\-") & Left(Me.Sector, 1) & Format(Nz(DMax("Val(MId(Codigo,5,2))", "NG_Contratacion", "left (Codigo, 4) = '" & Format(Date, "YY\-") & Left(Me_Sector, 1) & "'"), 0) + 1, "00")
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas