powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Блокировки справочников и документов.
48 сообщений из 48, показаны все 2 страниц
Блокировки справочников и документов.
    #36323645
skmdeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу фреймворк для создания бизнес приложений на Qt/C++/PostgreSQL . Создание и редактирование справочников, документов, периодических реквизитов, и т.д. по типу 1С Предприятия работают. Дошло до организации многопользовательской работы.
Как в таких случаях осуществляются в блокировки открытых пользователями документов, чтобы исключить одновременное редактирование несколькими пользователями? Можно хранить информацию о заблокированных объектах в самой БД, в какой либо таблице. Но может есть другие, более надежные варианты?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36323954
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блокировки в этих случаях можно не применять - пусть разные пользователи редактируют себе
сохранение разрешать только первому (перед сохранением проверять timestamp)
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36323958
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведи пример, зачем в бизнес-системе нужно одновременное редактирование одного и того же реквизита одного и того же документа или справочника. И при этом такое редактирование критически недопустимо.

Вот открыли 2 юзера один и тот же документ (уже созданный). Вот оба видят на экране все его, к примеру, 20 реквизитов. Один исправил 2 реквизита, второй - 3 реквизита. От одного ушел update двух полей, от другого - update 3 полей. Вот зачем тут блокировка ? Юзеры-то в реальности решают разные задачи (и исправлять будут разные реквизиты). А если одну и ту же - то кто ж им доктор - кто последний - того и правда.

PostgreSQL - версионник. Поверь моему богатому опыту. Не применяй вообще блокировки в бизнес-системах на PostgreSQL - и будет тебе счастье.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36323966
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
strizh,
помогите советом-как без блокировки решить задачу:

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

так я делаю на Foxpro

как быть с sql-сервером?

думаю, автору тему тоже будет интересно...
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36323999
skmdeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне показался самым подходящим именно вариант - "кто успел, тот и съел". Т.е. кто первый, тот успел записать, остальным отказ. Т.к. у меня предусмотрено поле для записи даты/времени изменения документа, то получится. При открытии документа считываем, если к моменту сохранения она не изменилась (т.е никто не изменил), то можем записывать.
Меня самого поведение 1С с блокировками документов и справочников достало, и как там делать не хотелось.

Спасибо!
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36324017
trdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skmdeveloperКак в таких случаях осуществляются в блокировки открытых пользователями документов, чтобы исключить одновременное редактирование несколькими пользователями?
Как в смысле "когда"? При открытии формы документов.
Но форму в 1С можно открыть в 2-х режимах:
- редактирования (тут идет блокировка) и
- просмотра;
это полезно и часто используется.
skmdeveloperМожно хранить информацию о заблокированных объектах в самой БД, в какой либо таблице.
И можно и нужно, полезно для анализа что заблокировано, когда юзверь не дай бог вылетит.
на счет системы блокировок, не забывай, что есть не только документы, но и справочники и т.п.
Блокировками лучше всего управлять. Есть пачка мыслей по этому поводу, исходя из моего личного опыта. Могу поделиться, если выйдешь в аську.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36324062
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trdmskmdeveloper
[quot skmdeveloper]Можно хранить информацию о заблокированных объектах в самой БД, в какой либо таблице.
И можно и нужно, полезно для анализа что заблокировано, когда юзверь не дай бог вылетит.


пусть сама СУБД занимается блокировками и вылетевшими юзерами - она для этого и существует
про отвалившегося пользователя СУБД узнает в первую очередь, и сама снимет блокировку
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36324263
trdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agertrdmskmdeveloper
[quot skmdeveloper]Можно хранить информацию о заблокированных объектах в самой БД, в какой либо таблице.И можно и нужно, полезно для анализа что заблокировано, когда юзверь не дай бог вылетит.пусть сама СУБД занимается блокировками и вылетевшими юзерами - она для этого и существует про отвалившегося пользователя СУБД узнает в первую очередь, и сама снимет блокировку СУБД не знает, как работать с блокировками, она их просто обслуживает. Управлять блокировками должен разработчик.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36324333
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trdmУправлять блокировками должен разработчик.
если не сложно - раскройте тему.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36325112
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skmdeveloper,
вообще то, фреймворк - это конструктор.
Если пишите для себя, то ещё можно выбрать 1тип блокировок.
Но вот если на продажу, то конструкто должен обеспечивать все возможные способы (логические, физические, на строку, на документ, на атрибут, на временную метку, на ....)

