On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 2285
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.02.12 16:11. Заголовок: Сквозная нумерация документов при работе в сети.


Кто и как решал этот вопрос ?

В однопользовательском режиме как бы все просто.
Держим для этого в базе поле с номером документа + индекс по этому полю.
При добавлении документа следующий номер вычисляем так:
Переключаемся на индекс (о котором писал выше) , делаем
dbgobottom() и присваиваем переменной значение из поля +1
И тд
В многопользовательском режиме такой механизм будет глючить

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 27 , стр: 1 2 All [только новые]





Пост N: 143
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 10.02.12 16:14. Заголовок: Дя платежных поручен..


Для платежных поручений я считывал номер последнего документа и увеличивал его на единицу.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 728
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:16. Заголовок: Отдельная dbf. В ней..


Отдельная dbf. В ней - 1 запись. Каждое поле этой записи соответствует определенному типу документов (нумерация у разных документов своя). Перед вычислением следующего номера документа запись блокируется. Потом вычисляется следующий номер, записывается в нужное поле и запись освобождается. Это если не нужно вести историю выдачи номеров документам.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 412
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 16:17. Заголовок: Сыроежка пишет: Дя ..


Сыроежка пишет:

 цитата:
Дя платежных поручений я считывал номер последнего документа и увеличивал его на единицу.

В момент сохранения документа?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2286
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.02.12 16:19. Заголовок: PSP пишет: Отдельна..


PSP пишет:

 цитата:
Отдельная dbf. В ней - 1 запись. Каждое поле этой записи соответствует определенному типу документов (нумерация у разных документов своя). Перед вычислением следующего номера документа запись блокируется. Потом вычисляется следующий номер, записывается в нужное поле и запись освобождается.


Ты читаешь мои мысли ;)
Так и сделал , но есть один момент. Если накладную я не провел то она не сохраняется в программе
(так заказчик хотел) и удаляется на автомате. В этом случае в нумерации будет дырка.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 729
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:20. Заголовок: Dima пишет: В этом ..


Dima пишет:

 цитата:
В этом случае в нумерации будет дырка.


Это разве важно? В процессе работы любого предприятия документы иногда удаляются. Так что пропуск номера - нормальное явление. Лишь бы не двоились и по хронологии все сходилось.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2287
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.02.12 16:23. Заголовок: PSP пишет: Это разв..


PSP пишет:

 цитата:
Это разве важно?


Для меня нет ;) Но у заказчика могут возникнуть вопросы если гляннет
журнал накладных а там после накладной 105 идет накладная 109.
Надо будет с ним перетереть.

PSP пишет:

 цитата:
Каждое поле этой записи соответствует определенному типу документов (нумерация у разных документов своя)


Только не поле а запись я полагаю

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 413
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 16:24. Заголовок: PSP пишет: Так что ..


PSP пишет:

 цитата:
Так что пропуск номера - нормальное явление.

+1, без этого никак.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 730
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:26. Заголовок: Dima пишет: Только ..


Dima пишет:

 цитата:
Только не поле а запись я полагаю


У меня - поле. Одна запись - несколько полей (по количеству типов документов).
При наступлении очередного 1 января во все поля записывается 0 и нумерация начинается сначала.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 731
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:27. Заголовок: Dima пишет: а там п..


Dima пишет:

 цитата:
а там после накладной 105 идет накладная 109


Можно вести журнал регистрации операций с документами, в котором все операции (в т.ч. и удаление) будут отражены.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 732
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:30. Заголовок: Dima пишет: Если на..


Dima пишет:

 цитата:
Если накладную я не провел то она не сохраняется в программе
(так заказчик хотел) и удаляется на автомате.


Присваивай номер в момент проведения.
Но! Что будет, если потребуется удалить уже проведенный документ? Вот тебе опять пропуск.
Номер удаленного документа следующему документу уже не присвоишь - нарушится хронология.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 414
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 16:30. Заголовок: Dima пишет: Если на..


Dima пишет:

 цитата:
Если накладную я не провел то она не сохраняется в программе
(так заказчик хотел) и удаляется на автомате.

Я думаю он понимает это (про дырку) раз ставит так задачу.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2288
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.02.12 16:33. Заголовок: PSP пишет: У меня -..


PSP пишет:

 цитата:
