Автонумерация документов при смене года...
Автор GS   
17.08.2001 г.
"...В этом году все контракты идут под автом. номером плюс текущий год. В следующем году автом. номер должен начинаться с начала..." DownLoad к статье


Дмитрий
29.06.2001


Как программно обнулить AutoValue в таблице?
К примеру, мне нужно обнавлять счетчик в таблице каждый раз при изменениии текущего года.
Помогите кто может!


Nic
29.06.2001


Хм...
1 Если удалить все записи и сжать базу данных, отсчет будет от единицы
2 Либо через рекордсет.

А в чем задача?


Дмитрий
29.06.2001


Задача в следующем...
Необходимо автоматизировать номер контракта. Для примера:
В этом году все контракты идут под автом. номером плюс текущий год.
В следующем году автом. номер должен начинаться с начала.
Опишите, пожалуйста, второй метод


Nic
29.06.2001


Re:Задача в следующем...
Самый легкий способ - создать отдельную таблицу с полями счетчика
и текущего года по умолчанию. При создании нового контракта проверять год на изменение
А при изменении года прописать код на удаление записей таблицы и присвоении первому контракту "1"

А в таблицу контрактов вносить слитные значения номера контракта и года.
В этой таблице я бы сделал для удобства поле номера контракта-год текстовым, что бы можно было писать, например
000012001
000022001
100312001


Дмитрий
29.06.2001


Очень благодарен Вам за ответ и последнее...
Извините, что немного Вас помучал и последнее:
Как автоматически удалить все записи из extra таблицы, чтобы отсчет начался с единицы. Я имею ввиду автоматическое сжатие.


Nic
29.06.2001


Сносим все на фиг :)
Можно и не сжимать.


Function DDD()
'Проверяет текущий год и если предыдущее поле совпадает с текущим годом,
'добавляет новую запись
Dim rs As Recordset
Dim God As String
Set rs = CurrentDb.OpenRecordset("Table1")
If Not rs.EOF Then
rs.MoveLast
God = Format(rs("Year"), "yyyy")
End If
rs.AddNew
If Format(Now(), "yyyy") = God Or rs("ID") = 1 Then
rs("Year") = Now()
rs.Update
rs.Close
Else
'Если год изменился переходим на создание новой таблицы
rs.Close
Call ChangeYear
End If
End Function

Sub ChangeYear()
Dim mySQL As String
'Удаляем на хрен старую таблицу
DoCmd.DeleteObject acTable, "Table1"

'И создаем новую
mySQL = "CREATE TABLE Table1 (ID COUNTER CONSTRAINT myIndex PRIMARY KEY,Year DATETIME)"
DoCmd.RunSQL mySQL
End Sub



Решение очень радикальное, но домой я тоже хочу :))
А мужики завтра что-нибудь толковее напишут :))


Nic
29.06.2001


А мыло яичное бане №5 особенно симпатично.
Во-первых, естественно, что в выше приведенном коде надо вставить свои строки передачи значений в главную таблицу.
Во -вторых, ты можешь добавить поле клиента, и перед удалением сливать таблицу во внешний файл. Реестр контрактов за год в удобном виде никому не помешает...
Ну и так далее.


Timour
29.06.2001


а я бы вот так сделал
Создайте форму на основе своей таблицы
и в обработчике события "До Вставки" напишите:

Private Sub Form_BeforeInsert(Cancel As Integer)
Number = 1 + Nz(DMax("Number", "Table2", "[Year]=" & DatePart("yyyy", Now())))
End Sub

'Здесь :
'Number - поле с номером (его лучше заблокировать, 'чтобы исключить
'ручной вввод
'Table2 - ваша таблица
'Year - имя Long поля с годом (4 цифры)



Если нужно вводить и за прошлые годы, то вместо события "До Вставки"
используйте событие "После Вставки", а вместо Now() - текущее поле Year и 1 не
прибавляйте - так наверно даже корректней.

Просмотров: 8608

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code