Так что пишите под задачу, т.к. все случаи конструктора вы не опишите.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36340241
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правило в моей практике полезны были 2 типа блокировки при редакции документов. Первый - когда документ блокируется при входе пользователя (более детальный вариант - поле при изменении пользователем), остальным желающим редактировать документ, выдается сообщение о блокировке (обязательно надо сообщать, кто заблокировал). Вариант 2 - практическое отсутствие блокировок, и последующие громкие разборки с пользователями "почему я туда ввела 5, а получилось 4".
С ограничениями по рассчитываемым данным все сложнее, тут все зависит от "политики партии". Блокировать ввод на уровне полных документов обычно недопустимо, поэтому стоит либо делать сначала микрозапрос на временное резервирование по вводимому показателю (более пользовательски-дружественный вариант), либо после полного ввода документа делать проверку и давать отказ в случае "успевания" другим пользователем.
Блокировки либо стоит делать с помощью СУБД, либо внимательно следить за транзакциями, чтобы при "нештатном" вылете пользователя не осталось неснятых блокировок.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36340677
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Банально:
Таблица блокированных д-тов. Перед открытием проверяем, есть ли д-т в списке. Если нет, то добавляем список и открываем документ "на запись". Если уже есть, то открываем "только на чтение".
По выходу с редактирования удаляем из списка.

Периодически сверяем этот список с активными юзерами. Если юзер числится в списке, но его нет в активных п-лях (отвалился) - удаляем "занятые им" строки.

Запросто рулится одной простой ХП. Не зависит от платформы.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36340742
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mik ProkoshinКак правило в моей практике полезны были 2 типа блокировки при редакции документов.
есть еще очень полезный вариант №3 , суть которого заключается в организации бизнес-процессов обработки документов, распределении полномочий и разгребания "каши", в которой, зачем-то, 2 (и более) пользователя сталкиваются лбами при редактировании одного и того же документа. Отсюда и придумываются всякие изощренные средства блокировок, пишутся тонны ненужного кода и т.д. и и т.п.

Mik Prokoshinотсутствие блокировок, и последующие громкие разборки с пользователями "почему я туда ввела 5, а получилось 4".
Если внимательней посмотреть на эту ситуацию, то сразу же всплывает вся ее абсурдность. А абсурд заключается в том, что подобный вопрос возникнет и через секунду после снятия блокировки и изменения только что разблокированного документа другим пользователем. Счастье оказывается мимолетным.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36340849
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmесть еще очень полезный вариант №3 , суть которого заключается в организации бизнес-процессов обработки документов, распределении полномочий и разгребания "каши", в которой, зачем-то, 2 (и более) пользователя сталкиваются лбами при редактировании одного и того же документа. Отсюда и придумываются всякие изощренные средства блокировок, пишутся тонны ненужного кода и т.д. и и т.п.

Абстрактно бизнес-процессы могут регламентировать многое, но не вс е и не всегда могут жить только по расписанным "процессам". Например, типичный случай "сталкивания лбами" - когда надо массово отредактировать справочник. Это нештатная ситуация, но иногда бывает. И при этом бывают коллизии, как бы люди не пытались вручную распределить обязанности. И в решении этих коллизий помогают блокировки. Точно так же стандартный вариант, когда документ имеют право редактировать работники отдела, которые договориться между собой не смогли. И т.д.

iscrafmMik Prokoshinотсутствие блокировок, и последующие громкие разборки с пользователями "почему я туда ввела 5, а получилось 4".
Если внимательней посмотреть на эту ситуацию, то сразу же всплывает вся ее абсурдность. А абсурд заключается в том, что подобный вопрос возникнет и через секунду после снятия блокировки и изменения только что разблокированного документа другим пользователем. Счастье оказывается мимолетным.
Если у пользователя, когда он входит в документ (начинает редактировать поле), сразу высвечивается - "документ занят Ивановой И.И.", то он сразу понимает, что что-то не то и выясняет, все-таки нормальные люди работают!
Если же этот пользователь потом все равно меняет этот документ с последующими разборками, то таких случаев уже бывает на порядок меньше.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36340880
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mik ProkoshinНапример, типичный случай "сталкивания лбами" - когда надо массово отредактировать справочник. Это нештатная ситуация, но иногда бывает.