У меня - поле. Одна запись - несколько полей (по количеству типов документов).


Счаз объясню твой не верный подход ;)
При таком подходе при заведении разных типов документов будет блокироваться
одна и та же запись.
А вот если ввести всего одно поле а по типам документов сделать записи то так будет
логичнее. Заводим какой тип документа прыгаем на нужную запись и блокируем ее


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 733
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.02.12 16:39. Заголовок: Дим, она блокируется..


Дим, она блокируется на ничтожное время. Заблокировали - Прибавили 1 - Сняли блокировку. Доли секунды. У меня записи блокируются самопальной функцией, которая ждет некоторое время, если запись уже заблокирована. Как только запись освобождается, она тут же блокируется. Так что, даже если 10 станций в одну секунду захотят получить номер документа, им придется подождать очень недолго, не более секунды на всех, имхо. Пока особого напряга за несколько лет в этом месте не возникало. Так что, я не считаю это место узким.



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 64
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 10.02.12 16:46. Заголовок: ваащето заказчик не ..


ваащето заказчик не прав:
если он выпустил документ во внешний мир, то потом могут прийти оттуда и устроить допрос
и вот если ты справишся с проблемой "дырок" появится есчо один или даже несколько документов
с таким же номером. тады попробуй проверяющим докажи шо ничего криминального фирма и не думала совершать.

у меня такие ТТНки объявляются испорченными, н номер сохраняется и на него низзя выписать другую
а в реестре для клиента их можно пропускать и вывести в список отдельную ведомость или прилагать к реестру
копии накладных-"отказных"

UPD кароче, попытайся шоб у клиента возникли сомнения в правильности собственных хотелок
пишу на основании своего опыта

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2289
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.02.12 16:49. Заголовок: PSP пишет: Так что,..


Сыроежка пишет:

 цитата:
Для платежных поручений я считывал номер последнего документа и увеличивал его на единицу.


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

PSP пишет:

 цитата:
Так что, я не считаю это место узким


Убедил

Всем спасибо !!!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 298
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.02.12 05:12. Заголовок: Dima А вот если вве..


Dima

 цитата:
А вот если ввести всего одно поле а по типам документов сделать записи то так будет
логичнее. Заводим какой тип документа прыгаем на нужную запись и блокируем ее


Я такой способ применяю и ещё другой - для разных документов разные счетчики

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2257
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.02.12 10:17. Заголовок: PSP пишет: Отдельна..


PSP пишет:

 цитата:
Отдельная dbf. В ней - 1 запись. Каждое поле этой записи соответствует определенному типу документов (нумерация у разных документов своя). Перед вычислением следующего номера документа запись блокируется. Потом вычисляется следующий номер, записывается в нужное поле и запись освобождается. Это если не нужно вести историю выдачи номеров документам.



Хочу в letodb перенести функцию добавления записи UDF_AppendRec из hrb-модуля в сервер, с такой модификацией:
Добавить в TABLESTRU поле флагов, перед go bottom опрашивать это поле в течении, скажем, секунды, если оно установлено, и затем его устанавливать, и после добавления сбрасывать. Это будет аналог FLock(), только не будут блокироваться другие операции.
При этом со 100%-й гарантией ключ (номер документа) будет уникальным.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Не зарегистрирован
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.02.12 11:15. Заголовок: ­Pasha пишет: Хочу в..


*PRIVAT*

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2260
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.02.12 11:45. Заголовок: См. tests/letoudf.pr..


См. tests/letoudf.prg, первую функцию. Ей передается в том числе управляющий индекс, и она выдает go bottom
Я добавил (уже, вечером сброшу) еще проверку: if leto_TableLock( nUserStru, ..), для того, чтобы гарантировать, что 2 пользователя одновременно не сделают go bottom, так что ключ с гарантией будет уникальным.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.02.12 12:03. Заголовок: Для Pasha: А как нач..


Для Pasha:
А как начать номер не с 1, а с 1000 ? Вводить фиктивный ?
У нас, совсем недавно правда отменили, надо было в налоговой получать диапозон для документов (для работы с лесом, деревом один, для торговли другой ...), т.е. для таблиц надо переодически переустанавливать нумерацию (как кончается выделенный диапозон).
Клиент на Hb 2.0 сервер xHb. На последние версии пока нет времени.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 27 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 170
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет