18.06.2009, 11:55 | #1 |
Участник
|
Отмена Курсовой по поставщика. Возможно?
Коллеги,
В системе провели расчет курсовой по поставщикам поздней датой. Теперь при расчете более ранней датой, система выдает ошибку " Курсовая разница как в 30.10.2008 операции ГК-007218 невозможна, поскольку курсовая разница по этой операции уже была посчитана как в 02.03.2009." Подскажите, возможно ли отменить Расчитанную курсовую разницу по поставщику? |
|
19.06.2009, 15:46 | #2 |
Участник
|
По отсутствию ответов делаю вывод что стандартными средствами удалить или отменить рассчитанную курсовую разницу по поставщику невозоможно.
Тогда второй вопрос. Если удалить программно: по Voucher курсовой, удалить VendTrans и LedgerTrans получу я так скаазть отмену Курсовой? Или надо еще какие-то таблицы чистить? |
|
20.06.2009, 21:22 | #3 |
Moderator
|
Цитата:
Подскажите, возможно ли отменить Расчитанную курсовую разницу по поставщику?
Цитата:
Если удалить программно: по Voucher курсовой, удалить VendTrans и LedgerTrans получу я так скаазть отмену Курсовой? Или надо еще какие-то таблицы чистить?
|
|
22.06.2009, 08:22 | #4 |
Участник
|
В стандартной функциональности отмена пересчета нереализованных курсовых разниц при помощи периодической операции модуля отсутствует. Это относится к Microsoft NavisionAxapta 3.0 SP6 Microsoft Dynamics AX 4.0 SP2.
Для ручного \ программного способа, в Вашем случае расчета нереализованной курсовой по поставщикам необходимо:
X++: static void CorrVendExchAdj(Args _args) { VendTable vtb; VendTrans vtAc; VendTrans vtEx; VendTrans vt; VendTrans vtr; VendTransOpen vto; VendSettlement vtsAc; VendSettlement vts; LedgerTrans ledgerTransAc; LedgerTrans ledgerTransCorr; TransDate dt = 22\06\2009; // Дата отменяемого пересчета НКР int i; ; if (box::okCancel("Вы уверены в необходимости отмены пересчета нереализованных курсовых разниц поставщиков", DialogButton::Cancel) == DialogButton::Ok) { ttsbegin; while select vtb where vtb.AccountNum { while select forupdate vtAc where vtAc.AccountNum == vtb.AccountNum && vtAc.LastSettleDate == dt && vtAc.VendExchAdjustmentUnrealized != 0 && vtAc.ExchAdjustment != 0 join forupdate vtEx where vtEx.LastSettleVoucher == vtAc.Voucher && vtEx.TransType == LedgerTransType::ExchAdjustment && vtEx.TransDate == dt { while select forupdate ledgerTransAc where ledgerTransAc.Voucher == vtEx.Voucher && ledgerTransAc.TransType == LedgerTransType::ExchAdjustment && ledgerTransAc.TransDate == dt join forupdate ledgerTransCorr where ledgerTransCorr.Voucher == ledgerTransAc.Voucher && ledgerTransCorr.BondBatchTrans_RU == ledgerTransAc.BondBatchTrans_RU && ledgerTransCorr.BondBatch_RU == ledgerTransAc.BondBatch_RU && ledgerTransCorr.Crediting == NoYes::Yes { ledgerTransAc.doDelete(); ledgerTransCorr.doDelete(); } while select forupdate vtsAc where vtsAc.OffsetTransVoucher == vtEx.Voucher && vtsAc.TransRecId == vtAc.RecId join forupdate vts where vts.OffsetTransVoucher == vtAc.Voucher && vts.TransRecId == vtEx.RecId { vtsAc.doDelete(); vts.doDelete(); } select firstonly forupdate vto where vto.RefRecId == vtAc.RecId; vto.AmountMST = vtAc.AmountMST; vto.doUpdate(); vtEx.doDelete(); vtAc.LastSettleVoucher = ''; vtAc.LastSettleDate = dateNull(); // for AX 4.0 vtAc.ExchAdjustment = 0; vtAc.LastExchAdj = dateNull(); vtAc.LastExchAdjVoucher = ''; // for AX 4.0 vtAc.LastExchAdjRate = 0; // for AX 4.0 vtAc.VendExchAdjustmentUnrealized = 0; vtAc.doUpdate(); i++; } } } Info(strfmt("Отмена пересчета нереализованных курсовых разниц поставщиков выполнена. %1 проводок обработано", i)); ttscommit; } При наличии реализованной курсовой разницы пересчитанной сопоставлением проводок и нереализованной курсовой разницы в разных налоговых периодах стандартный функционал отрабатывает корректно не для всех сценариев. И по этому поводу Microsoft NavisionAxapta 3.0 приходилось дорабатывать. Например: Расчет реализованной и нереализованной курсовой разницы:
Решение: Данную ситуацию легко избежать, если регистрировать в системе операции в их хронологической последовательности. Если выполнить переоценку в последний день месяца не удается, то рекомендуется отключать автоматическое сопоставление проводок по контрагенту, и не выполнять ручного сопоставления до того момента, пока переоценка задолженности по этому контрагенту на конец месяца не будет выполнена в системе. Механизм расчета курсовой разницы переработан в следующей версии системы - Microsoft Dynamics AX 4.0. Но не достаточно для того, чтобы не возникало ошибок данных. При определённых сценариях система формирует бухгалтерские проводки не по требованию Налогового законодательства. Например: Некорректное закрытие проводок с разными профилями разноски:
X++: void balancePostingProfile(CustVendTrans _custVendTransDebet, CustVendTrans _custVendTransCredit, AmountMST _amountMST) { LedgerBondClient_RU ledgerBondClient = ledgerVoucher.findLedgerVoucherObject().ledgerBondClient_RU(); LedgerVoucherTransObject ledgerVoucherTransObject; LedgerVoucherObject ledgerVoucherObject; LedgerAccount accountNumDebet; LedgerAccount accountNumCredit; CustVendSettlePostingLog_RU postingLog; ; // fix --> //if (_custVendTransDebet.postingProfile != _custVendTransCredit.postingProfile) if ((_custVendTransDebet.postingProfile != _custVendTransCredit.postingProfile) && ((_custVendTransDebet.TransType == LedgerTransType::Purch) && (_custVendTransCredit.TransType != LedgerTransType::Purch))) // fix <-- { ledgerVoucherObject = this.createLedgerVoucherObject_RU(); ledgerBondClient = ledgerVoucherObject.ledgerBondClient_RU(); accountNumDebet = VendLedgerAccounts::sumAccount(_custVendTransDebet.accountNum, _custVendTransDebet.postingProfile); accountNumCredit = VendLedgerAccounts::sumAccount(_custVendTransCredit.accountNum, _custVendTransCredit.postingProfile); if (accountNumDebet != accountNumCredit) { ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(ledgerVoucher.findLedgerVoucherObject(), LedgerPostingType::VendPayment, accountNumDebet, _custVendTransDebet.dimension, Companyinfo::standardCurrency(), _amountMST, _custVendTransDebet.recId); ledgerVoucherObject.addTrans(ledgerVoucherTransObject); ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(ledgerVoucher.findLedgerVoucherObject(), LedgerPostingType::VendPayment, accountNumCredit, _custVendTransCredit.dimension, Companyinfo::standardCurrency(), -_amountMST, _custVendTransCredit.recId); ledgerVoucherObject.addTrans(ledgerVoucherTransObject); if (isConfigurationkeyEnabled(configurationkeynum(CustVendJournalizeSettlementTrans_W))) { CustVendTrans::balancePostingProfile_ru(ledgerVoucherTransObject, _custVendTransDebet, _custVendTransCredit, companyInfo::standardCurrency(), _custVendTransDebet.dimension, _custVendTransCredit.dimension, _amountMst, _amountMst); postingLog = New CustVendSettlePostingLog_RU(CustVendTransPostingLogType_RU::Balance); postingLog.parmVoucher(ledgerVoucher.lastVoucher()); postingLog.parmTransDate(ledgerVoucher.lastTransDate()); postingLog.parmCorrect(ledgerVoucher.parmCorrection(ledgerVoucher.lastVoucher())); postingLog.parmTransRecId (_custVendTransDebet.RecId); postingLog.parmOffsetRecId (_custVendTransCredit.RecId); postingLog.parmOffsetDimension(_custVendTransCredit.Dimension); postingLog.parmReverseTrans(true); postingLog.createTrans(LedgerPostingType::CustPayment, accountNumDebet, accountNumCredit, _custVendTransDebet.dimension, CompanyInfo::standardCurrency(), _amountMst, _amountMST, - ledgerVoucherTransObject.parmAmountMSTSecondary()); } if (ledgerBondClient) { ledgerBondClient.bondVRef2VRef(ledgerBondClient.lastVrefId(), ledgerBondClient.lastVrefId(-1)); } } } }
__________________
“Правильно поставленная задача – оказывается наполовину решена” Мой шеф по диплому Анатолий Алексеевич Маркилов. Мой статус: В поиске хорошо оплачиваемой работы. |
|
|
За это сообщение автора поблагодарили: BOAL (1), ena_ax (1). |
Теги |
курсовая разница, отмена, сторно |
|
|