пример неудачный. Ситуация штатная вполне. С блокировками, превращается в садо-мазо игры между системой и пользователем. Особенно когда пакет достаточно объемный и один человек занимается прописыванием массо-габаритных параметров, к примеру, а другой параметров ГТД в номенклатурном справочнике. Эта ситуация и ситуация описанная ниже - более чем наиграны. Это все равно что резервировать в момент ввода документа.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36341676
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте интерфейс, аналогичный системам управления задачами. Никогда не возникнет необходимость в блокировках. Каждый документ в один момент может быть только у одного пользователя.
Это и в жизни так же. Можете себе представить, что двое человек записывают данные в один листочек?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36341852
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmЭта ситуация и ситуация описанная ниже - более чем наиграны. Это все равно что резервировать в момент ввода документа.Бывает и такое. Например он-лайн продажа билетов или быстрооборачиваемых товаров. Один товарный документ может набираться долго. При этом недопустимо, чтоб после того как набор окончен, вдруг оказалось, что внесенного товара уже нет на складе. Иначе придется снова садиться и подбирать аналог товара или корректировать документ.

ЗЫ: встречал ситуацию на оптовом складе (продукты). Барыги беседуют с менеджерами и заказывают по 30-50 различных позиций.
Иногда, когда желаемого товара нет или мало, берут близкие аналоги (масло, водка, кетчупы, консервы и пр.).
Первое время без онлайн резервирования менеджеры и клиенты просто выли. :)
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36341904
trdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old NickИспользуйте интерфейс, аналогичный системам управления задачами. Никогда не возникнет необходимость в блокировках. Каждый документ в один момент может быть только у одного пользователя.
Это и в жизни так же. Можете себе представить, что двое человек записывают данные в один листочек?
Думаю это правильный взгляд на вещИ.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36341913
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVОдин товарный документ может набираться долго. При этом недопустимо, чтоб после того как набор окончен, вдруг оказалось, что внесенного товара уже нет на складе.
резервируется конкретный товар или конкретный билет или конкретное место в кинотеатре. Долго набирается документ, но не резерв. Резерв - после ввода каждой позиции (см. рис. пример). Я как раз и имел ввиду ту ситуацию, когда документ из 500 позиций неспеша набирается, а потом резервируется. При активной конкуренции за ресурсы конечно половина отлетит.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36342313
vak_200566
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
резервируется конкретный товар или конкретный билет или конкретное место в кинотеатре. Долго набирается документ, но не резерв. Резерв - после ввода каждой позиции (см. рис. пример). Я как раз и имел ввиду ту ситуацию, когда документ из 500 позиций неспеша набирается, а потом резервируется. При активной конкуренции за ресурсы конечно половина отлетит.

С вами согласен, сам не использую блокировки. Но есть сомнения по поводу "правильно ли это". Очень интересно сравнить с фронт-офисными приложениями (кроме 1С конечно). Если располагаете информацией, поделитесь плиз.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36342501
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmLSVОдин товарный документ может набираться долго. При этом недопустимо, чтоб после того как набор окончен, вдруг оказалось, что внесенного товара уже нет на складе.
резервируется конкретный товар или конкретный билет или конкретное место в кинотеатре. Долго набирается документ, но не резерв. Резерв - после ввода каждой позиции (см. рис. пример).

Mik ProkoshinС ограничениями по рассчитываемым данным все сложнее, тут все зависит от "политики партии". Блокировать ввод на уровне полных документов обычно недопустимо, поэтому стоит либо делать сначала микрозапрос на временное резервирование по вводимому показателю (более пользовательски-дружественный вариант), либо после полного ввода документа делать проверку и давать отказ в случае "успевания" другим пользователем.

Ну и о чем спорим ? Об одном и том же ?
Я просто четко понимаю, что в размеренной жизни всегда бывают хаотичные форс-мажорные ситуации, от которых никто не застрахован. И в этом случае помогать должны блокировки. Исключать подобный форс-мажор означает заведомо ставить потребителя в ситуацию, когда начальник сказал - сделать срочно, а он оправдывается, "да вроде сделали, только получилась какая-то фигня, разбираемся вот...". Опять же, тот, кто говорит о "заранее прописанных бизнес-процессах", сильно недооценивает роль "волевого руководства" и "форс-мажора", которые у нас сильно распространено.

