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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2012, 10:36   #1  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Корреспонденция
Добрый день. Возникла такая ситуация (AX2009, RU5). Если по заказу на продажу в одной операции разносится и строка с положительной суммой и строка с отрицательной суммой (например, скидка) система "переворачивает" проводки сторно:
PHP код:
Дт 62.01  Кт 90.01  200 RUB
Дт 90.01  Кт 62.01  100 RUB 
По правилам БУ счет 90.01 - пассивный, т.е. система в таком случае должна в операции "сторно" поставить флаг коррекция:
PHP код:
Дт 62.01  Кт 90.01  200 RUB
Дт 62.01  Кт 90.01  
-100 RUB 
Я смоделировал ситуацию в Job
X++:
static server void tutorialBondBatch_RU(Args _args)
{
    LedgerVoucher           ledgerVoucher;
    LedgerVoucherObject     ledgerVoucherObject;

    LedgerBondClient_RU     ledgerBondClient;

    NumberSeq               numberSeq;

    dimension               dimension;
    ;

    dimension = CustTrans::findFromInvoice('Нвт12/000916', 'К000001').Dimension;

    numberSeq = NumberSeq::newGetVoucher(
        LedgerParameters::numRefLedgerExchAdjVoucher());

    ledgerVoucher = LedgerVoucher::newLedgerPost(DetailSummary::Summary,
                                                 SysModule::Ledger,
                                                 numberSeq.parmNumberSequenceCode(),
                                                 TransactionLogType::LedgerJournal);


    ledgerVoucherObject = LedgerVoucherObject::newVoucher(numberSeq.voucher(),
                                                              systemDateGet(),
                                                              SysModule::Ledger,
                                                              LedgerTransType::Sales,
                                                              NoYes::No);

    ledgerVoucherObject.parmVoucherCheck(false);

    ledgerVoucher.addVoucher(ledgerVoucherObject);


    //ledgerVoucher.findLedgerVoucherObject().parmCorrection(true);

    ledgerVoucher.addTrans(                                       //Проводка реализации по строке сторно
        LedgerVoucherTransObject::newCreateTrans(
            ledgerVoucher.findLedgerVoucherObject(),
            LedgerPostingType::SalesDisc,
            '90.01.1',           // Ledger account
            dimension,
            CompanyInfo::find().currencyCode,
            300,              // Amount
            0,
            0)
            );



    //ledgerVoucher.findLedgerVoucherObject().parmCorrection(! ledgerVoucher.findLedgerVoucherObject().parmCorrection());

    ledgerVoucher.addTrans(                                      //Проводка реализации по строке продажи
        LedgerVoucherTransObject::newCreateTrans(
            ledgerVoucher.findLedgerVoucherObject(),
            LedgerPostingType::SalesDisc,
            '90.01.1',           // Ledger account
            dimension,
            CompanyInfo::find().currencyCode,
            -2000,              // Amount
            0,
            0)
            );

    ledgerVoucher.addTrans(                                    //Итоговая сумма задолженности
        LedgerVoucherTransObject::newCreateTrans(
            ledgerVoucher.findLedgerVoucherObject(),
            LedgerPostingType::CustBalance,
            '62.01.1',           // Ledger account
            dimension,
            CompanyInfo::find().currencyCode,
            1700,              // Amount
            0,
            0));

    ledgerBondClient =ledgerVoucher.findLedgerVoucherObject().ledgerBondClient_RU();


    if (ledgerBondClient &&                                       //корреспондируются реализация с проводкой с типом CustBalance
        ledgerBondClient.findVRefByPostingType(LedgerPostingType::CustBalance))
    {
         ledgerBondClient.bondVRef2Log(ledgerBondClient.findVRefByPostingType(LedgerPostingType::CustBalance));
    }

    ledgerVoucher.end();
Дело в том, что при разноске накладной, на каждую строку заказа формируется проводка реаоизации (Счет 90.01), а затем одна по задолженности клиента. Затем в методе SalesFormLetter_Invoice.postJournal() вызывается корреспонденция всех созданных операций с операцией типа CustBalance. Если у сторно принудительно поставить флаг коррекция, то корреспонденция не идет. Видимо проблема в методе LedgerBondServer_RU.splitTrans(), т.к. в этом случае не происходит разделение проводки по 62.01 с типом CustBalance.
Что делать? Подскажите..

Последний раз редактировалось Andrux; 04.04.2012 в 11:04.
Старый 04.04.2012, 10:47   #2  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
попробуйте внести изменение в splitTrans как я писал тут.
(там где упомянут метод calcCreditingBond).

по идее после этого изменения, при признаке "коррекция" у сторно, корреспонденция должна пройти.
__________________
If it ain't broke, take it apart and find out why (с)
Старый 04.04.2012, 11:05   #3  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
В АХ2009 локализаторы уже внесли изменения в этот метод

X++:
public void calcCrediting()
// </GEEU>
{
    /* <SYS>
    this.Crediting = (this.AmountMST < 0 && this.Correct == 0) ||
                     (this.AmountMST > 0 && this.Correct == 1);
                     </SYS> */
    // <GEEU>
    Amount tmpAmount = this.AmountCur ? this.AmountCur :
                       this.AmountMST ? this.AmountMST :
                       this.AmountMSTSecond;

    this.Crediting = (tmpAmount < 0 && this.Correct == 0) ||
                     (tmpAmount > 0 && this.Correct == 1);
                     // </GEEU>
}
Старый 04.04.2012, 11:17   #4  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Внесли, но суть его осталась прежней и для корреспонденции он не подходит категорически.

Как раз по причине, по которой у вас она не срабатывает.
Он для определения признака Crediting, который не всегда соотносится с истинным знаком проводки (как раз таки из-за наличия флага "коррекция").
__________________
If it ain't broke, take it apart and find out why (с)
Старый 04.04.2012, 12:06   #5  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Внес изменения, в моем случае так и не заработало. Кроме того, перестали корреспондироваться проводки, когда разносится операция с признаком коррекция (на все операции)
Старый 05.04.2012, 18:16   #6  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Получается никак нельзя исправить разноску? Только потом, по факту, переворачивать проводки каким-нибудь Job?
Старый 13.03.2013, 09:59   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Подниму тему... Нам бухгалтера говорят, что это ошибка, такие проводки некорректны, противоречат принятой Минфином РФ методологии учета, поэтому требуется исправлять.Что скажете?
Старый 13.03.2013, 15:56   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
тут проблема не в корреспонденции, а в том, что надо выставить флаг коррекции при разноске этих операций
Старый 13.03.2013, 16:05   #9  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Да, не в самой корреспонденции. Изначально проблема именно в "переворачивании" проводок. Как ты предлагаешь сделать, чтобы в заказах (и закупках) система не "переворачивала" проводки?
Старый 13.03.2013, 16:10   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Вот это вот: "Проводка реализации по строке сторно" разносить с признаком коррекции и корреспондировать с дополнительным CustBalance на эту сумму которрый тоже с признаком коррекции или разбивать сторно и несторно на 2 накладных
Старый 13.03.2013, 16:13   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
См также http://blogs.technet.com/b/rumicroso...7/3546450.aspx
За это сообщение автора поблагодарили: oip (5).
Старый 15.03.2013, 10:37   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Максим, спасибо. Действительно, судя по всему, данный хотфикс проблему решает.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Трансляция и корреспонденция счетов Ivanhoe DAX: Функционал 1 11.11.2015 15:18
Не работает корреспонденция на конкретном примере. Delfins DAX: Функционал 8 19.04.2010 16:44
Корреспонденция счетов Rafael DAX: Функционал 8 28.01.2009 16:50
Корреспонденция во вторичной валюте andy239 DAX: Программирование 3 19.01.2006 18:13
Неправильная корреспонденция elfalex DAX: Функционал 0 15.04.2005 10:38

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

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

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