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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.08.2011, 13:41   #1  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
? Закрытие склада за 7 лет...
Да, вот такая у нас ситуация: от начала внедрения (2005 год) и по сей день склад никогда не закрывался.
История версий Аксапты начинается с 3ки, и скоро мы должны перейти на 2009 с нынешней 4ки.
В новой версии собираемся использовать стандартную себестоимость, посему стал остро вопрос, как можно быстрее закрыть склад за все 7 лет.
За этот период транзакций накопилось очень много > 43 млн записей, при размере таблицы 25 Гб и почти столько же занимает индекс.

По большому счету, основная цель нашего закрытия не вычисление истинной себестоимости, и автоматом в ГК разносить не будем (отключим в настройках).
Главное - это подготовить систему для включения стандартной себестоимости в новой версии.
Статью Дениса о себестоимости и закрытии склада я прочел. Но статья описывает закрытие на регулярной основе.
Хотелось бы услышать мнение о такой нетипичной ситуации. Может быть известны какие нибудь полезные настройки или приёмы?
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.08.2011, 14:13   #2  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Первое что пришло в голову.
Может пройтись по строкам InventTrans и поставить ValueOpen = NoYes::Yes
QtySettled = Qty ?
Старый 16.08.2011, 14:22   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,435 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Link Посмотреть сообщение
По большому счету, основная цель нашего закрытия не вычисление истинной себестоимости, и автоматом в ГК разносить не будем (отключим в настройках).
Главное - это подготовить систему для включения стандартной себестоимости в новой версии.
А не хотите сделать "перезаливку" остатков номенклатур (т.е. всё списать а потом заново оприходовать) а потом искуственно позакрывать все старые проводки
Старый 16.08.2011, 14:53   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Link Посмотреть сообщение
Да, вот такая у нас ситуация: от начала внедрения (2005 год) и по сей день склад никогда не закрывался.
История версий Аксапты начинается с 3ки, и скоро мы должны перейти на 2009 с нынешней 4ки.
...

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

Хинты:
  1. Первое закрытие должно быть ДО начала всех складских проводок - так будет и быстрее и легче отменять в случае чего.
  2. Закрывайте мелкими кусочками - по неделе/месяцу. Так будет быстрее. Не закрывайте большими кусками. Дело в том, что внутри закрытия алгоритм собирает складские проводки и пытается между ними найти связи. При этом стандартный алгоритм использует map'ы, которые хранятся в памяти. (но обязательно нужна правка кода. см.пункт 6)
  3. Задайте небольшое число итераций при закрытии = 10-20 будет вполне достаточно
  4. Задайте относительно большой порог точности (минимальная коррекция пропускной способности = 10, минимальная сумма сопоставления = 10 руб) - получите приемлемый результат на большом количестве и суммах. Но при этом получите чудовищный разброс себестоимости на маленьких количествах и суммах (обычно это возврат 1-2 штук по смешным копеечным ценам на фоне многотысячных приходов)
  5. Не используйте алгоритм закрытия по-среднему - как ни странно, это самый медленный и самый базоемкий алгоритм в ax3 и ax4. в ax2009 это исправили. Попробуйте стандартную себестоимость или FIFO.
  6. Последнее по счету, но не по важности: стандартный алгоритм нормально обрабатывает ввод данных "задним числом". Поэтому ему необходимо "заглядывать" вперед (в даты больше, чем даты закрытия). При нормальном ходе закрытия предполагается, что будущих проводок немного и они не сильно влияют на производительность закрытия. В вашем случае это катастрофа - каждое закрытие прошлых периодов будет просматривать все будущие проводки. Поэтому надо будет найти в коде основной цикл закрытия и добавить условие "рассматривать проводки с датой не больше, чем дата закрытия". В этом случае закрытие будет спотыкаться если расход раньше прихода (обычно число итераций превышает границу). Но дальнейшие закрытия ситуацию разрулят. Не поддавайтесь сооблазну закрыть одним махом все периоды - в этом случае расчет будет постоянно уходить в своп и тормозить совершенно безбожно (см. пункт 2)