Кроме того, существуют еще и служебные блокировки для синхронизации при расчетах, типа как в 1С, о которых мы пока умалчиваем.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350049
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vak_200566iscrafm
резервируется конкретный товар или конкретный билет или конкретное место в кинотеатре. Долго набирается документ, но не резерв. Резерв - после ввода каждой позиции (см. рис. пример). Я как раз и имел ввиду ту ситуацию, когда документ из 500 позиций неспеша набирается, а потом резервируется. При активной конкуренции за ресурсы конечно половина отлетит.

С вами согласен, сам не использую блокировки. Но есть сомнения по поводу "правильно ли это". Очень интересно сравнить с фронт-офисными приложениями (кроме 1С конечно). Если располагаете информацией, поделитесь плиз.

не представляю, как можно зарезервировать товар без блокировки
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350103
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager
не представляю, как можно зарезервировать товар без блокировки
Так же, как можно предоставить пользователю править запись, не гарантируя ему, что он сможет её сохранить...
Зарезервировать товар без блокировки можно. А вот гарантированно, быстро и производительно зарезервировать товар без блокировки при большом скоплении желающих - гораздо сложнее...
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350151
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerне представляю, как можно зарезервировать товар без блокировки
это забота СУБД.
Образно:
Код: plaintext
update whonhand set resqty=resqty + @qty where itemid =@itemid
itemid - id резервируемого ресурса
qty - резервируемое количество
onhandqty - доступное количество
ограничение: resqty <= onhandqty.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350181
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛой
Так же, как можно предоставить пользователю править запись, не гарантируя ему, что он сможет её сохранить...
это уже не есть резервирование

АнатоЛой
А вот гарантированно, быстро и производительно зарезервировать товар без блокировки при большом скоплении желающих - гораздо сложнее...

сложнее... - как?
или все-таки нельзя?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350186
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmvill_agerне представляю, как можно зарезервировать товар без блокировки
это забота СУБД.
Образно:
Код: plaintext
update whonhand set resqty=resqty + @qty where itemid =@itemid
itemid - id резервируемого ресурса
qty - резервируемое количество
onhandqty - доступное количество
ограничение: resqty <= onhandqty.
если несколько клиентов захотят забрать последнюю единицу товара - что получится?
или после резервирования опять проверять наличие?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350207
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerесли несколько клиентов захотят забрать последнюю единицу товара - что получится?
или после резервирования опять проверять наличие?
у первого резерв будет принят, остальные получат отвод.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350222
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmvill_agerесли несколько клиентов захотят забрать последнюю единицу товара - что получится?
или после резервирования опять проверять наличие?
у первого резерв будет принят, остальные получат отвод.

получается неявная блокировка

но может наверное и так получится:
проверяем наличие
потом резервируем
но за этот промежуток кто-то уже забрал наш товар.

а вариант

блокировка,
если получилось:
проверка наличия
резервирование
снятие блокировки

сработает железно
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350293
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager
блокировка,
если получилось:
проверка наличия
резервирование
снятие блокировки

сработает железно
блокировка чего?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350296
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmvill_ager
блокировка,
если получилось:
проверка наличия
резервирование
снятие блокировки

сработает железно
блокировка чего?

whonhand
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350299
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager,

update... а база данных сама прекрасно справляется с тем, за что отвечает.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350306
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm,

если можно, поясните
я не слишком знаком с принципом работы update (к сожалению :( )
учусь, можно сказать (выбираюсь из Foxpro :)

в моем представлении update без проблем увеличит количество зарезервированного товара
но ответа на вопрос - есть ли товар в наличии? - он не дает

еще раз пример:
одна единица товара, трое операторов увидели на экране остаток, и подтвердили расход
что получится?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350322
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager,
для таблицы whonhand определено ограничение (resqty <= onhandqty), constraint... т.е. количество зарезервированного товара самой СУБД не допускается больше чем остаток. Именно это ограничение и определяет возможность дальнейших действий.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350332
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm,

таки неявная блокировка :)
и условие constraint может быть любым?

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

