Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопросы порядковой нумерации в Access2007 / 25 сообщений из 34, страница 1 из 2
07.04.2018, 20:47
    #39627191
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Уважаемые знатоки Access. Есть задача создания базы регистрации событий. В целом ничего сложного, но имеется требование присвоения регистрационных номеров каждой записи, при этом каждый календарный год должен начинаться с новой регистрации, т.е. с единицы. Каким образом посоветуете организовать данный процесс и возможно ли такое в принципе?
...
Рейтинг: 0 / 0
07.04.2018, 21:08
    #39627197
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
LekksУважаемые знатоки Access. Есть задача создания базы регистрации событий. В целом ничего сложного, но имеется требование присвоения регистрационных номеров каждой записи, при этом каждый календарный год должен начинаться с новой регистрации, т.е. с единицы. Каким образом посоветуете организовать данный процесс и возможно ли такое в принципе?
Когда то очень давно , была такая книШка Секреты Access 97 , вот там я скомуниздил такой код .

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    Public Sub adhAutoCounterData()
   ' DoCmd.GoToRecord A_FORM, "ИмяФормы", A_NEWREC
    Dim db As Database
    Dim r As DAO.Recordset
    Dim Temp As String
    Dim Temp2 As String
    Set db = CurrentDb()
   
    Set r = db.OpenRecordset("Таблица", DB_OPEN_TABLE)
    Temp = Format(Now, "yyyymm")
    Temp2 = 0
    Do Until r.EOF
    If Left(r("Поле"), 6) = Temp Then
    If Val(Mid(r("Поле"), 8)) > Temp2 Then Temp2 = Val(Mid(r("Поле"), 8))
    End If
    r.MoveNext
    Loop
    If Temp2 = 0 Then
    Temp2 = Temp + "-01"
    Else
    If Temp2 < 9 Then
    Temp2 = Temp + "-0" + Mid(Str$(Temp2 + 1), 2)
    Else
    Temp2 = Temp + "-" + Mid(Str$(Temp2 + 1), 2)
    End If
    End If
    Forms("имяФормы")("Поле") = Temp2
    r.Close

End Sub



Принцип действия такой. Отыскивает последний номер договора , а затем форматирует в зависимости от даты например 20180410-01 , 20180410-02 и так далее . Мне кажется Вам подойдет . Допилите под свои нужды или на основании примера соорудите что нить свое.
...
Рейтинг: 0 / 0
07.04.2018, 21:10
    #39627198
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Соответственно в новом 2019 году первая запись будет 20190101-01 .
...
Рейтинг: 0 / 0
08.04.2018, 00:26
    #39627215
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Lekks, давненько решал такую проблему, правда там посложнее - несколько точек и у них у каждой должна быть своя нумерация внутренних накладных.
В таблице с описанием этих точек сделал два поля - одно с номером, другое с годом, если поле которое не совпадает с текущим годом - номер обнуляется.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Function Nomer_Nkl(Kiosk As Long, kiosk4 As Recordset, fldDate As Date) As String
Dim j As Integer, k As Integer, i As Integer, ki As String, a As Long  'Kiosk4 As Recordset,
Dim Nakl_God1 As Long, Nakl_God2 As Long, nom As Long

