powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Сквозная нумерация в многопользовательском режиме.
25 сообщений из 45, страница 1 из 2
Сквозная нумерация в многопользовательском режиме.
    #33108469
kanalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно организовать приложение, чтобы оно позволяло осуществлять сквозную нумерацию документов при условии, что документы возникают в разных местах. т.е. пользователи могут одновременно создавать карточки с разных клиентских мест, но нумерация должна быть сквозной и правильной.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33108494
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень многим решения этого вопроса не избежать, тоже иногда размышляю на эту тему. Мне кажется, что решение лежит больше в организационной плоскости, пока ничего лучше, чем уже есть не придумал, я имею ввиду регистрацию пользователей в системах типа ICQ, т.е. этот УИН и должен быть префиксом (не обязательно видимым) ко всем документам, и не только документам. Эта схема позволяет не различать, со своего компьютера вошел пользователь или с чужого, главное, он должен правильно залогиниться. УИН-ы должны иметь сквозную уникальность, выдаваться конкретному пользователи и при удалении, больше никому не назначаться.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33108521
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kanalexКак правильно организовать приложение, чтобы оно позволяло осуществлять сквозную нумерацию документов при условии, что документы возникают в разных местах. т.е. пользователи могут одновременно создавать карточки с разных клиентских мест, но нумерация должна быть сквозной и правильной.
Здесь, я думаю, поможет схема разрешения коллизий, реализованная, например, в схеме закрытого хеширования.

Я думаю, что должно быть так:
Хранить в таблице последний "занятый" номер. Когда пользователь обратится за номером:
- заблокировать доступ к данной записи / таблице;
- расчитать следующий номер;
- записать его в таблицу;
- разблокировать запись / таблицу;
- вернуть номер тому пользователю, который его запрашивал...

Блокировка нужна для того, чтобы исключить коллизию, когда один и тот же номер будет присвоен двум разным документам...

Без блокирования таблицы можно это оформить следующим образом:
- сохранить значение "занятого" номера в локальной переменной;
- расчитать новый номер;
- при записи в таблицу вычисленного "занятого" номера проверить текущее значение "занятого" номера в таблице;
- если оно изменилось, то повторить расчет номера и попытку его сохранения;
- если оно не изменилось - записать новое значение и возвратить номер пользователю...
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33108539
kanalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programmer_OrtodoxОчень многим решения этого вопроса не избежать, тоже иногда размышляю на эту тему. Мне кажется, что решение лежит больше в организационной плоскости, пока ничего лучше, чем уже есть не придумал, я имею ввиду регистрацию пользователей в системах типа ICQ, т.е. этот УИН и должен быть префиксом (не обязательно видимым) ко всем документам, и не только документам. Эта схема позволяет не различать, со своего компьютера вошел пользователь или с чужого, главное, он должен правильно залогиниться. УИН-ы должны иметь сквозную уникальность, выдаваться конкретному пользователи и при удалении, больше никому не назначаться.
Это Вы немного о другом. Так мы получим уникальные идентификаторы, а нужно получить сквозную нумерацию определенного вида документов.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33108584
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE dbo.ДайНомер
	(
		@Тип VARCHAR( 15 ),
		@Год INT,
		@Номер BIGINT OUTPUT
	)
AS
SET NOCOUNT ON
begin tran
Select @Номер=ISNULL(Max(Номер), 0 )+ 1  from Номер 
where Тип=@Тип and Год=@Год 
Update Номер set Номер=@Номер
where Тип=@Тип and Год=@Год 
commit
RETURN 

GO
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33108587
errqwerqwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kanalexКак правильно организовать приложение, чтобы оно позволяло осуществлять сквозную нумерацию документов при условии, что документы возникают в разных местах. т.е. пользователи могут одновременно создавать карточки с разных клиентских мест, но нумерация должна быть сквозной и правильной.

регистрировать документы под сквозными номерами централизовано

