![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уникальный номер зависящий от даты [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]
Индекс документа - уникальный индекс(первичный ключ) таблицы,
а номер документа - номер документа в период.
Два генератора. У первого сплошная нумерация, у второго - нет.
Или в чем проблема?