спасибо
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350349
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerучусь, можно сказать (выбираюсь из Foxpro :)Быстрее переходите на нормальные СУБД ;)

vill_agerв моем представлении update без проблем увеличит количество зарезервированного товара
но ответа на вопрос - есть ли товар в наличии? - он не даетНа этом update может триггер висеть, который выдаст ошибку при отсутствии товара в наличии. Вообще, это может быть и не update а более сложная хранимая процедура. Важно, чтобы она исполнялась в транзакции с правильным уровнем изоляции. Т.е. последовательность такая:

запуск транзакции
резервирование (при этом триггер проверяет, есть ли остаток, и ни в коем случае не проверяйте остаток селектом)
фиксация транзакции

Если на каком-то этапе произошла ошибка, то транзакция просто откатывается

vill_agerеще раз пример:
одна единица товара, трое операторов увидели на экране остаток, и подтвердили расход
что получится?
Стартуют три транзакции. При выполнении update сервер автоматом ставит неразделяемую блокировку на запись. Соответственно, только одна из транзакций сможет выполнить этот update. Остальные засыпают. Та транзакция, которой повезло, делает коммит и сообщает об этом счастливому юзеру. В этот момент сервер автоматом снимает с записи блокировку. Просыпаются обе ожидающие ее транзакции. Пытаются сделать update. Та которой повезло больше, его выполняет, что приводит к простановке блокировки. Третья транзакция снова засыпает. Но тут срабатывает триггер, который говорит, что на складе уже ноль и отрицательным остаток быть не может. Ошибка возвращается юзеру и транзакция откатывается. В момент отката (как и при коммите) автоматом снимаются все проставленные транзакцией блокировки. Тут просыпается третья транзакция, пытается сделать update, но триггер не спит и выдает ошибку. Третий юзер тоже получает откат транзакции.

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

А вообще, запустите на компе три консоли, настройте их, чтобы они не делали автокоммит после выполнения каждой команды, стартуйте вручную транзакции и выполните апдейт одной и той-же записи из разных консолей. Вы увидете блокировки в действии. Выполните в одной консоли коммит или роллбак. Вы увидите снятие блокировок в действии. Поиграйтесь с констрейнами уникальности по полю: создайте таблицу, в которой есть уникальный ключ. Из одной консоли вставьте запись, потом из другой консоли попробуйте вставить запись с таким-же ключем. Думаете, сервер должен выдать ошибку? Он не может... Он просто заблокирует вторую транзакцию, т.к. не знает, что делать. Если первая консоль транзакцию откатит, тогда вторая сможет выполнить операцию. Если первая консоль транзакцию коммитит, тогда вторая должна выдать сообщение об ошибке дублирования ключей.

Забывайте про свой Foxpro и добро пожаловать в мир декларативного описания целостности данных и автоматической поддержки транзакций в разных режимах изолированности.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350357
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerя обычно вообще не держу таблицы с остатками и и резервом-все находится в одной таблице прихода-расхода, и для того чтобы узнать остаток просто суммируется поле количестваА вот это плохо. Если одновременно стартуют несколько транзакций, то они могут суммировать независимо друг от друга и друг-другу не мешать. Но если надо не только просуммировать, но и блокировать остаток, то тут нужна отдельная запись с остатком.

Можно повесить триггер на таблицу прихода-расхода, который будет автоматом корректировать остатки. Т.е. вы просто вставляете запись "расход со склада", срабатывает триггер, который быстро выясняет, что в итоге получился отрицательный остаток, и выдает ошибку. Транзакция откатывается. Причем, просто просуммировать остаток недостаточно, его еще надо записать в таблицу остатков.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350382
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry V. LiseevА вот это плохо. Если одновременно стартуют несколько транзакций, то они могут суммировать независимо друг от друга и друг-другу не мешать. Но если надо не только просуммировать, но и блокировать остаток, то тут нужна отдельная запись с остатком.

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

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

а как с таблицей остатков организовать такую работу:

кончился месяц, бухи обрабатывают документацию, делают списание
но - пошел приход нового месяца, который не должен быть виден в прошлом

или торговля - кончается день, выписка идет, уже есть завтрашний приход (бывает такое), и операторы забивают заявки на завтра. завтрашний приход не должен быть виден в сегодня - продавать его нельзя