документы могут возникать в разных местах, регистрироваться должны в одном месте и получать порядковый номер централизовано...
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33110076
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kanalexКак правильно организовать приложение, чтобы оно позволяло осуществлять сквозную нумерацию документов при условии, что документы возникают в разных местах. т.е. пользователи могут одновременно создавать карточки с разных клиентских мест, но нумерация должна быть сквозной и правильной.
В разных местах создаются документы, но порядковая нумерация у всех единая и растет в соответствии с датами создания документов?
1. Подумать, зачем это нужно, и организационно избежать подобного документооборота.
2. Регистрировать под временными номерами, потом на центральном узле перенумеровывать их и отправлять скорректированный документ обратно. Двунаправленная синхронизация - веселая жизнь вам обеспечена.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33110194
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 templar
Так может только клиенты далеко, а база одна и под ORACLE.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33111859
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR2 templar
Так может только клиенты далеко, а база одна и под ORACLE.
Тогда и проблемы нет.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121526
Vidok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сахават Юсифов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE dbo.ДайНомер
	(
		@Тип VARCHAR( 15 ),
		@Год INT,
		@Номер BIGINT OUTPUT
	)
AS
SET NOCOUNT ON
begin tran
Select @Номер=ISNULL(Max(Номер), 0 )+ 1  from Номер 
where Тип=@Тип and Год=@Год 
Update Номер set Номер=@Номер
where Тип=@Тип and Год=@Год 
commit
RETURN 

GO


Так делать не советую.
Будут дублированные номера.
Если в прогаммах Сахавата принята такая идеология, то достоверность данных в многопользовательской среде они не обеспечат
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121555
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что плохо и как исправить?
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121576
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kanalexКак правильно организовать приложение, чтобы оно позволяло осуществлять сквозную нумерацию документов при условии, что документы возникают в разных местах. т.е. пользователи могут одновременно создавать карточки с разных клиентских мест, но нумерация должна быть сквозной и правильной.
Здесь очень важно договориться о терминологии.
Сквозная нумерация - очень расплывчатый термин

Есть подходящие понятия:
- Непрерывная нумерация. Все номера использованы. Дыр в номерах нет. Но возможны аномалии в хронологии.
- Монотонно возрастающая нумерация. Если документ2 хрнологически создан позже документа1, то номер документа2 больше, чем номер документа1. Но возможны дыры

Сделать одновременно и монотонно возрастающую и непрерывную нумерацию можно. Но придется слишком много ограничений на пользователя накладывать. Например, нельзя отменить создание документа, после того, как пользователь нажал кнопку Создать, заполнение документа обязательно должно быть доведено до конца, до записи. Или, например, номер генерируется не при создании, а при записи (это значит, что до момента записи документа у него нет номера)

Непрерывная же нумерация потребует хранения неиспользованных номеров. Например, пользователь начал создавать документ, номер сгенерировался. Пользователь передумал, нажал ESC, номер освободился и перешел в таблицу неиспользованных номеров.

Естественно, при создании документа сначала рассматривается таблица неиспользованных номеров. Если там что-нибудь есть - номер берется оттуда.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121610
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mazzy
Непрерывная же нумерация потребует хранения неиспользованных номеров. Например, пользователь начал создавать документ, номер сгенерировался. Пользователь передумал, нажал ESC, номер освободился и перешел в таблицу неиспользованных номеров.

Естественно, при создании документа сначала рассматривается таблица неиспользованных номеров. Если там что-нибудь есть - номер берется оттуда.

Так я делал в ДОСе для генерации позиционных кодов.(материалы и т.д.)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121616
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовТак я делал в ДОСе для генерации позиционных кодов.(материалы и т.д.)
Ура! Сахават, вы молодец (если вы это сказали только для похвальбы)
А по делу есть что сказать?
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121659
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор

А предметно, где это нужно?

Как правило, нужна всего лишь монотонная нумерация. Не забывайте, пользователь всегда имеет право удалить запись и получится дырка, как бы Вы не старались.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121690
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael_Как правило, нужна всего лишь монотонная нумерация.
Мало того, рискну утверждать, что как правило достаточно генерировать уникальные номера. Последовательность не обязательно должна быть монотонной.

Причем часто требование можно сделать еще менее сильным: как правило достаточно повторяющихся с очень малой вероятностью номеров (пример таких номеров - GUID)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121718
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
генерации позиционных кодов

Это и есть дело.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121745
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей!

Как Аксапта генерирует коды при создании спецификации для полной модификации на на основании базовой спецификации? (например: изделие отличается только линейными размерами)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121761
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават, вообще говоря, здесь спрашивали про другое.
Может лучше новую тему открыть.

Кратко: как укажет консультант в нумераторе. Либо ручная нумерация, либо монотонная, либо непрерывная. Но номер не зависит от характеристик.