примерно так.
дальше читать статьи Федотенко (fed) про закрытие.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: lev (2), Link (1).
Старый 16.08.2011, 15:29   #5  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от ena_ax Посмотреть сообщение
Первое что пришло в голову.
Может пройтись по строкам InventTrans и поставить ValueOpen = NoYes::Yes
QtySettled = Qty ?
Выглядит очень неопределенно в будущем. Хочется решить проблему стандартным функционалом. Спасибо!
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.08.2011, 15:31   #6  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А не хотите сделать "перезаливку" остатков номенклатур (т.е. всё списать а потом заново оприходовать) а потом искуственно позакрывать все старые проводки
Мы думали об этом, так как на закрытие уйдет очень много времени, и наши тесты показывают очень низкую производительность. В идеале конечно хочется закрыть склад стандартным путём.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.08.2011, 15:44   #7  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Поддержу вариант с начальным сальдо. Какие преимущества вы хотите получить, перенося все операции и делая закрытие?
__________________
Ivanhoe as is..
Старый 16.08.2011, 15:53   #8  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от mazzy Посмотреть сообщение
Не поддавайтесь искушению.
Попробуйте стандартное закрытие.
Спасибо, это было бы идеальным вариантом.

Цитата:
Сообщение от mazzy Посмотреть сообщение
Хинты:
  1. Первое закрытие должно быть ДО начала всех складских проводок - так будет и быстрее и легче отменять в случае чего.
  2. Закрывайте мелкими кусочками - по неделе/месяцу. Так будет быстрее. Не закрывайте большими кусками. Дело в том, что внутри закрытия алгоритм собирает складские проводки и пытается между ними найти связи. При этом стандартный алгоритм использует map'ы, которые хранятся в памяти. (но обязательно нужна правка кода. см.пункт 6)
  3. Задайте небольшое число итераций при закрытии = 10-20 будет вполне достаточно
  4. Задайте относительно большой порог точности (минимальная коррекция пропускной способности = 10, минимальная сумма сопоставления = 10 руб) - получите приемлемый результат на большом количестве и суммах. Но при этом получите чудовищный разброс себестоимости на маленьких количествах и суммах (обычно это возврат 1-2 штук по смешным копеечным ценам на фоне многотысячных приходов)
  5. Не используйте алгоритм закрытия по-среднему - как ни странно, это самый медленный и самый базоемкий алгоритм в ax3 и ax4. в ax2009 это исправили. Попробуйте стандартную себестоимость или FIFO.
  6. Последнее по счету, но не по важности: стандартный алгоритм нормально обрабатывает ввод данных "задним числом". Поэтому ему необходимо "заглядывать" вперед (в даты больше, чем даты закрытия). При нормальном ходе закрытия предполагается, что будущих проводок немного и они не сильно влияют на производительность закрытия. В вашем случае это катастрофа - каждое закрытие прошлых периодов будет просматривать все будущие проводки. Поэтому надо будет найти в коде основной цикл закрытия и добавить условие "рассматривать проводки с датой не больше, чем дата закрытия". В этом случае закрытие будет спотыкаться если расход раньше прихода (обычно число итераций превышает границу). Но дальнейшие закрытия ситуацию разрулят. Не поддавайтесь сооблазну закрыть одним махом все периоды - в этом случае расчет будет постоянно уходить в своп и тормозить совершенно безбожно (см. пункт 2)

примерно так.
дальше читать статьи Федотенко (fed) про закрытие.
Спасибо, большое! Теперь понятно что к чему
То то у нас при попытках закрытия больше месяца, так все дико тормозит
Пойду делать пункт 6.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.08.2011, 16:14   #9  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Поддержу вариант с начальным сальдо. Какие преимущества вы хотите получить, перенося все операции и делая закрытие?
У нас нет целей получит какие либо преимущества. Но за неимением опыта, есть опаска нажить проблем в будущем, поэтому пытаемся решить проблему стандартным путем.