выход - заблокировать таблицу прихода-расхода от изменений, просуммировать по нужную дату, записать расход, отпустить таблицу

ну или тоже самое внутри триггера на запись
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350444
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager,

вы какой клиент/язый используете?
расчет остатков не единственная операция которая может потребоваться, где у вас будет находится бизнес логика7
какое количество людей будет обслуживать система? используется ли веб доступ?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350508
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Var79vill_ager,

вы какой клиент/язый используете?
расчет остатков не единственная операция которая может потребоваться, где у вас будет находится бизнес логика7
какое количество людей будет обслуживать система? используется ли веб доступ?

я из далекого прошлого :) - фокспро
а там вся логика - в приложении
соответственно системы небольшие - до 50 пользователей, до миллиона записей в таблице, никакого веба :)
пока работает

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

и так пока понимаю - блокировки есть, только скрыты под транзакциями. Удобно. Но можно затеять длинную транзакцию, которая подвесит остальных юзеров.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #36350590
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerНо можно затеять длинную транзакцию, которая подвесит остальных юзеров.
разве что только умышленно, имея целью сделать именно это
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Блокировки справочников и документов.
    #38526503
sql001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Некропост :). Но информация полезна... Демагогию вы конечно развели не шуточную... и все не по делу... Ситуация когда нужна именно блокировка:
1. Первый Пользователь открывает документ и вбивает продажу
2. В этот момент, из желания поглядеть что за продажа, ее же в журнале открывает управляющий или просто другой "продаван" (в общем смысле) пишет комментарий и закрывает - ОК. Версия документа изменена на +1
3. Первый Добил документ и сохраняет его... в момент сохранения проверка... текущая версия +1 а мы пытаемся сохранить - 0... в итоге блок.

Ситуация проста и обыденна, но виновник ситуации - пользователь 2 который не должен был попасть в документ с сообщением "Документ редактирует Пользователь 1".
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38526539
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql0013. Первый Добил документ и сохраняет его... в момент сохранения проверка... текущая версия +1 а мы пытаемся сохранить - 0... в итоге блок.
Ситуация проста и обыденна, но виновник ситуации - пользователь 2 который не должен был попасть в документ с сообщением "Документ редактирует Пользователь 1".
Не блок, а сообщение о необходимости повторного ввода.
пользователь 2 не знает , что "Документ редактирует Пользователь 1" (может просто смотрит)
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38526551
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некропост#2 :)
1. Организация работы (гарантированная последовательная обработка) не всегда уместна: есть заказы, накладные и т.п, а есть, например, поток заявок обрабатываемые несколькими независимыми операторами: как проверять, что заявку уже не обрабатывает другой оператор? или документ "статья в базе знаний" - по определению может правиться несколькими сотрудниками.

2. Обновлять только изменившиеся поля - вообще странный подход: в сташном сне вижу, как один пользователь меняет склад-отправитель, а другой клиента :)
(пример утрированный, конечшно, но сути не меняет)
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38527047
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql001Некропост :). Но информация полезна... Демагогию вы конечно развели не шуточную... и все не по делу... Ситуация когда нужна именно блокировка:
1. Первый Пользователь открывает документ и вбивает продажу
2. В этот момент, из желания поглядеть что за продажа, ее же в журнале открывает управляющий или просто другой "продаван" (в общем смысле) пишет комментарий и закрывает - ОК. Версия документа изменена на +1
3. Первый Добил документ и сохраняет его... в момент сохранения проверка... текущая версия +1 а мы пытаемся сохранить - 0... в итоге блок.

Ситуация проста и обыденна, но виновник ситуации - пользователь 2 который не должен был попасть в документ с сообщением "Документ редактирует Пользователь 1".
а по делу что-то есть сказать?
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38527071
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey Kh.Некропост#2 :)
1. Организация работы (гарантированная последовательная обработка) не всегда уместна: есть заказы, накладные и т.п, а есть, например, поток заявок обрабатываемые несколькими независимыми операторами: как проверять, что заявку уже не обрабатывает другой оператор? или документ "статья в базе знаний" - по определению может правиться несколькими сотрудниками.