Может все таки новую тему?
Вернемся к нумераторам? итак позиционная нумерация.
Расскажите, подробнее, пожалуйста. Думаю, будет интересно.
Кроме того, расскажите - парсите ли вы номер или он используется как атомарное значение, а значения позиций хранятся в отдельных полях таблицы?
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121769
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте вот с чем определимся:
есть номер (например номер документа) и есть PK
так вот номер не обязательно должен быть уникален в сквозном варианте. Он
может быть например уникален в пределах года или месяца, причем это может
зависеть от текущего законодательства.
И не нужно номер использовать для идентификации записи как PK. Для PK есть
GUID или identity.
Другой дело, что нумерация без дыр хоть и в пределах года все так и вещь
необходимая.
Тут выделяют пул свободных номеров. При создании документа номер из пула
блокируется, при сохранении - удаляется из пула. Для ситуаций обрыва связи и
прочих внештатных работает JOB, который освобождает блокировки номеров из
пула, например, по тайм ауту и возвращает номер в пул.


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121791
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
так вот номер не обязательно должен быть уникален в сквозном варианте. Он
может быть например уникален в пределах года или месяца, причем это может
зависеть от текущего законодательства.
:)
Уникален. Просто у вас номер - составной.
Состоит из нескольких полей.

Роман Дынник
И не нужно номер использовать для идентификации записи как PK. Для PK есть
GUID или identity.
Ой. Это вопрос не нумерации.
Это вопрос искусственных и естественных ключей.
Тут столько битв на эту тему было.
http://www.sql.ru/forum/actualthread.aspx?tid=104535
Может не надо, а?

Нет, Роман, вы не решили проблему.
Вы просто замели ее под коврик. GUID или identity - это и есть номера.
Просто вы решили использовать стандартные средства для генерации номеров.
Но решения у вас нет :)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121804
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, поторопился.

Про генерацию номеров...
Роман Дынник
Тут выделяют пул свободных номеров. При создании документа номер из пула
блокируется, при сохранении - удаляется из пула. Для ситуаций обрыва связи и
прочих внештатных работает JOB, который освобождает блокировки номеров из
пула, например, по тайм ауту и возвращает номер в пул.
Или так. Это одна из реализаций для хранения неиспользованных номеров. :)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121818
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
Другой дело, что нумерация без дыр хоть и в пределах года все так и вещь
необходимая.

На практике где помешает дырка? В платежках - нет, в счетах-фактурах тоже никто ничего не запрещал, номера могут быть в России и составными. В справочнике товаров - вообще бред. Вопрос не КАК НАДО, а ГДЕ НАДО?

Ну добъетесь Вы ввода без дырок, а пользователь удалит запись из середины списка и что дальше?

Достаточно уникального номера, в некоторых случаях монотонно возростающего.
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121827
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael_Ну добъетесь Вы ввода без дырок, а пользователь удалит запись из середины списка и что дальше?
Если речь идет о непрерывных, то номер удаленной записи:
1. попадает в список неиспользуемых номеров и
2. выдается следующей новой записи

michael_Достаточно уникального номера, в некоторых случаях монотонно возростающего.
А вот с этим согласен. :)
...
Рейтинг: 0 / 0
Сквозная нумерация в многопользовательском режиме.
    #33121839
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
Уникален. Просто у вас номер - составной.
Состоит из нескольких полей.

В терминах БД не уникален, уникальным был бы альтернативный уникальный ключ
по двум полям: номер, год


Ой. Это вопрос не нумерации.
Это вопрос искусственных и естественных ключей.
Тут столько битв на эту тему было.
Может не надо, а?

Не надо, все для себя уже давно все решили. Лично я выбрал guid и не
мучаюсь.
А вот в этом топике мы видимо не определились номер - он только для
нумерации или еще как PK?


Нет, Роман, вы не решили проблему.
Вы просто замели ее под коврик. GUID или identity - это и есть номера.
Просто вы решили использовать стандартные средства для генерации номеров.
Но решения у вас нет :)

Решение у меня давно есть и хорошо работает.
GUID и identity - это не номера, это уникальные PK-ключи и смысла делать для
них нумерацию без дыр никакого нет.
А Номер есть номер, это атрибут документа. Хотите для его создания
используйте стандартные средства, хотите - свои.
Но не надо смешивать номер с PK.
Если продолжить обсуждение на этом поприще то все выльется в тоже
"естественные против искуственных".


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Сквозная нумерация в многопользовательском режиме.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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