powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопросы порядковой нумерации в Access2007
25 сообщений из 34, страница 1 из 2
Вопросы порядковой нумерации в Access2007
    #39627191
Lekks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые знатоки Access. Есть задача создания базы регистрации событий. В целом ничего сложного, но имеется требование присвоения регистрационных номеров каждой записи, при этом каждый календарный год должен начинаться с новой регистрации, т.е. с единицы. Каким образом посоветуете организовать данный процесс и возможно ли такое в принципе?
...
Рейтинг: 0 / 0
Вопросы порядковой нумерации в Access2007
    #39627197
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопросы порядковой нумерации в Access2007
    #39627198
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соответственно в новом 2019 году первая запись будет 20190101-01 .
...
Рейтинг: 0 / 0
Вопросы порядковой нумерации в Access2007
    #39627215
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопросы порядковой нумерации в Access2007
    #39627216
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan,
как-то так:
Код: vbnet
1.
2.
3.
Private Sub дата_AfterUpdate()
Me.заказ=Format(Me.дата, "yyyymmdd") & " - " & Format(DCount("заказ", "tbl", "year(дата)=" & Year(Me.дата)) + 1, "000")
End Sub
...
Рейтинг: 0 / 0
Вопросы порядковой нумерации в Access2007
    #39627218
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuDarkMan,
как-то так:
Код: vbnet
1.
2.
3.
Private Sub дата_AfterUpdate()
Me.заказ=Format(Me.дата, "yyyymmdd") & " - " & Format(DCount("заказ", "tbl", "year(дата)=" & Year(Me.дата)) + 1, "000")
End Sub


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


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

Код: 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
Вопросы порядковой нумерации в Access2007
    #39717874
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте как в приложенном файле и будет Вам Щастье
...
Рейтинг: 0 / 0
Вопросы порядковой нумерации в Access2007
    #39717875
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после обновления [myData]
...
Рейтинг: 0 / 0
Вопросы порядковой нумерации в Access2007
    #39717911
Lekks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

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

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

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

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

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

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

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

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


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