a = 1
If Kiosk > 0 Then
ki = Choose(Kiosk, "А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "К", "Л")
Else
ki = "Z"
End If
'Set Kiosk4 = CurrentDb.OpenRecordset("Kiosk", dbOpenDynaset)

kiosk4.FindFirst "Код=" & Kiosk
Nakl_God1 = CLng(kiosk4.Fields("Nakl_God")) 'год который был в прошлой накладной
Nakl_God2 = CLng(Year(fldDate)) ' год, который будет в нынешней накладной
    kiosk4.Edit
        a = CLng(kiosk4.Fields("Nakl_Nomer"))
        If Nakl_God2 > Nakl_God1 Then kiosk4.Fields("Nakl_God") = Nakl_God2: a = 0  ' обновляем год накладной
        nom = a + 1
        kiosk4.Fields("Nakl_Nomer") = nom ' обновляем номер накладной
    kiosk4.Update


Nomer_Nkl = Nakl_God2 & ki & "_" & nom

End Function


код не очень оптимальный, но as is - даже комменты не стал не изменять - помоему понятен принцип.
...
Рейтинг: 0 / 0
08.04.2018, 00:29
    #39627216
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
DarkMan,
как-то так:
Код: vbnet
1.
2.
3.
Private Sub дата_AfterUpdate()
Me.заказ=Format(Me.дата, "yyyymmdd") & " - " & Format(DCount("заказ", "tbl", "year(дата)=" & Year(Me.дата)) + 1, "000")
End Sub
...
Рейтинг: 0 / 0
08.04.2018, 00:40
    #39627218
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
sdkuDarkMan,
как-то так:
Код: vbnet
1.
2.
3.
Private Sub дата_AfterUpdate()
Me.заказ=Format(Me.дата, "yyyymmdd") & " - " & Format(DCount("заказ", "tbl", "year(дата)=" & Year(Me.дата)) + 1, "000")
End Sub


да я заметил что там только месяц, но так как сообщение было уже отправлено , а редактировать нельзя , то я и не стал напрягаться.
Думаю ТС додумается подредактировать под свои хотелки. :)
...
Рейтинг: 0 / 0
08.04.2018, 01:56
    #39627224
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
DarkMan,
Прошу прощения-я случайно ответил на Ваше сообщение-естессно оно для ТС
...
Рейтинг: 0 / 0
08.04.2018, 09:13
    #39627251
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
sdkuDarkMan,
Прошу прощения-я случайно ответил на Ваше сообщение-естессно оно для ТС
Все ОК. Поправка действительно была к месту , да и Ваш вариант намного удобнее. Правда я уже писал , что когда то я скомуниздил этот код в книШке , а тогда не хватало ума переделывать , а сейчас как то и нет надобности. Работает и работает .


P.S Но правда ТС куда то пропал как всегда.
...
Рейтинг: 0 / 0
08.04.2018, 11:27
    #39627269
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Ребят, всем спасибо. Быстренько попробовал на работе и тот и тот вариант. Работает все )) Буду в базу прописывать.
...
Рейтинг: 0 / 0
15.10.2018, 18:09
    #39717788
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Всем привет. Снова проблема. Прописал вот так:

Код: vbnet
1.
2.
3.
Private Sub Дата__регистрации_AfterUpdate()
Me.Рег_номер = Format(Me.Дата_регистрации, "yyyymmdd") & " - " & Format(DCount("Рег_номер", "Учет_нарушений", "year(Дата_регистрации)=" & Year(Me.Дата_регистрации)) + 1, "000")
End Sub



Сама таблица и форма: https://yadi.sk/d/Dm-tyuJpDF6YHA.

Не работает. Хотя раньше делал пробную, вроде работало как надо.
...
Рейтинг: 0 / 0
16.10.2018, 00:47
    #39717874
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
сделайте как в приложенном файле и будет Вам Щастье
...
Рейтинг: 0 / 0
16.10.2018, 00:48
    #39717875
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
после обновления [myData]
...
Рейтинг: 0 / 0
16.10.2018, 08:05
    #39717911
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
sdku,

Выдает ошибку:
...
Рейтинг: 0 / 0
16.10.2018, 08:31
    #39717914
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Все, поменял имена на RegNum и RegDate, заработало. Спасибо.
...
Рейтинг: 0 / 0
08.11.2018, 20:27
    #39730118
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Озадачился автонумерацией с начальным значением. Итог:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Private Sub Поле5_AfterUpdate()
    Dim a
    Dim b
    Dim c
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.Open "tblTest", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
    If Not rst.EOF And Not rst.BOF Then rst.MoveLast Else rst.AddNew
    If Not IsNull(rst.Fields(2)) Then c = Year(rst.Fields(2)) Else c = Year(Date)
    a = Year(Me.Поле5)
    b = Me.Поле - 1
    If a = c Then
        Me.Registration = (b + (DCount("*", "tblTest", "year(RegDate)=" & a))) + 1 & "/" & a
    Else: Me.Registration = DCount("*", "tblTest", "year(RegDate)=" & a) + 1 & "/" & a
    Me.Поле7 = 1
    End If
