AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 25.11.2003, 12:02   #1  
Roman A. ist offline
Roman A.
Участник
 
9 / 10 (1) +
Registriert seit: 25.11.2003
? Остатки на начало периода
Добрый день.

У меня возник вопрос по поводу формирования "Оборотной ведомости". Этот отчет формируется на основе таблицы InventTrans. Проблема заключается в определении остатков на начало периода. Со временем таблица разрастается. Соответственно отчет будет работать все дольше.

Информацию по кол-ву номенклатуры на складе можно определить с помощью таблицы InventSum. (Т.е. рассчитывая остатки на начало периода, можно исходить из информации на текущий момент). Проблема в "финансах" - сумма остатков в деньгах рассчитывается на основе значений CostAmountAdjustment и CostAmountPosted таблицы InventTrans.

Как можно решить подобную проблему?
Спасибо.
Alt 25.11.2003, 12:14   #2  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Обратите внимание на inventSum.postedValue.
При помощи перекрестных ссылок, посмотрите на те методы, которые пишут в это поле значения.
Alt 25.11.2003, 13:12   #3  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Еще возможные проблемы
Действительно, InventSum.PostedValue хранит сумму всех CostAmountPosted и CostAmountAdjustment по данной номенклатуре-аналитике

НО

Если в момент формирования оборотки будут активно работать пользователи, то возможны следущие проблемы:
- блокировка процесса другими процессами
- некорректные кол-ва и суммы
Alt 25.11.2003, 17:19   #4  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Некорректных не будет, поскольку есть блокировки

блокировки будут не только на inventSum. При "активной работе пользователей" блокировки будут и на inventTrans.
Alt 25.11.2003, 17:28   #5  
Roman A. ist offline
Roman A.
Участник
 
9 / 10 (1) +
Registriert seit: 25.11.2003
Спасибо за обсуждение.

Я попробую сделать с помощью поля postedValue. Один вопрос - почему "родная" оборотка сделана без использования InventSum?
Alt 25.11.2003, 17:54   #6  
Ser ist offline
Ser
NavAx
 
99 / 14 (1) ++
Registriert seit: 04.03.2002
Ort: Москва
Для интереса сделайте два отчета:
1) используя InventSum
2) на основе InventTrans

По-идее, результаты должны совпасть.
Но, с другой стороны, подобным анализом можно сильно подпортить настроение, особенно если чего пришлось править "ручками"
Alt 25.11.2003, 18:08   #7  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Подробности
Zitat:
- блокировка процесса другими процессами
------------------
блокировки будут не только на inventSum. При "активной работе пользователей" блокировки будут и на inventTrans
Действительно, при "активной работе пользователей" будут изменяться и добавляться провдки (InventTrans). Но так как оборотка, обычно, строится по историческим данным, то вероятность попадания такой записи в выборку очень мала (при стандартном подходе). Если строить от текущего состояния inventSum, то будут выбираться наисвежайшие данные, т.е. 99% попадется заблокированая проводка или остаток (InventSum).
Конечно, можно сделать NOLOCK, но это увеличит вероятность ошибочных результатов.

Zitat:
- некорректные кол-ва и суммы
---------------
Некорректных не будет, поскольку есть блокировки
Пример:
"Новая оборотка" получила данные из inventSum (PostedQty, PostedValue), потом стала отнимать исторические проводки.. в этот момент некий процесс (накладная) изменяет количество и сумму... Оборотка останавливается, дожидается окончания процесса.. накладная закрылась.. обротка "увидела новую проводку" и вычла ее из старого InventSum. (Проверено на практике)
Конечно, оборотка может попытаться заблокировать, то что считывает, но тогда см.п.1
Alt 25.11.2003, 18:14   #8  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Изначально опубликовано Roman A.
почему "родная" оборотка сделана без использования InventSum?
Это российский отчет
Alt 25.11.2003, 18:21   #9  
Roman A. ist offline
Roman A.
Участник
 
