Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
есть такая ситуация (наверное жеванная пережеванная) два пользователя одновременно проводят документы с одинаковым товаром и надо, чтобы при проведении и первым и вторым пользователем были получены верные остатки, т.е. если на остатке 5 единици и оба списывают по 5, то чтобы у одного документ не провелся. кто что может посоветовать, желательно без использования блокировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 14:54 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
два способа 1. делаешь блокировки 2. делаешь общий процесс который формирует документ и отдает результат клиенту, все в него ломятся в порядке общей очереди 1-й вариант лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 14:56 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Поставить на остатки ограничение >=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 15:22 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
СерегаПоставить на остатки ограничение >=0 Проблема как раз возникает в тот момент, когда в промежуток времени проведения 1-го документа между получением остатков, рассчетом и фиксированием транзакции, вклинивается второ1 документ, который получает такие же остатки и тут ставь, не ставь > = 0 не помагает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 15:26 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
georg_kharkovПроблема как раз возникает в тот момент, когда в промежуток времени проведения 1-го документа между получением остатков, рассчетом и фиксированием транзакции, вклинивается второ1 документ, который получает такие же остатки и тут ставь, не ставь > = 0 не помагает Как это? У тебя остатки хранятся или считаются динамически? Если 1 то поставив ограничение на количество, только один сможет зафиксировать транзакцию (кто первый встал того и тапки ), второй обломится, в смысле откатится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 15:31 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
))) Предположим, нужно провести 100 рублей. И емеется таблица с остатками и таблица с проводками. На таблицу с остатками нужно навесить CHECK CONSTRAINT чтобы остаток был всегда больше нуля. 1) добавляем запись в таблицу операций 2) update OSTATOK set OSTATOK=OSTATOK+сумма проводки - одним выражеием. И - либо пан, либо пропал. Ошибка - откат транзакции. Прошло - коммит. А выбирать сначала селектом остаток, а потом его апдейтить и без блокировок, ну это очень уж круто...я так не умею... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 15:38 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
не нужно таблицу остатков. Остаток надо считать по таблице проводок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 15:47 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Old Nickне нужно таблицу остатков. Остаток надо считать по таблице проводок Бох в помощь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 16:40 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
2gardenman: а не долго ли будет апдейтить? учитывая количество номенклатуры 16200 плюс нужно держать в разрезе партий, что автоматом увеличивает таблицу в несколько раз, а то и десятков раз. это все не считая разреза по складам (их не много около 15) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 16:46 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
2simon а на что предлагаешь ставить блокировки? (товар, регистр и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 16:49 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Надо проверку на количество проводить ПОСЛЕ списания. Т.е. списал в транзакции 5 штук, проверил: если >= 0, то все ОК. Иначе rollback. Это иначе как раз и значит, что кто-то успели списать данное количество пока ты думал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:02 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
AlexBНадо проверку на количество проводить ПОСЛЕ списания. Т.е. списал в транзакции 5 штук, проверил: если >= 0, то все ОК. Иначе rollback. Это иначе как раз и значит, что кто-то успели списать данное количество пока ты думал. Для этого и существуют CHECK CONSTRAINT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:06 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
но ведь транзакции разные и одна выбирает остатки, пока другая не делает commit что приводит к некорректным остаткам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:23 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Да, но CHECK CONSTRAINT - это по сути дела константа. А логика бизнес процесса зачастую требует наличие возможности обойти ограничение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:23 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Ниче се константа!!! Код: plaintext 1. 2. 3. 4. 5. вообще для T-SQL, где нет триггеров before CHECK CONSTRAINT - иногда единственная возможность прикрыть задницу от ошибок в "бизнес-логике" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:34 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Как я понял OR (Type='M') и служит как раз для того, что бы обойти CHECK CONSTRAINT. Потому что заявленная бизнес-логика допускает и отрицательный баланс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:52 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
правильно поняли) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 17:57 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
georg_kharkovно ведь транзакции разные и одна выбирает остатки, пока другая не делает commit что приводит к некорректным остаткам Вот тут по ходу дела и кроется недопонимание предложенного варината. Дело в том, что транзакция-то одна , UPDATE OSTATOK set kolvo=kolvo + [кол-во в проводке] WHERE ... А constaint вешается как раз на kolvo>=0. И все, кто успел - тот и съел, второму вернется ошибка. begin transaction update проводка set статус=проведена where ... update остаток set кол-во=кол-во +/- [кол-во из проводки] where ... if ok then commit else rollback end if Не нужно делать селект остатка, потом на клиенте его корректировать, а потом ставить в остаток. На сколько я понял именно в этом проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 22:35 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
iLLer update проводка set статус=проведена where ... update остаток set кол-во=кол-во +/- [кол-во из проводки] where ... А еще лучше делать триггером на изменении статуса проводки, тогда вообще одна операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 22:37 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
а если возникнет ситуация, когда надо провести задним числом (или перепровести), а остатки, как я понимаю прииспользовании Update, только текущие и на два дня назад уже не получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 01:26 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
dim-а если возникнет ситуация, когда надо провести задним числом... Унас тоже бухи любили (пока была возможность) че-нить добавить/изменить в данных 1995,6 г и все пересчитать... Для изменения служат корректирующие проводки... В принципе, для незакрытых периодов можно менять больше/менше, но все таки минуса быть не должно... не отменять же другие проводки... Вот только кроме количества обычно есть и цена, которая может меняться... dim-...а остатки, как я понимаю при использовании Update, только текущие и на два дня назад уже не получить. Для этого используется хранение остатков на начало/конец периода (обычно месяц), а с точностью до дня - кому это нужно?... Хотя взяв начало периода можно все проводки разложить по дням... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 07:13 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
ololДля этого используется хранение остатков на начало/конец периода (обычно месяц), а с точностью до дня - кому это нужно?...Например банкам нужно. У них баланс составляется каждый день, а не раз в месяц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 10:30 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
Для этого используется хранение остатков на начало/конец периода (обычно месяц), а с точностью до дня - кому это нужно?... Хотя взяв начало периода можно все проводки разложить по дням... И как раз тут то и теряется возможность использовать CHECK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 10:34 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
ИМХО. Хранение текущих остатков никак не влияет на получение остатков на любую дату в прошлом. Может быть дале облегчает эту задачу, если считать за "немного назад". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 11:00 |
|
||
|
Актуальность остатков
|
|||
|---|---|---|---|
|
#18+
СерегаИМХО. Хранение текущих остатков никак не влияет на получение остатков на любую дату в прошлом. Может быть дале облегчает эту задачу, если считать за "немного назад". Сказано же, Упростил задачу до невозможности Т.е. тут не задача важна а ПРИНЦИП, СПОСОБ её ренения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 11:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32819793&tid=1546112]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 354ms |

| 0 / 0 |