Мне как программисту куда проще и надежнее подправить стандартную процедуру, если после этого производительность будет удовлетворительной.
Поэтому вариант с начальным сальдо, мы рассматриваем на крайний случай.
Опять же нет опыта и понимания всего процесса. Поэтому тут еще придется привлекать партнеров.
К тому же если я правильно понимаю, перенос остатков приведет к потере истории и отчетности.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.08.2011, 16:33   #10  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5716 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Если закрытие мелкими кусочками, которое mazzy предлогает, не поможет, можно сделать похаканную версию закрытия (для первого закрытия конечно), которое для любой номенклатуры использует метод, который 4ка штатно использует только для услуг. Один раз закрыть склад этой штукой и больше никогда не юзать.
Кроме того - с учетом этого вариант тупо пометить проводки как закрытые, програм-манагер по себестоимости считает вполне легальным и верным для версии 2009.Так что, возможно, предложение ena_ax - оно вполне корректно...
За это сообщение автора поблагодарили: mazzy (2), Link (1).
Старый 16.08.2011, 20:23   #11  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от fed Посмотреть сообщение
Если закрытие мелкими кусочками, которое mazzy предлогает, не поможет, можно сделать похаканную версию закрытия (для первого закрытия конечно), которое для любой номенклатуры использует метод, который 4ка штатно использует только для услуг. Один раз закрыть склад этой штукой и больше никогда не юзать..
Спасибо, Денис!

В первом случае я так понимаю будет достаточно установить isServiceItem = true для \Classes\InventCostItemDim\run. Можно ли будет при таком хаке закрыть склад за выходные за все 7 лет? И после этого как минимум уйдет неделя что бы перейти на 2009 версию и еще неделя включить мультисайт и начать использовать стандартную себестоимость. Но насколько помню, нам рекомендовали закрыть склад полностью, тут возникает вопрос можно ли будет закрыть те 3 недели уже в 2009 версии без изменений кода?

X++:
isServiceItem       = this.inventTable(inventCostList.ItemId).inventItemType().isServiceItem();
..................       
            else
            {
                this.updateSettleRefItem(inventCostList.ItemId);

                if (! isServiceItem)
                {
                    mapLoopTrans    = new Map(Types::Integer,Types::Record);
                    mapLoopDim      = new Map(Types::Integer,Types::Record);
                    loopX           = 0;

                    queryRun = inventCostHelp.initQueryRunTrans(this.inventTable(inventCostList.ItemId));
                    while (queryRun.next())
                    {
                        loopX++;
                        mapLoopTrans.insert(loopX,queryRun.get(tablenum(InventTrans)));
                        mapLoopDim.insert(loopX,queryRun.get(tablenum(InventDim)));
                    }

                    loopMax = loopX;
                    loopX   = 0;
                    while (loopX < loopMax)
                    {
                        loopX++;

                        this.updateItemDim(mapLoopTrans.lookup(loopX),mapLoopDim.lookup(loopX));
                    }
                }
            }

            if (inventClosing.AdjustmentType == InventAdjustmentType::Closing && isServiceItem)
            {
               this.updateServiceItemTrans(inventCostList.ItemId);
            }
Цитата:
Сообщение от fed Посмотреть сообщение
Кроме того - с учетом этого вариант тупо пометить проводки как закрытые, програм-манагер по себестоимости считает вполне легальным и верным для версии 2009.Так что, возможно, предложение ena_ax - оно вполне корректно...
Второй вариант мне не особо понятен. Каковы должны быть критерии выборки записей для обновления, для закрытия всех проводок?

X++:
    InventTrans                 inventTrans;
;
    update_recordset inventTrans
        setting ValueOpen = InventTransOpen::Yes, QtySettled = inventTrans.Qty;