2. Обновлять только изменившиеся поля - вообще странный подход: в сташном сне вижу, как один пользователь меняет склад-отправитель, а другой клиента :)
(пример утрированный, конечшно, но сути не меняет)
1. Если бардак то конечно не уместна. А "статья в базе знаний" вообще из другой области.
2. На крупных предприятиях много данных и одному человеку это все просто не по силам. Поэтому один человек отвечает за цены в картотеке, к примеру, другой за какие-то качественные характеристики. И нет никакого страшного в том, что каждый из них выполняет свою часть работы по редактированию данных параллельно.
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38527631
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmAleksey Kh.Некропост#2 :)
1. Организация работы (гарантированная последовательная обработка) не всегда уместна: есть заказы, накладные и т.п, а есть, например, поток заявок обрабатываемые несколькими независимыми операторами: как проверять, что заявку уже не обрабатывает другой оператор? или документ "статья в базе знаний" - по определению может правиться несколькими сотрудниками.

2. Обновлять только изменившиеся поля - вообще странный подход: в сташном сне вижу, как один пользователь меняет склад-отправитель, а другой клиента :)
(пример утрированный, конечшно, но сути не меняет)
1. Если бардак то конечно не уместна. А "статья в базе знаний" вообще из другой области.
2. На крупных предприятиях много данных и одному человеку это все просто не по силам. Поэтому один человек отвечает за цены в картотеке, к примеру, другой за какие-то качественные характеристики. И нет никакого страшного в том, что каждый из них выполняет свою часть работы по редактированию данных параллельно.
1. А по заявкам что-нибудь скажете?
2. На крупных предприятиях НСИ таже, что и на не очень крупных, ибо процессы те же :) Предлагаю вариант - когда однозначного решения нет - делаем настройку "и пусть бизнес сам разбирается" :)
...
Рейтинг: 0 / 0
Блокировки справочников и документов.
    #38527660
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey Kh.iscrafmпропущено...

1. Если бардак то конечно не уместна. А "статья в базе знаний" вообще из другой области.
2. На крупных предприятиях много данных и одному человеку это все просто не по силам. Поэтому один человек отвечает за цены в картотеке, к примеру, другой за какие-то качественные характеристики. И нет никакого страшного в том, что каждый из них выполняет свою часть работы по редактированию данных параллельно.
1. А по заявкам что-нибудь скажете?
2. На крупных предприятиях НСИ таже, что и на не очень крупных, ибо процессы те же :) Предлагаю вариант - когда однозначного решения нет - делаем настройку "и пусть бизнес сам разбирается" :)
1. Я бы придерживался обычного житейского принципа: если не разделяемый ресурс забрали, то другие его просто не видят. Не блокировка, а отчуждение. Если ресурс разделяемый, то принцип живой очереди.
2. Обычно так и делается, у нас по крайней мере. Т.е. для данных параметром указывается разрешено ли их частичное редактирование или записи подлежит весь пакет. В большинстве случаев конечно вариант первый, т.е. если пользователь исправил, к примеру, единицу измерения, то он должен быть уверен что его исправления останутся на месте, если другой пользователь отредактировал "цвет" в этом же экзкмпляре. Но есть случаи (в основном это различные транзакции) когда ответственный за какой-то "класс" должен быть уверен что в базе данных будет то, что он видел целиком, даже если он исправил только один параметр. Тогда просто снимается флажок в конфигурации этого "класса" (у нас SmartUpdate) и действует принцип "кто последний тот и прав", в целом для такого "класса".
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Блокировки справочников и документов.
    #38870009
sql001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно можно продолжить :)

Ну в большинстве систем "живые журналы" (не путать с соц. сетью) уже прошлое. Вероятность что у 2х пользователей будет отркыт не обновленный журнал документов велика. Поэтому необходимо логику блокировки реализовывать.

В MSSQL я решил с использованием @@spid - это идентификатор коннекта к БД конкретного пользователя. При запросе объекта из БД он помечается что пользуется в процессе @@spid (int). При освобождении пометка удаляется. Предпочтение @@spid отдано потому, что легко решить такую проблему как аварийный дисконнект при редактировании. В этом случае простой inner join sys.sysprocesses с пометкой о блокировке, поможет понять это рабочая блокировка или ее можно игнорить (ну можно агента заставить удалять каждую минуту все неактуальные блокировки. Тут на любителя).
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Блокировки справочников и документов.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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