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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2011, 15:18   #21  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Если уж начали перечислять баги закрытия, то добавлю свои 5 копеек.
В методах
\Classes\ClassFactory\inventLastClosingDate
\Classes\ClassFactory\inventLastClosingDateSecCur_RU

некорректно сделано кеширование даты последнего закрытия склада.
Оно не учитывает тот факт, что закрытие склада выполняется в конкретной компании. Поэтому если мы поработали в одной компании, в которой период закрыт, а потом переключаемся в другую, в которой период не закрыт, и пытаемся в этом периоде разносить что-то - то получаем ошибку.

Вообще-то, вероятность этого события чрезвычайно мала, поскольку первая проверка стоит

X++:
if (inventClosingTtsVersion != appl.ttsVersion())

Чтобы получить совпадение счетчиков транзакций в разных компаниях - это надо какое-то очень уж уникальное стечение обстоятельств. Или что формирует значение appl.ttsVersion()?

Ну, а раз счетчик имеет значение отличное от сохраненного, то и дата закрытия будет вычислена заново. Прямым запросом по таблице invetnClosing
Старый 12.04.2011, 11:09   #22  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
ПРОБЛЕМА 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>
вызывается метод this.currencyTransfer_RU(), в котором проверяется только CostAmountPosted, а она у нас равна нулю.
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
Можно бы было доделать currencyTransfer_RU(), чтобы он анализировал и CostAmountAdjustment но он используется ниже в других местах и такая модификация потребует еще тестирования, проверю отдельно и напишу.
За это сообщение автора поблагодарили: EVGL (20), zelibobis (1).
Старый 12.04.2011, 11:25   #23  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
В решении проблемы 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  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от Bega Посмотреть сообщение
ПРОБЛЕМА 5
система создает первую задачу с указанной пакетной группой, а все остальные, от которых зависит первая создает с пустой пакетной группой.
кмк, эту проблему можно глобально решить в классе BatchHeader - при добавлении новой задачи к шапке инициализировать у нее batchGroupId (вообще непонятно, почему этого нет в базовой комплектации ))
__________________
Axapta non erubescit
Старый 17.11.2011, 15:38   #25  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Коллеги, отмена пересчетов по складу требует, чтобы отменялся сперва последний пересчет, потом предпоследний и.т.д.
Обязательно ли это ?
Если да, то получается что при пакетной отмене пересчетов содержится ошибка. Там не учитывается этот порядок.

см. метод
\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  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
К проблеме № ПРОБЛЕМА 6. А что делать если остались проводки со статусом "Продано" и типом «Средневзвешенное закрытие запасов»? при последующих пересчетах они тоже не уходят...
Старый 21.11.2011, 11:19   #27  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от zelibobis Посмотреть сообщение
К проблеме № ПРОБЛЕМА 6. А что делать если остались проводки со статусом "Продано" и типом «Средневзвешенное закрытие запасов»? при последующих пересчетах они тоже не уходят...
Цитата:
Сообщение от Bega Посмотреть сообщение
Можно бы было доделать currencyTransfer_RU(), чтобы он анализировал и CostAmountAdjustment но он используется ниже в других местах и такая модификация потребует еще тестирования, проверю отдельно и напишу.
Я в результате изменил метод currencyTransfer_RU() и убрал модификацию в методе updateModelAverage(), скорее всего это поможет.
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  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
Хм.. мы тоже подправили этот метод - но при пересчете все-равно остаются указанные мною выше проводки. Анализировали код - нашли участок в классе 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;
            }
