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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.08.2011, 10:48   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 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   #2  
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   #3  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
Разве так она закроет переносы и спецификации?
переносы и спецификации детектируются и откладываются на второй проход.
или я чего забыл?
Нет - все проводки сопоставляются на нулевом проходе (включая спецификации и тп). Просто внутри прохода, номенклатура обрабатывается по BOMLevel. И потом при обработке очередной номенклатуры на итерациях прогонки (от 1ой и выше), система слегка жульничает находя все коррекции, которые должны были быть обработаны на следующей итерации, и понижая у них номер итерации в inventCostListTrans до текущего. То есть из за того что прогонка идет по уровням BOM, есть шансы что коррекция, созданная для BOMLevel==1 будет применена к номенклатуре с BOMLevel==2 внутри ОДНОЙ итерации, за счет этого жульничания (попросту при обработке номенклатуры все коррекции помеченные для следующего прохода, в принудительном порядке переводятся на данный проход). Соответственно, есть некоторые шансы что у тебя после 1ого прохода по всем производствам (если переносов не было) будет более или менее внятная себестоимость.
Но поскольку топикстартера вообще не интересует себестоимость, то вполне можно поставить всего 1 итерацию чтобы сначала все сопоставилось, а потом списалось.
Старый 17.08.2011, 12:39   #4  
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   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
А если были?
Согласись, что обычно после производства готовая продукция обычно таки перемещается на склад хранения.

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

(Это я уже для повышения собственной образованности спрашиваю)
В общем-то это закрытие по уровням BOM и подмена уровня итерации, это просто хак, направленный на ускорение закрытия. Я не верю что в общем случае реально получить правдоподобную себестоимость (если есть производство уровнями с 5 вложености и переносами) меньше чем итераций за 20-30. Ну то есть - конечно бывают вырожденные случаи, но вряд ли...
Старый 17.08.2011, 13:35   #6  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от fed Посмотреть сообщение
Попробуйте запустить пересчет по самой популярной номенклатуре с тем числом хелперов которые получились на предыдущем пункте, и помониторьте загрузку сервера БД. Если у вас там полный содом с утилизацией, памятью и очередью к диску - значит номер заведомо не пройдет и надо разбираться с вариантом N1 и принудительным закрытием.
Вру. Один хелпер только одну номенклатуру обрабатывает.Так что надо попробовать вытащить в условие пересчета 60-70 типовых номенклатур и посмотреть сколько это времени займет с вашим числом хелперов и вашим сервером БД.
Старый 17.08.2011, 14:12   #7  
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   #8  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Может быть проще будет сделать переброску остатков с помощью двух журналов типа "проводка" ?
1. Формируем журнал(ы) на списание на основании остатков, разносим, маркируем поля сопоставления во всех проводках.
2. Копируем этот журнал(ы) с отрицательным знаком, разносим, наслаждаемся

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

Из минусов - теряется связь со старыми документами
Старый 23.08.2011, 17:16   #9  
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. Ну а программистов будить нельзя вообще.
Старый 23.08.2011, 17:40   #10  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Link Посмотреть сообщение
Написал класс для закрытия склада, есть вопросик по inventCostItemDim.updateServiceItems() :
В этом методе изначально цикл обрабатывает только проводки со статусами Sold и Purchased.
Правильно ли я сделал убрав это условие при использовании метода для закрытия всех проводок?

П.С. Если кому то нужен класс, могу выложить.
Не правильно. Закрытие в общем случае вообще не должно трогать проводки с другими статусами (оно правда иногда обновляет, но не закрывает, проводки со статусами Received и Deducted, но наш случай это явно не затрагивает). Вообще для твоего случая, любые проводки в статусах отличных от Purchased и Sold должны игнорироваться. (Это справедливо и для поиска проводок, составляющих остаток в inventSum.postedQty).
За это сообщение автора поблагодарили: Link (1).
Старый 23.08.2011, 17:50   #11  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от fed Посмотреть сообщение
Не правильно. Закрытие в общем случае вообще не должно трогать проводки с другими статусами (оно правда иногда обновляет, но не закрывает, проводки со статусами Received и Deducted, но наш случай это явно не затрагивает). Вообще для твоего случая, любые проводки в статусах отличных от Purchased и Sold должны игнорироваться. (Это справедливо и для поиска проводок, составляющих остаток в inventSum.postedQty).
Все понял, спасибо! Для поиска проводок для остатка ищу только со статусом StatusReceipt == StatusReceipt::Purchased.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 24.08.2011, 11:46   #12  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Упустил такой момент, в случае с негативными складскими остатками, нужно ли их покрывать?
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 24.08.2011, 11:51   #13  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Link Посмотреть сообщение
Упустил такой момент, в случае с негативными складскими остатками, нужно ли их покрывать?
Вообще лучше с ними разбираться и пытаться понять почему они негативные, а потом подправить дооприходованием зависших приходных документов. Но если это случилось - то да, надо их покрывать, отсчитать нужное количество расходных проводок и не помечать их как закрытые. Тогда после оприходования недостающих приходов (текущим периодом конечно), можно будет запустить нормальное закрытие и приходы с расходами закрыть друг на друга.
Кстати - я не очень уверен что вы сможете перейти на стандартную себестоимость в Ax2009 по тем номенклатурам по которым остаток отрицательный. По крайней мере - я бы попробовал на 2009ой потренироваться...
Старый 24.08.2011, 12:31   #14  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от fed Посмотреть сообщение
Вообще лучше с ними разбираться и пытаться понять почему они негативные, а потом подправить дооприходованием зависших приходных документов. Но если это случилось - то да, надо их покрывать, отсчитать нужное количество расходных проводок и не помечать их как закрытые. Тогда после оприходования недостающих приходов (текущим периодом конечно), можно будет запустить нормальное закрытие и приходы с расходами закрыть друг на друга.
Кстати - я не очень уверен что вы сможете перейти на стандартную себестоимость в Ax2009 по тем номенклатурам по которым остаток отрицательный. По крайней мере - я бы попробовал на 2009ой потренироваться...
Благодарю! Будем разбираться.
Думаю, что мы попытаемся привести номенклатуры в порядок, перед переходом.
Я сейчас хочу допилить наше закрытие, что бы можно было паралельно закрывать, ака хелперы.
Как закроем склад, сразу будем тренероваться со стандартной себестоимостью.
Спасибо за помощь!
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 23.08.2011, 18:41   #15  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Еще неплохо бы проверить проводки по возвратам и маркированные проводки, с ними может быть весело
Теги
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, время: 08:49.