ПМ ваш или МС так считает? Мы хотели попросить партнеров уточнить у МС. Т.к. консультант нам ничего такого не посоветовал. Сказал закрывать склад стандартными средствами и желательно закрыть в версии 4 все что накопилось в 3ке, что бы по его мнению минимизировать возможно ошибок.
На закрытие 7 летнего периода уйдет уйма времени, и это сдвигает планы по переходу на новую версию и стандартную себестоимость.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 17.08.2011, 10:48   #12  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5716 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Отвечу по шагам. В текущей (2009RU7) версии аксапты есть два подхода к принудительному (без нормального сопоставления и рассчета себестоимости) закрытию проводок:
  1. Услуги. В версии 4.0sp1, появилась специальная ветка (inventCostItemDim,updateServiceItemTrans()), которая принудительно закрывает складскип проводки по услугам. Закрывает она их по умному, заполняя сопоставленное количество, сопоставленную сумму и создавая в складских сопоставлениях запись специального типа (InventSettletModel::ServiceItem). Из за того что все эти поля заполняются и запись сопоставления создается, такая проводка для всех (ну или почти всех) стандартных и нестандартных отчетов выглядит как закрытая и сопоставленная 'по честному'
  2. Нефинансовые переносы. В DAX2009RU7 отбэкпортили из DAX2012 фичу, которая позволяет при закрытии игнорировать нефинансовые переносы (то есть - проводки переноса у которых у прихода и расхода одинаковые складские аналитики финансового склада). При этом такие проводки помечаются как закрытые 'по грубому'. То есть - просто тупо у проводок ставится признак закрытия и дата закрытия (и еще в некое совсем новое поле вешается ссылка на запись в inventClosing по закрытию). Из за этого, по моим ощущениям, заметная часть складских отчетов на такие проводки будет плохо реагировать. По крайней мере часть моих самописных отчетов - точно будет плохо реагировать. Когда я по поводу этого подхода высказал некоторые сомнения в уже упомянутой дискуссии, участник Ievgenii, написал что "Наши ПМы убедеждены что этого делать не надо, чтобы не терять времени. По-этому для не финансовых переносов убрали. Для услуг - это легаси код, который не меняли." Я так подозреваю, что под термином "Наши ПМы" скрывался конкретно Anders Girke, ответственный за костинг в Аксапте

Теперь о твоей конкретной ситуации: Во первых - со своим советом насчет того чтобы подхакать закрытие чтобы считало всю номенклатуру сервисами - я был не прав. Дело в том, что у тебя тогда ВСЕ проводки пометяться как закрытые, а задача состоит в том чтобы пометить как закрытые только те проводки, которые НЕ ВХОДЯТ в текущий остаток. Соответственно у тебя есть два подхода к решению проблемы:
1. Написать собственную процедуру закрытия. Просто надо бежать по текущим складским остаткам в разрезе аналитик финансового склада и для каждой комбинации аналитик отсчитывать назад от текущей даты достаточно складских проводок в статусе "Закуплено" чтобы покрыть текущий складской остаток. Затем все остальные складские проводки надо пометить как закрытые (с использованием кода inventCostItemDim.updateServiceItems() как прототипа). Да - еще замечу что если у тебя в складских остатках, допустим 5 штук, а приходная проводка на 12, то тебе надо ее рассплитить на две проводки по 7 и 5 штук, первую закрыть, а вторую - оставить. Я бы лично пошел по этому пути.
2. Если ты не чуствуешь себя достаточно увереным для варианта N1, по прежнему можно пойти по пути обычного закрытия склада. Я бы, к рекомендациям mazzy, сделал такие поправки:
  • Ставьте модель FIFO - она самая быстрая.
  • Поскольку себестоимость вам не важна, поставьте максимальное число итераций в 1. Тогда у вас на нулевой итерации все проводки сопоставяться и закроются, а на первой итерации вся зависшая себестоимость спишется на прибыли и убытки.
  • Можно закрывать склад ЗА ВСЕ ВРЕМЯ, но вам понадобится очень много хелперов. В принципе, если ты за все время склад закрываешь, то ограничивающим является только память, в которую система загружает сразу все проводки по данной номенклатуре и аналитике для сопоставления и прогонки коррекции. Чтобы оценить то, сколько времени займет закрытие одной номенклатуры в худшем случае (и чтобы посмотреть хватит ли памяти и тп), попробуй пересчитать склад по одной номенклатуре (с максимальным числом записей в inventTrans) за все время. Потом попробуй то же самое для номенклатуры со средним числом записей в inventTrans. Потом подели ваш временной промежуток (48 часов) на это время и получишь (грубо приблизительно) число хелперов, которые нужны чтобы закрыть склад за это время.
  • Попробуйте запустить пересчет по самой популярной номенклатуре с тем числом хелперов которые получились на предыдущем пункте, и помониторьте загрузку сервера БД. Если у вас там полный содом с утилизацией, памятью и очередью к диску - значит номер заведомо не пройдет и надо разбираться с вариантом N1 и принудительным закрытием.
  • Когда будете планировать закрытие, заложитесь с приличным запасом по времени.
  • Наконец - возможен вариант комбинации больших и маленьких закрытий Сначала закрыть за выходные и (если понадобится) понедельник и вторник длительный период (первые 6 лет работы), потом по вечерам потихоньку позакрывать по месяцам.
  • Если будете закрывать склад параллельно пользовательской работе, можно попробовать понизить макрос CommitCountMax в заголовке класса inventCostItemDim с 50 до, скажем, 15. Производительность закрытия понизиться (потому что транзакция будет коммититься после каждых 15 обновленных проводок), но шансы на откаты транзакций и retry из за того что несколько станций обновили inventSum - уменьшаться.