End Sub

...
Рейтинг: 0 / 0
08.11.2018, 22:19
    #39730163
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Lekks,
Почему нельзя для нумерации с какой-то конкретной цифры разместить кнопку(visible=true если запись новая и visible=false для других записей) и на её нажатие повесить аналогичную предложенной процедуру в которой Dcount()+1 заменить на конкретное значение
...
Рейтинг: 0 / 0
08.11.2018, 22:38
    #39730174
Лапух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Lekks, может так прокатит?
Me.[№ппИ] = Nz(DMax("№ппИ", "Ингридиенты"), 0) + 1
или если в подчиненной форме
Me.[№ппИ] = Nz(DMax("№ппИ", "Ингридиенты", "КодБлюдаИ=" & Me.[КодБлюдаИ]), 0) + 1
Естественно имена полей и таблиц как у вас.
Если правильно понял, то именно так всегда делаю.
...
Рейтинг: 0 / 0
09.11.2018, 17:44
    #39730797
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
sdku ... повесить аналогичную предложенной процедуру в которой Dcount()+1 заменить на конкретное значение

не понял, если честно))) конкретное значение - какое?
...
Рейтинг: 0 / 0
09.11.2018, 17:53
    #39730801
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Лапух,

в моем случае нумерация не сквозная, а с началом (с первой записью) нового года вновь начинается с единицы:
...
Рейтинг: 0 / 0
09.11.2018, 19:12
    #39730841
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
LekksЛапух,
в моем случае нумерация не сквозная, а с началом (с первой записью) нового года вновь начинается с единицы:А ведь в примере что Вам предложен так и есть.Вы его тестировали? (Переставить системное время компьютера слабо)
...
Рейтинг: 0 / 0
09.11.2018, 19:29
    #39730846
Лапух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Lekks,
Я бы в Источнике записей формы, основанной на запросе, и открытом в режиме конструктора, в свободном поле написал:

ТекущийГод: Year(Date())
или
ТекущийГод: Format(Date();"yyyy")

Вывел это поле на форму для наглядности.
А процедура на добавление №пп тогда бы выглядела примерно так:

Me.[№пп] = Nz(DMax("№пп", "ИмяТаблицы", "ТекущийГод=" & Me.[ТекущийГод]), 0) + 1
...
Рейтинг: 0 / 0
09.11.2018, 20:18
    #39730858
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Вернее не системное время переставить, а ввести в поле "myDate" дату с годом для которого еще нет записей
...
Рейтинг: 0 / 0
09.11.2018, 22:01
    #39730890
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Лапух, в чем может быть проблема:
Me.Registration = Nz(DMax("Registration", "tblTest2", "RegDate=" & Me.[Поле5]), 0) + 1
...
Рейтинг: 0 / 0
09.11.2018, 22:27
    #39730897
Лапух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Lekks,
Ну видимо у вас в поле дата с месяцем и годом, а не просто год.
Даты обрамляют в решточки и указывать американский формат.
А вам как я понял нужна нумерация начинающаяся раз в год, а не на каждый день.
И кстати что за лень вам помешала дать нормальное имя для поля с датой?
С таких мелочей и начинаются ошибки и путаница.
...
Рейтинг: 0 / 0
09.11.2018, 22:31
    #39730904
Lekks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы порядковой нумерации в Access2007
Лапух, все, спасибо. Решил сам, именно в годе проблема.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Поле5_AfterUpdate()
    On Error GoTo Поле5_AfterUpdate_Error
    Me.Registration = Nz(DMax("Registration", "tblTest2", "Year(RegDate)= " & Year(Me.[Поле5])), Me.Поле7) + 1
    Me.Поле7 = 0
    
    
    On Error GoTo 0
    Exit Sub

Поле5_AfterUpdate_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Поле5_AfterUpdate, line " & Erl & "."

End Sub



А по поводу полей - это не лень, это просто тестовая табличка ))) Не счел целесообразным.. Ну может и не прав)))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопросы порядковой нумерации в Access2007 / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]