...
А метод 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.
Старый 21.11.2011, 12:16   #29  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от 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  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
RU5. Сори, это уже я убрал код обрамленный <GEE> в данном методе на тестовом приложении. Но даже с ним зависшие проводки не уходят...
Старый 21.11.2011, 12:55   #31  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от zelibobis Посмотреть сообщение
RU5. Сори, это уже я убрал код обрамленный <GEE> в данном методе на тестовом приложении. Но даже с ним зависшие проводки не уходят...
А в вашей средневзвешенной расходной проводке, которая пропускается, чему равны CostAmountPosted и CostAmountAdjustment?
Старый 21.11.2011, 14:07   #32  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
оба по 0
Старый 21.11.2011, 15:42   #33  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от zelibobis Посмотреть сообщение
оба по 0
Получается у вас расходная средневзвешенная проводка прошлого периода оказалась почему-то открытой. Это именно проводка прошлого периода? Какая у нее финансовая дата? Она и перед закрытием тоже открыта? Или оказывается открытой в процессе закрытия из-за корректировки приходов прошлого месяца?

Если это средневзвешенная расходная проводка прошлого периода, то по логике она и не должна сопоставляться со средневзвешенным приходом этого периода, а именно это происходит в указанном куске кода.

Мне кажется нужно сначала выяснить, почему эта проводка оказалась открытой.
Старый 21.11.2011, 16:19   #34  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
Да, проводка прошлого периода, более того таких проводок довольно много по разным номенклатурам. Мне кажется это как раз последствие не корректного метода currencyTransfer_RU - так как из-за него оставались открытые и приходы и расходы с типом "Средневзвешенное закрытие запасов". Вопрос теперь как с этим жить дальше? После фикса currencyTransfer_RU - все новые создаваемые "Средневзвешенное закрытие запасов" будут сопоставляться корректно. Но вот что делать со старыми проводками прошлых периодов?
Старый 21.11.2011, 16:53   #35  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от zelibobis Посмотреть сообщение
Да, проводка прошлого периода, более того таких проводок довольно много по разным номенклатурам. Мне кажется это как раз последствие не корректного метода currencyTransfer_RU - так как из-за него оставались открытые и приходы и расходы с типом "Средневзвешенное закрытие запасов". Вопрос теперь как с этим жить дальше? После фикса currencyTransfer_RU - все новые создаваемые "Средневзвешенное закрытие запасов" будут сопоставляться корректно. Но вот что делать со старыми проводками прошлых периодов?
Первое, я бы попробовал модифицировать код, чтобы эти проводки в этом периоде были все-таки сопоставлены, потом убрать модификацию. Другой вариант - джобом через doUpdate() проставить дату "Финансовое закрытие", флаг "Открытое значение" = Нет, "Сопоставленное количество" и "Сопоставленная сумма" в значение по сумме сопоставлений. Это чтобы эти проводки не участвовали больше в закрытии.
Старый 21.11.2011, 17:21   #36  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
Спасибо. Попробую.
Старый 15.12.2011, 16:14   #37  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от zelibobis Посмотреть сообщение
Спасибо. Попробую.
Обнаружил у себя такую же проблему. Некоторые номенклатуры у нас двигаются с нулевой стоимостью. Для части таких проводок сопоставление не работает и проводки постоянно висят открытыми.

В принципе это не особо влияет на правильность расчета себестоимости, только в журнале при закрытии выдаются предупреждения, что проводка не может быть полностью сопоставлена. Но вдруг в какой-то прекрасный момент в проводке может появится стоимость (то ли бухгалтер ошиблась, то ли решили теперь со стоимостью учет вести для этой номенклатуры, теперь не суть важно). Тут как раз и вылезает косяк: из-за того, что часть проводок не сопоставляются, цена оказывается неверной. Собственно, это та же самая ПРОБЛЕМА 6, только решение, которое я тогда предлагал, решает лишь часть проблем.

Причина, как и в прошлые разы оказались российские модификации расчета средневзвешенной стоимости в методе InventCostItemDim::updateModelAverage().
Там есть три условия, где идет проверка метода this.currencyTransfer_RU(). Не знаю, чего хотели локализаторы, но работает не верно.
Итак.

РЕШЕНИЕ ПРОБЛЕМЫ 6 (ВЕРСИЯ 2)

