21.03.2011, 15:18 | #21 |
Участник
|
Цитата:
Сообщение от Logger
Если уж начали перечислять баги закрытия, то добавлю свои 5 копеек.
В методах \Classes\ClassFactory\inventLastClosingDate \Classes\ClassFactory\inventLastClosingDateSecCur_RU некорректно сделано кеширование даты последнего закрытия склада. Оно не учитывает тот факт, что закрытие склада выполняется в конкретной компании. Поэтому если мы поработали в одной компании, в которой период закрыт, а потом переключаемся в другую, в которой период не закрыт, и пытаемся в этом периоде разносить что-то - то получаем ошибку. Вообще-то, вероятность этого события чрезвычайно мала, поскольку первая проверка стоит X++: if (inventClosingTtsVersion != appl.ttsVersion()) Чтобы получить совпадение счетчиков транзакций в разных компаниях - это надо какое-то очень уж уникальное стечение обстоятельств. Или что формирует значение appl.ttsVersion()? Ну, а раз счетчик имеет значение отличное от сохраненного, то и дата закрытия будет вычислена заново. Прямым запросом по таблице invetnClosing |
|
12.04.2011, 11:09 | #22 |
Участник
|
ПРОБЛЕМА 6. При расчете по средневзвешенной проводки не всегда сопоставляются, стоимость расхода из-за этого неверная.
У нас в течение периода ГП часто движется без стоимости, потому что калькуляция производственных заказов происходит позже, чем выпуск. В феврале при создании виртуального переноса для средневзвешенной цены , поскольку на момент создания этого переноса у сопоставляемых проводок была нулевая стоимость, создались складские проводки «Средневзвешенное закрытие запасов» (InventTransType = SummedUp) с нулевой финансовой суммой (CostAmountPosted = 0). Далее на следующих шагах закрытия февраля, средневзвешенная была скорректирована (сумма CostAmountAdjustment), значение CostAmountPosted так и осталось нулевым, это все вполне корректно. На конец февраля мы имеем остаток по номенклатуре и единственную складскую открытую проводку «Куплено» с типом «Средневзвешенное закрытие запасов». В марте в методе InventCostItemDim::updateModelAverage происходит сопоставление приходов и расходов в соответствии со средневзвешенной моделью себестоимости. В этом куске кода происходит поиск подходящих приходов для сопоставления: X++: while (tmpreceiptScan.RecId&&tmpreceiptScan.TransDate<=endDate) { receiptScan = this.tmpReceipt2Trans(tmpreceiptScan); // <GEEU> if (receiptScan.TransType != InventTransType::SummedUp || this.currencyTransfer_RU(receiptScan)) { // </GEEU> X++: protected boolean currencyTransfer_RU(InventTrans _inventTrans) { return _inventTrans.CostAmountPosted != 0; } РЕШЕНИЕ Я закрыл слад вот с такой модификацией и проблема была решена: X++: //+ DPL InventClosingFix_OK 11.04.2011 OK //if (receiptScan.TransType != InventTransType::SummedUp || this.currencyTransfer_RU(receiptScan)) if ( receiptScan.TransType != InventTransType::SummedUp || receiptScan.costValue() != 0) //- DPL InventClosingFix_OK 11.04.2011 OK |
|
|
За это сообщение автора поблагодарили: EVGL (20), zelibobis (1). |
12.04.2011, 11:25 | #23 |
Участник
|
В решении проблемы 2 есть ошибка, при пересчете нужно использовать стандартную логику, то есть в методе InventCostItemDim::updateItem():
X++: //+ DPL InventClosingFix_OK 12.02.2011 OK if (inventClosing.AdjustmentType==InventAdjustmentType:Closing & & calculationProdWIP_RU ) { this.updateReceiptAdjustment(); } //- DPL InventClosingFix_OK 12.02.2011 OK |
|
07.10.2011, 11:15 | #24 |
Читатель
|
кмк, эту проблему можно глобально решить в классе BatchHeader - при добавлении новой задачи к шапке инициализировать у нее batchGroupId (вообще непонятно, почему этого нет в базовой комплектации ))
|
|
17.11.2011, 15:38 | #25 |
Участник
|
Коллеги, отмена пересчетов по складу требует, чтобы отменялся сперва последний пересчет, потом предпоследний и.т.д.
Обязательно ли это ? Если да, то получается что при пакетной отмене пересчетов содержится ошибка. Там не учитывается этот порядок. см. метод \Classes\InventCostClosingCancel_Init\execute там сперва перебираются записи в InventClosing в правильном порядке (по убыванию InventClosing.transDate) Для каждого InventClosing перебираются записи в InventSettlement и для каждой номенклатуры создается своё пакетное задание по отмене сопоставлений (класс InventCostClosingCancel_WorkInvent) в таблице Batch Но при этом никаких зависимостей между созданными пакетными заданиями InventCostClosingCancel_WorkInvent, учитывающими порядок следований InventClosing не создается. Из-за этого отмена пересчетов по конкретным InventSettlement может идти в произвольном порядке. Последний раз редактировалось Logger; 17.11.2011 в 15:44. |
|
|
За это сообщение автора поблагодарили: Bega (1). |
21.11.2011, 10:38 | #26 |
Участник
|
К проблеме № ПРОБЛЕМА 6. А что делать если остались проводки со статусом "Продано" и типом «Средневзвешенное закрытие запасов»? при последующих пересчетах они тоже не уходят...
|
|
21.11.2011, 11:19 | #27 |
Участник
|
Цитата:
Цитата:
X++: protected boolean currencyTransfer_RU(InventTrans _inventTrans) { //+ DPL InventClosingFix_OK 12.04.2011 OK //return _inventTrans.CostAmountPosted != 0; return _inventTrans.costValue() != 0; //- DPL InventClosingFix_OK 12.04.2011 OK } |
|
21.11.2011, 11:42 | #28 |
Участник
|
Хм.. мы тоже подправили этот метод - но при пересчете все-равно остаются указанные мною выше проводки. Анализировали код - нашли участок в классе InventCostItemDim методе updateModelAverage:
X++: ... while (tmpIssue.RecId && tmpIssue.TransDate <= endDate && this.financialOpenQty(distributionReceipt) >= InventAdj::settleQtyDiff()) { issue = this.tmpIssue2Trans(tmpIssue); // <SYS> if (issue.TransType == InventTransType::SummedUp && issue.DateFinancial == endDate) //</SYS> { this.ssue(issue); next tmpIssue; } ... |
|
21.11.2011, 12:16 | #29 |
Участник
|
Цитата:
Сообщение от zelibobis
Хм.. мы тоже подправили этот метод - но при пересчете все-равно остаются указанные мною выше проводки. Анализировали код - нашли участок в классе InventCostItemDim методе updateModelAverage:
А метод updateMapOреnІssue содержит в себе достаточно информативный комментарий: Add an issue to mapOреnІssue because it could not be closed. Messages about these will later be written to the infolog. X++: while (tmpIssue.RecId&&tmpIssue.TransDate<=endDate&&this.financialOpenQty(distributionReceipt)>=InventAdj::settleQtyDiff()) { issue = this.tmpIssue2Trans(tmpIssue); /* <SYS> if (issue.TransType==InventTransType::SummedUp&&issue.DateFinancial== endDate) </SYS> */ // <GEEU> if (issue.TransType==InventTransType::SummedUp&&(issue.DateFinancial== endDate||!this.currencyTransfer_RU(issue))) { if (this.currencyTransfer_RU(issue)) // </GEEU> { this.updateMapOpnIssue(issue); // <GEEU> } // </GEEU> next tmpIssue; } else |
|
21.11.2011, 12:29 | #30 |
Участник
|
RU5. Сори, это уже я убрал код обрамленный <GEE> в данном методе на тестовом приложении. Но даже с ним зависшие проводки не уходят...
|
|
21.11.2011, 12:55 | #31 |
Участник
|
|
|
21.11.2011, 14:07 | #32 |
Участник
|
оба по 0
|
|
21.11.2011, 15:42 | #33 |
Участник
|
Получается у вас расходная средневзвешенная проводка прошлого периода оказалась почему-то открытой. Это именно проводка прошлого периода? Какая у нее финансовая дата? Она и перед закрытием тоже открыта? Или оказывается открытой в процессе закрытия из-за корректировки приходов прошлого месяца?
Если это средневзвешенная расходная проводка прошлого периода, то по логике она и не должна сопоставляться со средневзвешенным приходом этого периода, а именно это происходит в указанном куске кода. Мне кажется нужно сначала выяснить, почему эта проводка оказалась открытой. |
|
21.11.2011, 16:19 | #34 |
Участник
|
Да, проводка прошлого периода, более того таких проводок довольно много по разным номенклатурам. Мне кажется это как раз последствие не корректного метода currencyTransfer_RU - так как из-за него оставались открытые и приходы и расходы с типом "Средневзвешенное закрытие запасов". Вопрос теперь как с этим жить дальше? После фикса currencyTransfer_RU - все новые создаваемые "Средневзвешенное закрытие запасов" будут сопоставляться корректно. Но вот что делать со старыми проводками прошлых периодов?
|
|
21.11.2011, 16:53 | #35 |
Участник
|
Цитата:
Сообщение от zelibobis
Да, проводка прошлого периода, более того таких проводок довольно много по разным номенклатурам. Мне кажется это как раз последствие не корректного метода currencyTransfer_RU - так как из-за него оставались открытые и приходы и расходы с типом "Средневзвешенное закрытие запасов". Вопрос теперь как с этим жить дальше? После фикса currencyTransfer_RU - все новые создаваемые "Средневзвешенное закрытие запасов" будут сопоставляться корректно. Но вот что делать со старыми проводками прошлых периодов?
|
|
21.11.2011, 17:21 | #36 |
Участник
|
Спасибо. Попробую.
|
|
15.12.2011, 16:14 | #37 |
Участник
|
Обнаружил у себя такую же проблему. Некоторые номенклатуры у нас двигаются с нулевой стоимостью. Для части таких проводок сопоставление не работает и проводки постоянно висят открытыми.
В принципе это не особо влияет на правильность расчета себестоимости, только в журнале при закрытии выдаются предупреждения, что проводка не может быть полностью сопоставлена. Но вдруг в какой-то прекрасный момент в проводке может появится стоимость (то ли бухгалтер ошиблась, то ли решили теперь со стоимостью учет вести для этой номенклатуры, теперь не суть важно). Тут как раз и вылезает косяк: из-за того, что часть проводок не сопоставляются, цена оказывается неверной. Собственно, это та же самая ПРОБЛЕМА 6, только решение, которое я тогда предлагал, решает лишь часть проблем. Причина, как и в прошлые разы оказались российские модификации расчета средневзвешенной стоимости в методе InventCostItemDim::updateModelAverage(). Там есть три условия, где идет проверка метода this.currencyTransfer_RU(). Не знаю, чего хотели локализаторы, но работает не верно. Итак. РЕШЕНИЕ ПРОБЛЕМЫ 6 (ВЕРСИЯ 2) Нужно все эти три проверки this.currencyTransfer_RU() убрать из метода InventCostItemDim::updateModelAverage()., то есть в этих трех условиях if() вернуть все к слою syp. УДАЛИТЬ: УДАЛИТЬ и ВЕРНУТЬ (выделено зеленым). УДАЛИТЬ и ВЕРНУТЬ (выделено зеленым). С этой модификацией я закрыл ноябрь и у нас не было выдано ни одной ошибки про сопоставления, все висевшие несколько месяцев несопоставленные проводки были сопоставлены. |
|
|
За это сообщение автора поблагодарили: fed (15), EVGL (15), Logger (15). |
15.12.2011, 16:21 | #38 |
Участник
|
Цитата:
Сообщение от Bega
Первое, я бы попробовал модифицировать код, чтобы эти проводки в этом периоде были все-таки сопоставлены, потом убрать модификацию. Другой вариант - джобом через doUpdate() проставить дату "Финансовое закрытие", флаг "Открытое значение" = Нет, "Сопоставленное количество" и "Сопоставленная сумма" в значение по сумме сопоставлений. Это чтобы эти проводки не участвовали больше в закрытии.
|
|
10.02.2012, 16:20 | #39 |
Developer
|
Цитата:
+ к связи по ваучеру неплохо бы добавить связь по дате Только при "доукомплектации ПЗ" аналогичная проблема все равно останется т.е. вместо X++: select sum(CostAmountAdjustment) from invSettlement where invSettlement.Cancelled == NoYes::No && invSettlement.TransRecId == this.RecId exists join inventClosing where inventClosing.Voucher == invSettlement.Voucher && inventClosing.AdjustmentType == InventAdjustmentType::Transaction; X++: select sum(CostAmountAdjustment) from inventSettlement where inventSettlement.Cancelled == NoYes::No && inventSettlement.TransRecId == this.RecId exists join inventClosing where inventClosing.Voucher == inventSettlement.Voucher && inventClosing.TransDate == inventSettlement.TransDate && (inventClosing.AdjustmentType == InventAdjustmentType::Transaction || inventClosing.AdjustmentType == InventAdjustmentType::InventOnHand); Последний раз редактировалось vallys; 10.02.2012 в 18:04. |
|
|
За это сообщение автора поблагодарили: Bega (5). |
10.02.2012, 21:55 | #40 |
Участник
|
Цитата:
Сообщение от vallys
При суммировании сумм сопоставлений следует добавить еще тип корректировки "В наличии" (InventAdjustmentType::InventOnHand). Иначе при калькуляции ПЗ после "уценки/дооценки" (корректировка в наличии), сначала будет "отмена", а затем повторная коррекция на сумму "уценки/дооценки", только возможно (в зависимости от настроек) с другим корр. счетом (из InventAdj::errorAccountOperations(...))
+ к связи по ваучеру неплохо бы добавить связь по дате Только при "доукомплектации ПЗ" аналогичная проблема все равно останется |
|
Теги |
баг, закрытие склада, ошибка, ошибка при закрытии склада, себестоимость |
|
|