AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2006, 14:34   #1  
chel is offline
chel
Участник
 
153 / 10 (1) +
Регистрация: 02.09.2003
Цитата:
Сообщение от Recoilme
Блин... писал писал и не сохранилось. 2 раз ниасилю, поэтому пишу кратко.
0. Выходит я тупой.. потому,что:
1. В одной транзакции читаете с форапдейтом и никаких фантомов у вас не будет.
2. Этот механизм применяется в Аксе повсеместно например при чтении остатков
3. Если бы были какие-то коллизии у вас были бы отрицательные остатки при запрещенном отрицательном складе и т.п. БРЕД у Вас в базе бы был
4. Если у Вас они и есть - это из-за ошибок в алгоритмах, скорее всего Ваших Ошибок В Ваших Алгоритмах, а не фантомов.
В аксе повсеместно применяется только получение остатков на текущий момент. InventTrans не запрашивается

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

По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока.
Старый 02.02.2006, 14:52   #2  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Сообщение от chel
В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи...
Я к тому что беспокоится о том, что в моент построения отчета по транзакционной базе кто-то изменит данные и они не будут 100% верны не стоит, особенно при чтении (nolock) как это везде в отчтах - надо просто понимать что это так. Точные данные которые можно предоставить в виде отчетности партнерам или государству в Аксапте вооще можно получить только по закрытым периодам имхо..
Старый 02.02.2006, 15:22   #3  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от chel
По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока.
В одной транзакции читаете с форапдейтом и никаких фантомов у вас не будет.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 02.02.2006, 15:53   #4  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от chel
В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи, т.к. InventTrans пока не блокирован. Да если бы он и был блокирован - то добавлять записи никто бы не помешал - все-таки это не тот уровень изоляции.

По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока.
Остатки на 01 января
PHP код:
ТЫТЫСЫБЕГИН

SELECT  
[I]ФОРАПДЭЙТ [/ITOP 100 dbo.INVENTSUM.ITEMID AS ITEMIDSUM(dbo.INVENTSUM.POSTEDQTY) - SUM(dbo.INVENTTRANS.QTY) AS QTY
                      
dbo.INVENTSUM.INVENTDIMID
FROM         dbo
.INVENTSUM LEFT OUTER JOIN
                      dbo
.INVENTTRANS ON dbo.INVENTSUM.INVENTDIMID dbo.INVENTTRANS.INVENTDIMID AND 
                      
dbo.INVENTSUM.ITEMID dbo.INVENTTRANS.ITEMID
WHERE     
(dbo.INVENTTRANS.DATEPHYSICAL >= CONVERT(DATETIME'2006-01-01 00:00:00'102)) AND 
        ((
dbo.INVENTTRANS.STATUSRECEIPT 1) OR
                      (
dbo.INVENTTRANS.STATUSISSUE 1) OR
                      (
dbo.INVENTTRANS.STATUSRECEIPT 2) OR
                      (
dbo.INVENTTRANS.STATUSISSUE 2) OR
                      (
dbo.INVENTTRANS.STATUSRECEIPT 3) OR
                      (
dbo.INVENTTRANS.STATUSISSUE 3))
GROUP BY dbo.INVENTSUM.ITEMIDdbo.INVENTSUM.INVENTDIMID

ТЫТЫСЫКОММИТ 
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
Это просты мы с chel пиписьками меряемся..
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 02.02.2006, 18:06   #5  
chel is offline
chel
Участник
 
153 / 10 (1) +
Регистрация: 02.09.2003
Цитата:
Сообщение от Recoilme
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
Это просты мы с chel пиписьками меряемся..
Продолжим меряние

Есть небольшие проблемы в этом запросе
1. Он не учтет ту номенклатуру, по которой сейчас нет остатков. Например, если 31 декабря по "чистой" номенклатуре был сделан приход 5 шт, а 2 января расход -5, то на 1 января остаток не отобразится.
2. Даже, если сделать full outer join этих таблиц, чтобы решить п.1., то к этому никак не прикрутить еще и InventDim с отбором хотя бы по складу (а как жить без этого )

PS. В Вашем случае совсем не обязательно было делать forupdate и тытысы-операции - все равно все одним запросом получаете


Цитата:
Сообщение от mazzy
А потом расскажите во сколько раз таблица промежуточных итогов превышает таблицу проводок.
Рассказываю. На примере 2-х лет. Промежуточные итоги меньше проводок в 2 раза. Уточнение для пуристов - это не претендует на универсальность и общеупотребимость. Про это пущай вендор думает.
Старый 02.02.2006, 18:16   #6  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от chel
Продолжим меряние

Есть небольшие проблемы в этом запросе
1. Он не учтет ту номенклатуру, по которой сейчас нет остатков. Например, если 31 декабря по "чистой" номенклатуре был сделан приход 5 шт, а 2 января расход -5, то на 1 января остаток не отобразится.

2. Даже, если сделать full outer join этих таблиц, чтобы решить п.1., то к этому никак не прикрутить еще и InventDim с отбором хотя бы по складу (а как жить без этого )
Ага, развлекуха.. Во всяком случае пока модераторы не проснутся
1. Да ну??? А вы в инвентсам заглянуть и проверить свои домыслы не пробовали? Записи из инвентсама не удаляются. Они обнуляются. Описанная Вами ситуация невозможно ни первого, ни второго января
2. Т.к. решать пункт 1 не нужно, объяснять как прикрутить инвентлокэйшен надеюсь тоже не нужно?

Вобщем сдавайся давай!!!
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 02.02.2006, 18:25   #7  
chel is offline
chel
Участник
 
153 / 10 (1) +
Регистрация: 02.09.2003
Цитата:
Сообщение от Recoilme
1. Да ну??? А вы в инвентсам заглянуть и проверить свои домыслы не пробовали? Записи из инвентсама не удаляются. Они обнуляются. Описанная Вами ситуация невозможно ни первого, ни второго января
Признаю, затупил.
Зато Alexius дело говорит. Один Sum соединится со многими Trans и в Trans.Qty получится фиговый.
Wamr, а ведь max тоже не пройдет. Что он даст например в случае:
Sum = 10
Trans1 = 5
Trans2 = 5
Старый 02.02.2006, 18:31   #8  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от chel
Признаю, затупил.
Зато Alexius дело говорит. Один Sum соединится со многими Trans и в Trans.Qty получится фиговый.
Wamr, а ведь max тоже не пройдет. Что он даст например в случае:
Sum = 10
Trans1 = 5
Trans2 = 5
Нормально "даст"
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 02.02.2006, 18:07   #9  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Recoilme
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
Канешна не стоит, т.к. отсутствует связь по DATAAREAID, остатки из InventSum выберутся только те, по которым есть проводки и напоследок они умножатся на кол-во проводок по номеклатуре+аналитика данного остатка

Последний раз редактировалось Alexius; 02.02.2006 в 18:16.
Теги
остатки, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Скачут остатки Def DAX: Программирование 3 03.05.2006 14:27
Цена на дату создания заказа/закупки George Nordic DAX: Функционал 2 29.06.2005 15:56
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:30.