|
![]() |
#1 |
Участник
|
Цитата:
Цитата:
Сообщение от Recoilme
Но ведь гораздо интересней, если он прочитает ссылки, разберется с этой проблемой и найдет другие пути её решения, разве я не прав?
|
|
![]() |
#2 |
злыдень
|
Цитата:
Сообщение от chel
Однако, если Вы знаете, как решается эта проблема - может быть, стоит рассказать этот подход. Вдруг здесь не я один такой тупой и не вижу очевидного?
Подходите к менеджерам и объясняете им ЧТО ОСТАТКИ НА ВРЕМЯ - это бред. Т.к. пока они смотрят отчет - остатки меняются. => качаете таблицы в хранилище по ночам и показываете остатки в отчетах из хранилища. Используя ОЛАП или RS. Динамические остатки (на время) - отражаете в формах ввода информации, если это критично им. Например в инвентаризации. На момент разноски/коммита - обновляете. Отчеты такого рода не стоят на "живых базах". Вы просто всё повесите, но никаких некорректностей -не будет. Исключения - для оракл, НО И В ВЕРСИОННОЙ СУБД - вы тоже все повесите. Потому что пока вы будете читать данные - будут плодится версии которые будут тормозить систему. В результате ОРАКЛ/2005 либо отправит вас в сад со своими долгоиграющими запросами, либо Вы снимите Ваш отчет на точку актуальности потратив кучу ресурсов и наплодив кучу мусора. Если конечно у Вас не игрушечная базща данных с миллионом проводок.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 02.02.2006 в 14:08. |
|
![]() |
#3 |
злыдень
|
Цитата:
Сообщение от chel
И чего? К чему эта ссылка и цитата? Мы не можем блокировать InventSum и InventTrans при "пессимистической стратегии", т.к. даже если мы заблокируем изменения, в них легко будут добавляться новые записи (фантомы), от которых уровень изоляции, который применяется в аксапте, не спасет.
0. Выходит я тупой.. потому,что: 1. В одной транзакции читаете с форапдейтом и никаких фантомов у вас не будет. 2. Этот механизм применяется в Аксе повсеместно например при чтении остатков 3. Если бы были какие-то коллизии у вас были бы отрицательные остатки при запрещенном отрицательном складе и т.п. БРЕД у Вас в базе бы был 4. Если у Вас они и есть - это из-за ошибок в алгоритмах, скорее всего Ваших Ошибок В Ваших Алгоритмах, а не фантомов.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Recoilme
Блин... писал писал и не сохранилось. 2 раз ниасилю, поэтому пишу кратко.
0. Выходит я тупой.. потому,что: 1. В одной транзакции читаете с форапдейтом и никаких фантомов у вас не будет. 2. Этот механизм применяется в Аксе повсеместно например при чтении остатков 3. Если бы были какие-то коллизии у вас были бы отрицательные остатки при запрещенном отрицательном складе и т.п. БРЕД у Вас в базе бы был 4. Если у Вас они и есть - это из-за ошибок в алгоритмах, скорее всего Ваших Ошибок В Ваших Алгоритмах, а не фантомов. В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи, т.к. InventTrans пока не блокирован. Да если бы он и был блокирован - то добавлять записи никто бы не помешал - все-таки это не тот уровень изоляции. По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока. |
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от chel
В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи...
|
|
![]() |
#6 |
злыдень
|
Цитата:
Сообщение от chel
По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#7 |
злыдень
|
Цитата:
Сообщение от chel
В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи, т.к. InventTrans пока не блокирован. Да если бы он и был блокирован - то добавлять записи никто бы не помешал - все-таки это не тот уровень изоляции.
По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока. PHP код:
Это просты мы с chel пиписьками меряемся..
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от Recoilme
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
Это просты мы с chel пиписьками меряемся.. ![]() Есть небольшие проблемы в этом запросе 1. Он не учтет ту номенклатуру, по которой сейчас нет остатков. Например, если 31 декабря по "чистой" номенклатуре был сделан приход 5 шт, а 2 января расход -5, то на 1 января остаток не отобразится. 2. Даже, если сделать full outer join этих таблиц, чтобы решить п.1., то к этому никак не прикрутить еще и InventDim с отбором хотя бы по складу (а как жить без этого ![]() PS. В Вашем случае совсем не обязательно было делать forupdate и тытысы-операции - все равно все одним запросом получаете Цитата:
Сообщение от mazzy
А потом расскажите во сколько раз таблица промежуточных итогов превышает таблицу проводок.
|
|
![]() |
#9 |
злыдень
|
Цитата:
Сообщение от chel
Продолжим меряние
![]() Есть небольшие проблемы в этом запросе 1. Он не учтет ту номенклатуру, по которой сейчас нет остатков. Например, если 31 декабря по "чистой" номенклатуре был сделан приход 5 шт, а 2 января расход -5, то на 1 января остаток не отобразится. 2. Даже, если сделать full outer join этих таблиц, чтобы решить п.1., то к этому никак не прикрутить еще и InventDim с отбором хотя бы по складу (а как жить без этого ![]() ![]() 1. Да ну??? А вы в инвентсам заглянуть и проверить свои домыслы не пробовали? Записи из инвентсама не удаляются. Они обнуляются. Описанная Вами ситуация невозможно ни первого, ни второго января 2. Т.к. решать пункт 1 не нужно, объяснять как прикрутить инвентлокэйшен надеюсь тоже не нужно? ![]() Вобщем сдавайся давай!!!
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#10 |
Участник
|
Цитата:
Сообщение от Recoilme
1. Да ну??? А вы в инвентсам заглянуть и проверить свои домыслы не пробовали? Записи из инвентсама не удаляются. Они обнуляются. Описанная Вами ситуация невозможно ни первого, ни второго января
Зато Alexius дело говорит. Один Sum соединится со многими Trans и в Trans.Qty получится фиговый. Wamr, а ведь max тоже не пройдет. Что он даст например в случае: Sum = 10 Trans1 = 5 Trans2 = 5 |
|
![]() |
#11 |
Участник
|
Цитата:
Сообщение от Recoilme
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
![]() Последний раз редактировалось Alexius; 02.02.2006 в 18:16. |
|
Теги |
остатки, ax3.0 |
|
![]() |
||||
Тема | Ответов | |||
Остатки на дату InventSumDatePhysical | 6 | |||
Остатки товара на определенную дату | 7 | |||
Скачут остатки | 3 | |||
Цена на дату создания заказа/закупки | 2 | |||
Остатки | 6 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|