En el mismo Formulario tengo un SubFormulario de Líneas de Conceptos visto
como Hoja de datos,
conectado según el campo iddFactura. Es decir, por cada número de factura
tendré varios conceptos facturados.
Su tabla asociada, [TablaConceptos] tene los campos [iddFactura],
[iddConcepto], [Descripción] y [Tarifa].
Conforme introduzco conceptos en una determinada factura, Access va metiendo
el valor principal de [iddFactura] en el campo asociado [iddFactura] del
subformulario.
Ahora, necesito que con cada nueva línea de concepto, se vaya introduciendo
como valor predeterminado de [iddConcepto] una numeración correlativa
creciente, en la forma que tome el mayor de la serie y le sume una unidad.
(No valen autonuméricos)
Quedaría algo del estilo:
Factura Concepto Descripción Tarifa
001 001 Tornillos 45
001 002 Tuercas 34
001 003 Martillo 12
001 004 Clavos 10
...
002 001 Yeso 20
002 002 Cola 33
...
003 001 Papel 15
003 002 Bolígrafos 8
003 003 >>> Eliminado<<<
003 004 Grapas 25
...
* Si utilizo en el SubFormulario la expresión
Valor Predeterminado =DMáx("[iddConcepto]";"[TablaConceptos]")+1
funciona mal, pues se actualiza tarde y repite valores.
* Si utilizo, desde VBA, el RecordsetClone de la Hoja de Datos del
Subformulario,
¿Cómo he de escribir la expresión para que no me dé errores?
He creado la función siguiente para el Valor Predeterminado, pero me da
error:
Function retDMax(FormName As String, SubFormName As String, FieldName As
String) As Long
With Forms(FormName).Controls(SubFormName).Form
.Requery
retDMax = application.DMax(FieldName, .RecordsetClone)
End With
End Function
¿Qué propuestas teneis? Imagino que debe ser fácil, pero hasta que sale....
Gracias.
--
Saludos,
Manuel.
Esto te lo digo, porque a lo mejor te haría el mismo servicio un campo
autonumérico, y de esa forma no tendrías que gastar tiempo en escribir
código. Ese campo autonumérico siempre te conservaría un orden de mayor a
menor.
Por otro lado, si aún así quieres ese código, podría ser este:
=DMáx("[iddConcepto]";"[TablaConceptos]";"[iddFactura]=Forms!NombreFormulari
o!iddFactura")+1
(para la sintaxis correcta, deberás revisar que los nombres sean los
correctos)
Espero que te sirva
--
Saludos desde Barcelona
Juan M. Afan de Ribera
<MVP Ms Access>
http://www.juanmafan.tk
http://www.clikear.com/webs4/juanmafan
"manuel" <manuel_...@worldonline.es> escribió en el mensaje
news:uAYJnL0m...@TK2MSFTNGP09.phx.gbl...
Te copio más abajo una función que puedes meter en el módulo de un
subformulario. Luego, puedes crear un campo calculado a partir de esa
función poniendo en el eorigen de datos
= lngContador.
Public Function lngContador() As Long
On Error GoTo lngContador_err
Me.RecordsetClone.Bookmark = Me.Bookmark
lngContador = 1 + Me.RecordsetClone.AbsolutePosition
Exit Function
lngContador_err:
If Err = 3021 Then
'no hay registro activo
lngContador = 0
Else
' patatín-patatán... el control de errores te toca a tí
End If
End Function
--
Saludos.
José Bengoechea Ibaceta [MS-MVP Access]
http://usuarios.lycos.es/jbchea/
"manuel" <manuel_...@worldonline.es> escribió en el mensaje
news:uAYJnL0m...@TK2MSFTNGP09.phx.gbl...
--
Saludos.
José Bengoechea Ibaceta [MS-MVP Access]
http://usuarios.lycos.es/jbchea/
"Emmanuel" <emm...@mexico.com> escribió en el mensaje
news:uwDBGYFn...@TK2MSFTNGP12.phx.gbl...