За это сообщение автора поблагодарили: mazzy (2), lev (4), Link (1).
Старый 17.08.2011, 11:31   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fed Посмотреть сообщение
Поскольку себестоимость вам не важна, поставьте максимальное число итераций в 1. Тогда у вас на нулевой итерации все проводки сопоставяться и закроются, а на первой итерации вся зависшая себестоимость спишется на прибыли и убытки.
Разве так она закроет переносы и спецификации?
переносы и спецификации детектируются и откладываются на второй проход.
или я чего забыл?
__________________
полезное на axForum, github, vk, coub.
Старый 17.08.2011, 12:24   #14  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5716 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
Разве так она закроет переносы и спецификации?
переносы и спецификации детектируются и откладываются на второй проход.
или я чего забыл?
Нет - все проводки сопоставляются на нулевом проходе (включая спецификации и тп). Просто внутри прохода, номенклатура обрабатывается по BOMLevel. И потом при обработке очередной номенклатуры на итерациях прогонки (от 1ой и выше), система слегка жульничает находя все коррекции, которые должны были быть обработаны на следующей итерации, и понижая у них номер итерации в inventCostListTrans до текущего. То есть из за того что прогонка идет по уровням BOM, есть шансы что коррекция, созданная для BOMLevel==1 будет применена к номенклатуре с BOMLevel==2 внутри ОДНОЙ итерации, за счет этого жульничания (попросту при обработке номенклатуры все коррекции помеченные для следующего прохода, в принудительном порядке переводятся на данный проход). Соответственно, есть некоторые шансы что у тебя после 1ого прохода по всем производствам (если переносов не было) будет более или менее внятная себестоимость.
Но поскольку топикстартера вообще не интересует себестоимость, то вполне можно поставить всего 1 итерацию чтобы сначала все сопоставилось, а потом списалось.
Старый 17.08.2011, 12:39   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fed Посмотреть сообщение
Соответственно, есть некоторые шансы что у тебя после 1ого прохода по всем производствам (если переносов не было) будет более или менее внятная себестоимость.
А если были?
Согласись, что обычно после производства готовая продукция обычно таки перемещается на склад хранения.

И если без производства, но были перемещения. Точно одного прохода будет достаточно, чтобы получить что-нибудь боль-мень вменяемое?

(Это я уже для повышения собственной образованности спрашиваю)
__________________
полезное на axForum, github, vk, coub.
Старый 17.08.2011, 13:08   #16  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5716 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
А если были?
Согласись, что обычно после производства готовая продукция обычно таки перемещается на склад хранения.

И если без производства, но были перемещения. Точно одного прохода будет достаточно, чтобы получить что-нибудь боль-мень вменяемое?

(Это я уже для повышения собственной образованности спрашиваю)
В общем-то это закрытие по уровням BOM и подмена уровня итерации, это просто хак, направленный на ускорение закрытия. Я не верю что в общем случае реально получить правдоподобную себестоимость (если есть производство уровнями с 5 вложености и переносами) меньше чем итераций за 20-30. Ну то есть - конечно бывают вырожденные случаи, но вряд ли...
Старый 17.08.2011, 13:35   #17  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5716 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от fed Посмотреть сообщение
Попробуйте запустить пересчет по самой популярной номенклатуре с тем числом хелперов которые получились на предыдущем пункте, и помониторьте загрузку сервера БД. Если у вас там полный содом с утилизацией, памятью и очередью к диску - значит номер заведомо не пройдет и надо разбираться с вариантом N1 и принудительным закрытием.
Вру. Один хелпер только одну номенклатуру обрабатывает.Так что надо попробовать вытащить в условие пересчета 60-70 типовых номенклатур и посмотреть сколько это времени займет с вашим числом хелперов и вашим сервером БД.
Старый 17.08.2011, 14:12   #18  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от fed Посмотреть сообщение
  1. Услуги. В версии 4.0sp1, появилась специальная ветка (inventCostItemDim,updateServiceItemTrans()), которая принудительно закрывает складскип проводки по услугам. Закрывает она их по умному, заполняя сопоставленное количество, сопоставленную сумму и создавая в складских сопоставлениях запись специального типа (InventSettletModel::ServiceItem). Из за того что все эти поля заполняются и запись сопоставления создается, такая проводка для всех (ну или почти всех) стандартных и нестандартных отчетов выглядит как закрытая и сопоставленная 'по честному'