Нужно все эти три проверки this.currencyTransfer_RU() убрать из метода InventCostItemDim::updateModelAverage()., то есть в этих трех условиях if() вернуть все к слою syp.
УДАЛИТЬ:
Нажмите на изображение для увеличения
Название: Snap225.jpg
Просмотров: 635
Размер:	90.7 Кб
ID:	7380
УДАЛИТЬ и ВЕРНУТЬ (выделено зеленым).
Нажмите на изображение для увеличения
Название: Snap227.jpg
Просмотров: 580
Размер:	83.1 Кб
ID:	7381
УДАЛИТЬ и ВЕРНУТЬ (выделено зеленым).
Нажмите на изображение для увеличения
Название: Snap229.jpg
Просмотров: 632
Размер:	89.1 Кб
ID:	7382

С этой модификацией я закрыл ноябрь и у нас не было выдано ни одной ошибки про сопоставления, все висевшие несколько месяцев несопоставленные проводки были сопоставлены.
За это сообщение автора поблагодарили: fed (15), EVGL (15), Logger (15).
Старый 15.12.2011, 16:21   #38  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Bega Посмотреть сообщение
Первое, я бы попробовал модифицировать код, чтобы эти проводки в этом периоде были все-таки сопоставлены, потом убрать модификацию. Другой вариант - джобом через doUpdate() проставить дату "Финансовое закрытие", флаг "Открытое значение" = Нет, "Сопоставленное количество" и "Сопоставленная сумма" в значение по сумме сопоставлений. Это чтобы эти проводки не участвовали больше в закрытии.
По поводу закрытия проводки джобом, делать так НЕ нужно. Если что-то несопоставлено, нужно искать причину и исправлять ее, иначе проблема так и будет тянутся из месяца в месяц и может вылезти, когда на конец периода остаток будет нулевым, а сумма ненулевая (были уже темы по этому поводу).
Старый 10.02.2012, 16:20   #39  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Bega Посмотреть сообщение
ПРОБЛЕМА 3. Все коррекции, сделанные по приходным проводкам с типом «Производство» при помощи коррекции проводок в форме «Закрытие и коррекция» отменяются!
При суммировании сумм сопоставлений следует добавить еще тип корректировки "В наличии" (InventAdjustmentType::InventOnHand). Иначе при калькуляции ПЗ после "уценки/дооценки" (корректировка в наличии), сначала будет "отмена", а затем повторная коррекция на сумму "уценки/дооценки", только возможно (в зависимости от настроек) с другим корр. счетом (из InventAdj::errorAccountOperations(...))

+ к связи по ваучеру неплохо бы добавить связь по дате

Только при "доукомплектации ПЗ" аналогичная проблема все равно останется

т.е. вместо
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  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от vallys Посмотреть сообщение
При суммировании сумм сопоставлений следует добавить еще тип корректировки "В наличии" (InventAdjustmentType::InventOnHand). Иначе при калькуляции ПЗ после "уценки/дооценки" (корректировка в наличии), сначала будет "отмена", а затем повторная коррекция на сумму "уценки/дооценки", только возможно (в зависимости от настроек) с другим корр. счетом (из InventAdj::errorAccountOperations(...))

+ к связи по ваучеру неплохо бы добавить связь по дате

Только при "доукомплектации ПЗ" аналогичная проблема все равно останется
Согласен, это если ПЗ рассчитывается в двух отчетных периодах, у меня таких ситуаций нет.
Теги
баг, закрытие склада, ошибка, ошибка при закрытии склада, себестоимость

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Завышенная себестоимость по расходам после закрытия склада в DAX2009 Bega DAX: Функционал 13 14.02.2011 12:55
Не хватает фин. аналитик при пересчете и закрытии склада Geo DAX: Функционал 7 23.10.2010 00:24
Проблема с журналом спецификаций при закрытии склада CDR DAX: Функционал 2 24.05.2010 10:50
Denis Fedotenko: Себестоимость и закрытие склада Blog bot DAX: База знаний и проекты 44 29.03.2010 14:54
Финансовые проблемы при Закрытии склада Владимир Ю. DAX: Функционал 6 28.06.2005 20:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:08.