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.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Трансляция и корреспонденция счетов 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, время: 10:11.