Цитата:
Сообщение от fed Посмотреть сообщение
1. Написать собственную процедуру закрытия. Просто надо бежать по текущим складским остаткам в разрезе аналитик финансового склада и для каждой комбинации аналитик отсчитывать назад от текущей даты достаточно складских проводок в статусе "Закуплено" чтобы покрыть текущий складской остаток. Затем все остальные складские проводки надо пометить как закрытые (с использованием кода inventCostItemDim.updateServiceItems() как прототипа). Да - еще замечу что если у тебя в складских остатках, допустим 5 штук, а приходная проводка на 12, то тебе надо ее рассплитить на две проводки по 7 и 5 штук, первую закрыть, а вторую - оставить. Я бы лично пошел по этому пути.
[/LIST]
Это то, что нужно! Большое вам спасибо, Денис!
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 17.08.2011, 14:49   #19  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Может быть проще будет сделать переброску остатков с помощью двух журналов типа "проводка" ?
1. Формируем журнал(ы) на списание на основании остатков, разносим, маркируем поля сопоставления во всех проводках.
2. Копируем этот журнал(ы) с отрицательным знаком, разносим, наслаждаемся

Из плюсов:
1. Не надо возится со старыми проводками
2. Можно выправить себ-ть на день Ч

Из минусов - теряется связь со старыми документами
Старый 23.08.2011, 17:16   #20  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от fed Посмотреть сообщение
Услуги. В версии 4.0sp1, появилась специальная ветка (inventCostItemDim,updateServiceItemTrans()), которая принудительно закрывает складскип проводки по услугам. Закрывает она их по умному, заполняя сопоставленное количество, сопоставленную сумму и создавая в складских сопоставлениях запись специального типа (InventSettletModel::ServiceItem). Из за того что все эти поля заполняются и запись сопоставления создается, такая проводка для всех (ну или почти всех) стандартных и нестандартных отчетов выглядит как закрытая и сопоставленная 'по честному'

1. Написать собственную процедуру закрытия. Просто надо бежать по текущим складским остаткам в разрезе аналитик финансового склада и для каждой комбинации аналитик отсчитывать назад от текущей даты достаточно складских проводок в статусе "Закуплено" чтобы покрыть текущий складской остаток. Затем все остальные складские проводки надо пометить как закрытые (с использованием кода inventCostItemDim.updateServiceItems() как прототипа). Да - еще замечу что если у тебя в складских остатках, допустим 5 штук, а приходная проводка на 12, то тебе надо ее рассплитить на две проводки по 7 и 5 штук, первую закрыть, а вторую - оставить. Я бы лично пошел по этому пути.
Написал класс для закрытия склада, есть вопросик по inventCostItemDim.updateServiceItems() :
В этом методе изначально цикл обрабатывает только проводки со статусами Sold и Purchased.
Правильно ли я сделал убрав это условие при использовании метода для закрытия всех проводок?

П.С. Если кому то нужен класс, могу выложить.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Теги
inventory closing, закрытие склада

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Закрытие склада - число помощников Logger DAX: Программирование 3 09.02.2011 16:54
Закрытие склада и бухгалтерия. Skvorcal DAX: Прочие вопросы 45 17.01.2011 10:24
Странное закрытие склада и коррекция себестоимости в наличии Aquarius DAX: Функционал 11 28.05.2010 11:45
Закрытие склада. Параметр "Спецификация" DenWolf DAX: Функционал 0 05.06.2006 14:46
Закрытие склада в основной и вторичной валюте, отключенная корреспонденция счетов May DAX: Функционал 1 02.04.2004 13:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.