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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.07.2015, 19:06   #1  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
AX 2012 R3: Ошибка разноски ошибок округления по журналу операций
AX 2012 R3 CU8 (на R2 баг отсутствует).

В AX 2012 R3 при разноске журнала операций в модуле "Розница" (statement) при разноске ошибок округления при включенной корреспонденции возникает ошибка (точный текст не помню, но что-то вроде "Счет клиента не указан"):
  1. В методе \Classes\RetailStatementPaymentJournal\postPaymentJournalForSales есть такой кусок кода, который инициализирует Корр счет для проводки по разноске ошибок округления:
    X++:
    [ 161]             // <GEERU>
    [ 162]             if (correspondenceEnabled)
    [ 163]             {
    [ 164]                 offsetAccountNum = RetailStatementPaymentJournal::getNativeNonLedgerAccount(invoiceAccount, LedgerJournalACType::Cust);
    [ 165]             }
    [ 166]             // </GEERU>
  2. Проблема в том, что Корр счет инициализируется ПОСЛЕ разноски проводки ГК по расхождениям, вот код разноски расхождений:
    X++:
    [ 144]             totalRoundAmountCur = this.postRoundingDifference(transTable2
    [ 145]                                                               // <GEERU>
    [ 146]                                                               , LedgerJournalACType::Cust
    [ 147]                                                               , offsetAccountNum
    [ 148]                                                               // </GEERU>
    [ 149]                                                               );
В R2 такой ошибки нет, а вот R3 стал жертвой рефакторинга и баг присутствует вплоть до CU8.

Последний раз редактировалось Kabardian; 31.07.2015 в 19:08.
Старый 02.08.2015, 13:16   #2  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Забыл написать очевидный хотфикс - нужно переместить кусок кода из п. 1 выше п. 2 (аналогично тому, как это было в R2):
X++:
       // <GEERU>
        if (correspondenceEnabled)
        {
            offsetAccountNum = RetailStatementPaymentJournal::getNativeNonLedgerAccount(transTable.custAccount, LedgerJournalACType::Cust);
        }
        // </GEERU>

        if (lastInvoiceId != transTable.invoiceId)
        {
            postCreditLedgerJournalLine();

            // Unblock the customer
            custUnblocker.unblockCustomer(transTable.custAccount);

            select sum(grossAmount), sum(paymentAmount) from transTable2
                group by store, businessDate, custAccount, currency, exchRate, invoiceId
                where  transTable2.statementId == statementTable.statementId
                    && transTable2.invoiceId == transTable.invoiceId
                    && transTable2.type != RetailTransactionType::Logoff
                    && transTable2.type != RetailTransactionType::Logon
                    && transTable2.type != RetailTransactionType::Payment
                    && transTable.type != RetailTransactionType::CustomerOrder
                    && !transTable2.incomeExpenseAmount
                    && !transTable2.salesInvoiceAmount
                    && !transTable2.salesOrderAmount;

            totalRoundAmountCur = this.postRoundingDifference(transTable2
                                                              // <GEERU>
                                                              , LedgerJournalACType::Cust
                                                              , offsetAccountNum
                                                              // </GEERU>
                                                              );
Старый 03.08.2015, 18:43   #3  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Хотфикс выше неправильный - при тестировании была обнаружена ошибка. Рабочий вариант исправления:
X++:
        if (lastInvoiceId != transTable.invoiceId)
        {
            postCreditLedgerJournalLine();

            // Unblock the customer
            custUnblocker.unblockCustomer(transTable.custAccount);

            select sum(grossAmount), sum(paymentAmount) from transTable2
                group by store, businessDate, custAccount, currency, exchRate, invoiceId
                where  transTable2.statementId == statementTable.statementId
                    && transTable2.invoiceId == transTable.invoiceId
                    && transTable2.type != RetailTransactionType::Logoff
                    && transTable2.type != RetailTransactionType::Logon
                    && transTable2.type != RetailTransactionType::Payment
                    && transTable2.type != RetailTransactionType::CustomerOrder
                    && transTable2.type != RetailTransactionType::PendingSalesOrder
                    && !transTable2.incomeExpenseAmount
                    && !transTable2.salesInvoiceAmount
                    && !transTable2.salesOrderAmount;

            custTable = CustTable::find(transTable.custAccount);
            if (custTable.InvoiceAccount)
            {
                invoiceAccount = custTable.InvoiceAccount;
            }
            else
            {
                invoiceAccount = custTable.AccountNum;
            }

            // <GEERU>
            if (correspondenceEnabled)
            {
                offsetAccountNum = RetailStatementPaymentJournal::getNativeNonLedgerAccount(invoiceAccount, LedgerJournalACType::Cust);
            }
            // </GEERU>

            totalRoundAmountCur = this.postRoundingDifference(transTable2
                                                              // <GEERU>
                                                              , LedgerJournalACType::Cust
                                                              , offsetAccountNum
                                                              // </GEERU>
                                                              );
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: [AX 2012 R3] Why is my Kernel build version not changing after installing CU-8 or the latest binary hotfix? Blog bot DAX Blogs 0 31.12.2014 20:20
Dynamics AX Sustained Engineering: Microsoft Dynamics AX 2012 R3 RTM Warehouse Management: How to prevent the creation of two inventDim records considered identical in Dynamics AX 2012 R3 RTM Blog bot DAX Blogs 0 22.12.2014 19:12
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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