9 / 10 (1) +
Registriert seit: 25.11.2003
Zitat:
Это российский отчет
С этим я не спорю. Просто почему изначально не сделали с помощью InventSum? Может была какая-то сермяжная правда в этом? Хотя, вероятно, это неконструктивный вопрос.
Alt 25.11.2003, 18:30   #10  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Re: Подробности
Zitat:
Изначально опубликовано Wamr
оборотка, обычно, строится по историческим данным, то вероятность попадания такой записи в выборку очень мала (при стандартном подходе). Если строить от текущего состояния inventSum, то будут выбираться наисвежайшие данные, т.е. 99% попадется заблокированая проводка или остаток (InventSum).
Конечно, можно сделать NOLOCK, но это увеличит вероятность ошибочных результатов.
Немного не так.
Блокировка быстро поднимется с записей до страниц, а со страниц до всей таблицы
Поэтому хоть так, хоть так... вероятность будет одинакова.

Zitat:
Изначально опубликовано Wamr
Пример:
"Новая оборотка" получила данные из inventSum (PostedQty, PostedValue), потом стала отнимать исторические проводки.. в этот момент некий процесс (накладная) изменяет количество и сумму... Оборотка останавливается, дожидается окончания процесса.. накладная закрылась.. обротка "увидела новую проводку" и вычла ее из старого InventSum. (Проверено на практике)
Не так.
При создании новой проводки, Аксапта начинает транзакцию. При записи проводки, обновляется inventSum. Если inventSum заблокирован, то запись проводки не будет выполнена из-за деадлока.

Если у вас на практике такое было, значит вы прогали и использовали doInsert/doUpdate

В общем, подумайте еще раз.
Alt 25.11.2003, 18:32   #11  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Изначально опубликовано Roman A.
С этим я не спорю. Просто почему изначально не сделали с помощью InventSum? Может была какая-то сермяжная правда в этом? Хотя, вероятно, это неконструктивный вопрос.
В общем то да.
Вы же тоже не сразу начали этот механизм использовать.

А там тоже люди работают...
Alt 25.11.2003, 18:47   #12  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Zitat:
Блокировка быстро поднимется с записей до страниц, а со страниц до всей таблицы
Поэтому хоть так, хоть так... вероятность будет одинакова.
Для того чтобы заблокировать оборотку (которая сама ничего не блокирует) при работе по InventSum достаточно 1 новой (измененной) проводки (не таблицы и не страницы), а для остановки расчета по историческим данным нужно блокировать весь InventTrans, что само по себе есть ЧП.

Zitat:
При создании новой проводки, Аксапта начинает транзакцию. При записи проводки, обновляется inventSum. Если inventSum заблокирован, то запись проводки не будет выполнена из-за деадлока
Ага, только вот оборотка ничего не пишет в inventSum и InventTrans, а значит и не блокирует, а значит и не может быть речи о deadlock-е.
Оборотка считает inventSum до начала транзакции по созданию новой проводки и посчитает новую проводку после завершения транзакции.... и получит лажу

От doInsert и doUpdate на inventTrans отказались оч.давно
Alt 25.11.2003, 19:22   #13  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
в MS SQL есть блокировка на чтение.
Oracle тоже не допустит.

Насчет deadlock'а - согласен. Погорячился. Надо подумать.
Alt 26.11.2003, 09:38   #14  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Предложение
К чему пришли мы в результате опыта эксплуатации различных вариантов оборотки:
1. Раз в месяц (после закрытия периода) в специальную табличку сохраняется срез InventSum на начало месяца (периода)
2. При расчете оборотки проводки суммируются не от начало времен, а от одного из срезов (последнй, предпоследний)
3 (не сделано, но нужно) Механизм проверки и коррекции среза

срез InventSum - это не копия InventSum, а расчет остатков на какую-то дату. Опять же, есть варианты с полным суммированием InventTrans, с суммированием inventTrans от предыдущего среза и с вычитание из InventSum InventTrans.
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Скачут остатки Def DAX: Программирование 3 03.05.2006 14:27
ПН долг на начало периода Berty Wooster DAX: Функционал 4 01.02.2006 18:23
Сверка остатков по счетам учета материалов и складские остатки tolstjak DAX: Функционал 5 05.04.2005 13:51
Закрытие склада (периода) - ФИФО - копейки в закрытом периоде Wamr DAX: Функционал 1 28.11.2003 17:41

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:09 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.