13.02.2008, 16:01 | #1 |
Участник
|
Создание скл проводок при закр склада (AX 3 SP2).
Изначально есть складская проводка (InventTrans):
Qty CostAmountPosted CostAmountAdjustment всего QtySettled CostAmountSettled ValueOpen 1800 17228,13 1757,27 18985,4 1761 18574,05 Да с количеством 1800, из которых сопоставлено и закрыто проводок по количеству 1761 и сумме 18574,05. После того, как по этой номенклатуре отработает закрытие склада, происходит разделение исходной проводки на две: Qty CostAmountPosted CostAmountAdjustment всего QtySettled CostAmountSettled ValueOpen 1761 16854,85 1719,19 18574,04 1761 18574,05 Да 39 373,28 38,08 411,36 37 390,27 Да сумма: 18985,4 (в более аккуратном виде эти проводки во вложении ) 1.По первой из них сумма CostAmountPosted и CostAmountAdjustment получается на копейку меньше, чем сопоставленная сумма, в следствии чего сия проводка так и остается открытой! 2.Сумма второй проводки получается на копейку больше, в результате чего при сопоставлении одна из открытых расходных проводок корректируется на эту копейку и создается проводка на -0.01. Примечание: ВСЕ эти проводки обработаны пересчетом складских остатков, поэтому я рассчитывал, что закрытие склада не будет порождать новые коррекции и соответственно менять счета. Вопрос: 1.Некая логика в таком расщеплении проводок есть - почему бы и нет. Но смущает: - полученный результат, а именно открытая из-за копейки приходная проводка и появившаяся коррекция - я не встречал в доках упоминаний о подобной тактике Я не нашел кода, который выполнял бы создание новых складских проводок. До сих пор был уверен, что закрытие и пересчет склада только модифицирует складские проводки. Заранее благодарен за помощь |
|
13.02.2008, 16:38 | #2 |
Участник
|
Если проводка расщипилась - значит они каким-то значением отличаются - не можете сказать каким?
А еще лучше - привидите проводки целиком, исходную и две новые. Последний раз редактировалось petr; 13.02.2008 в 16:49. |
|
13.02.2008, 17:09 | #3 |
Участник
|
Во вложении xls файлик с проводками.
|
|
13.02.2008, 17:15 | #4 |
Участник
|
Тогда еще вопрос. Что произойдет, если принудительно объединить складские проводки в одну (функции - суммирование) на форме складских проводок? Должны бы в одну объединиться, можете пропробовать (ничего страшного произойти не должно, все равно вы на копии работаете)
|
|
13.02.2008, 17:49 | #5 |
Участник
|
Изначально проводка была смаркирована с лотом ЛН0055574 (поле InventRefTransId) на количество 1761. Поэтому проводка разделилась на две записи. Из оставшихся 39 сопоставилось 37.
|
|
13.02.2008, 17:49 | #6 |
Участник
|
Сталкивался с проблемами закрытия склада после пересчета, подробности уже забылись, осталось только правило : "Откатить все пересчеты перед закрытием склада".
И не я один : Пересчет складских запасов PS. "Размножения" проводок не припоминаю. |
|
13.02.2008, 17:54 | #7 |
Участник
|
To Petr
Функции->Суммирование не работает, т.к. в хелпе: "Примечание При наличии проводок сопоставления для текущей номенклатуры группировка не выполняется. Это же относится и к отмененным закрытиям склада." |
|
13.02.2008, 18:12 | #8 |
Участник
|
Цитата:
Цитата:
Вот только непонятно, по идее, еще до закрытия должны были быть 2 проводки (после маркировки - если промаркировали не на все кол-во - проводки должны разделиться на 2: промаркированную и нет). А что с этим лотом ЛН0055574, сколько в нем промаркированно? |
|
13.02.2008, 18:14 | #9 |
Участник
|
И еще, а можно огласить все проводки в InventTrans с лотами: ЛН3652418 и ЛН0055574, до и после закрытия?
|
|
13.02.2008, 18:15 | #10 |
Участник
|
to Exus
ЛН0055574 - лот строки контракта И потом, если уж и разделилась на две, то почему так криво?!! Можно было, ведь, проверить суммы, чтобы проводка-то закрылась, ведь это, собственно, и есть цель. Ан нет! На копейку отличие и проводка уже открыта. |
|
13.02.2008, 18:23 | #11 |
Участник
|
Проводки разделяются всегда по кол-ву, см. метод InventTrans.setSplitAmount()
|
|
13.02.2008, 18:26 | #12 |
Участник
|
И еще: разделение проводок и закрытие склада (сопоставление) никак между собой не связанны, во всяком случае мне про это неизвестно.
Сопоставление оперирует с полями CostAmountAdjustment, QtySettled, CostAmountSettled (и дополн. в русской версии), разделение производится при различиях в "стринговых" полях. Разделить проводку, чтобы половину сопоставить, половину оставить открытой - такого я в стандарте не встречал. Пока... |
|
13.02.2008, 18:27 | #13 |
Участник
|
Все складские проводки во вложении
|
|
13.02.2008, 18:32 | #14 |
Участник
|
to Petr
Дык я ж с чего и начал (см. исходное собщение)- до этого я тоже не связывал разделение проводок с сопоставлением/пересчетом Но эксперимент был достаточно чистым: 1.сохранил все проводки по номенклатуре+коду аналитики (см.AllTrans лист 1-й) 2.запустил закрытие по конкретной номенклатуре 3.сохранил все проводки по номенклатуре+коду аналитики (см.AllTrans лист 2-й) Кроме меня никто в этой базе не работал. |
|
13.02.2008, 19:14 | #15 |
Участник
|
Цитата:
Напишите еще версию Аксапты, плз. |
|
13.02.2008, 19:23 | #16 |
Участник
|
Касательно разделения проводок при закрытии склада:
В DAX3.0SP4 (обновленное закрытие склада) разделение (согласно перекрестных ссылок) происходит только в одном месте: InventAdj_Closing.updateSettleRefTransId() X++: // clear unused references if (mapQtyIssue || mapQtyReceipt) { while select forupdate inventTrans index hint openItemIdx where inventTrans.ValueOpen == inventTransOpen::Yes && inventTrans.ItemId == _inventTable.ItemId && inventTrans.InventRefTransId != '' { if ((inventTrans.Qty > 0 && (! mapQtyIssue || ! mapQtyIssue.exists(inventTrans.InventTransId) || abs(mapQtyIssue.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff())) || (inventTrans.Qty < 0 && (! mapQtyReceipt || ! mapQtyReceipt.exists(inventTrans.InventTransId) || abs(mapQtyReceipt.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff()))) { if (inventTrans.QtySettled) inventTrans.updateSplit(inventTrans.financialOpenQty()); inventTrans.InventRefTransId = ''; inventTrans.doUpdate(); if (! inventTrans.isUpdatedFinancial()) { movement = inventTrans.inventMovement(true); if (movement && movement.inventRefTransId() != '') { movement.setInventRefFields(inventRefType::None,'',''); movement.updateDoBuffer(); } } } } } Ну а то, что сопоставленная сумма не равна фин. сумме проводки - такое бывает (я наблюдат при закрытии по средней такое). Ничего особенно страшного в этом нет, это будет только влиять на производительность отчетов и скорость последующих закрытий склада. Но если таких ситуаций немного, то тоже ничего страшного. И еще. В некоторых СП при создании заказа на основе контракта (Blanket order) складская проводка по этому заказу ссылается на лот строки из контракта, в некоторых нет (т.е. для вашей исходной проводки поле InventRefTransId не будет заполнено), соответственно нет разбиения и т.д. Эту ситуацию на форуме уже обсуждали. Т.е. |
|
13.02.2008, 19:39 | #17 |
Участник
|
P.S.
Ссыкли на обсуждение проблемы с заполненными InventRefTransId лотом контракта Пересчет с/с в проводках с заполненным InventRefTransId Изыскания по поводу функциональности поля "Ссылка на лот" |
|
Теги |
ax3.0 |
|
|