Если можно получить совет: В базе сохраняются номера идентификатор документов, которые вводят вручную.
При вызове формы для создания нового документа происходит выборка из этой базы этих идентификаторов и заполняется
ComboBox4.
- Код: Выделить всё
Set R = db.OpenRecordset("SELECT name, ID from obieqtebi order by updated DESC, created DESC;")
If R.RecordCount > 0 Then
R.MoveLast: R.MoveFirst
ComboBox4.Column = R.GetRows(R.RecordCount)
R.Close
- Код: Выделить всё
R = db.OpenRecordset("SELECT ID,Person from Docs Where DocDate=(SELECT max (DocDate) FROM Docs) AND DocTime=(SELECT max (DocTime) FROM Docs);")
If R.RecordCount > 0 Then Me.TextBox1 = R.Fields(0)
1. +1 один если последний введений идентификатор заканчивался цифрой. (Пример: в случае “Док-00235” получать “Док-00236”)
2. следующий символ в алфавите, если последний введений идентификатор заканчивался не цифрой. (Пример: в случае “ННН-ТПА” получать “ ННН-ТПВ ”)
На первый взгляд это проще простого Mid(r.Fields(0), 1, Len(r.Fields(0)) - 1) & “следующий символ или цифра”
Но это не так просто и главная проблема связано
1. с переполнением то ест когда последний символ это последний в алфавите или 9 в цифрах.
2. длина идентификатора ограничено в 12 символов.
3. Уникальность идентификатора. То ест, новый идентификатор не должен совпадать со списком в ComboBox-е
Писал писал функцию для этого и получается очень длинный код. А между тем эта полезная услуга в очень многих программах реализовано. Вот и пишу в форум, может это как-то легко реализуется и я чего, то туплю - получил огромный код.