Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уникальный номер зависящий от даты [D6, IB6.x]


TuZ ©   (2003-08-12 10:15:00) 

Здраствуйте мастера!
Есть такая задача: есть некая таблица, в которой хранятся документы, документы должны иметь свой номер. Использование генераторов и тригеров не совсем подходит, поскольку нужно, чтобы номер документа по истечении периода сбрасывался в "1".
Изменять значение генератора - не выход, поскольку не будет возможности ввести документ за прошлый период...
Есть мысля - завести на каждый период свой генератор, но это слишком неудобно.
Если у кого-то была похожая проблема или кто-то встречал где-то материал по этой теме: плиз, поделитесь.
Заранее спасибо.


Zacho   (2003-08-12 11:33:00) [1]


> DenK_vrtz © (12.08.03 11:28)

Ничего само по себе не блокируется. Триггер работает в контексте транзакции, в которой произошла модификация данных таблицы. Со всеми вытекающими отсюда последствиями..


DenK_vrtz   (2003-08-12 11:28:00) [2]

Zacho © (12.08.03 11:24), прости за глупый вопрос. А в IB6.x при выполнении триггера таблица не блокируется? А просто не знаю.


Zacho   (2003-08-12 11:24:00) [3]


> TuZ (12.08.03 11:13) [6]
> Вопрос: зачем тогда генератор?.. Можно ведь определять макс.
> значение поля DocNo.

Можно. Но тогда надо блокировать таблицу (и на чтение тоже !), иначе при многопользовательской работе рискуешь получить конфликты в нумерации.
Посмотри ветку http://www.delphimaster.ru/cgi-bin/forum.pl?id=1060066885&n=1- может будет полезно.


TuZ   (2003-08-12 11:22:00) [4]

Спасибо большое!
Кое-какие мысли у меня появились.


DenK_vrtz   (2003-08-12 11:19:00) [5]

Вариантов решения проблемы много, надо выбрать оптимальный!
Можно вообще создать таблицу значений периодов и текущих значений номеров документов и от нее играть.


DenK_vrtz   (2003-08-12 11:17:00) [6]

>>Вопрос: зачем тогда генератор?.. Можно ведь определять макс. значение поля DocNo

я же написал выше, что можно испоьзовать генератор, а можно и не использовать :-)


TuZ   (2003-08-12 11:13:00) [7]

Я так понял, что:

- есть генератор GenNo
в тригере:
- при каждой встаке определяется дата
- по дате определяется период
- и генератору присваивается макс. номер+1 или 1

Вопрос: зачем тогда генератор?.. Можно ведь определять макс. значение поля DocNo.


DenK_vrtz   (2003-08-12 10:35:00) [8]

Написать триггер, который бы определял период и текущее значение документа за период. Если данных за период нет, то № документа = 1.


TuZ   (2003-08-12 10:32:00) [9]

2 DenK_vrtz

Да, но как такой генератор сделать... Меня этот вопрос поставил в тупик...


DenK_vrtz   (2003-08-12 10:29:00) [10]

2 TuZ, так в чем проблема то?
Один генератор, который меняет значения в зависимости от периода или не генератор, а расчет значения номера документа в зависимости от максимального номера документа в данном периоде.
Сразу в нескольких периодах можно работать?


TuZ   (2003-08-12 10:24:00) [11]

2 DenK_vrtz

Совершенно верно: ID записи уникальный: обычный генератор_триггер. Он нам не очень интересен... Работает как положено... И знать пользователю его и не очень-то надо...
А по поводу номера документа: хотелось бы ее генерацию бросить на сервер... Типа через триггер или процедуру...


DenK_vrtz   (2003-08-12 10:21:00) [12]

Индекс документа - уникальный индекс(первичный ключ) таблицы,
а номер документа - номер документа в период.
Два генератора. У первого сплошная нумерация, у второго - нет.
Или в чем проблема?


Наверх

Титульная страница Поиск, карта сайта Написать письмо