X for Dummies

Como criar e selecionar título para liquidação em X++ no AX 2012

Publicado em AX2012, Tutoriais, X++, 18/02/2014, por Edvandro Santos

0


Olá!

Hoje nós vamos criar e marcar um título para liquidação num diário de pagamento usando X++ no Microsoft Dynamics AX 2012.

No meu exemplo vou utilizar os seguintes objetos do framework AxBC:

Além disso, vamos precisar de outras informações, como:

Criando o diário

Cabeçalho:

// 1o. passo: criar o cabeçalho do diário
axLedgerJournalTable = new AxLedgerJournalTable_CustVend();
axLedgerJournalTable.parmJournalName("200");
axLedgerJournalTable.save();

Linha(s):


// 2o. passo: criar a(s) linha(s) do diário
axLedgerJournalTrans = new AxLedgerJournalTrans();
axLedgerJournalTrans.parmJournalNum(axLedgerJournalTable.parmJournalNum());
axLedgerJournalTrans.parmTransDate(systemDateGet());
axLedgerJournalTrans.parmDue(systemDateGet());
axLedgerJournalTrans.parmLedgerDimension(DimensionStorage::getDynamicAccount("BRMF-000001", LedgerJournalACType::Vend));
axLedgerJournalTrans.parmTxt("Pagamento Fornecedor BRMF-000001, Fatura 37");
axLedgerJournalTrans.parmPostingProfile("010");
axLedgerJournalTrans.parmApproved(true);
axLedgerJournalTrans.save();

Edição da Transação Aberta

Com a informação do Id da transação aberta do Fornecedor a ser liquidada, vou instanciar o objeto CustVendOpenTransManager, responsável por manipular um ou mais títulos em aberto:

// 3o. passo: Pesquisar pelo título em aberto,
// iniciar CustVendOpenTransManager e anexar o título à linha do Diário
vendTransOpen = vendTransOpen::find(5637185113);
vendOpenTransManager= CustVendOpenTransManager::construct(axLedgerJournalTrans.ledgerJournalTrans());
vendOpenTransManager.updateTransMarked(vendTransOpen, NoYes::Yes);

Em seguida, vou obter o valor total dos títulos marcados para liquidação. Para isso, vou usar a classe SpecTransManager e o método getTotalSettleAmountForSpecReference:

// 4. passo: obter o total dos títulos marcados para liquidação
ledgerJournalTrans = axLedgerJournalTrans.ledgerJournalTrans();
exchangeRateHelper = ExchangeRateHelper::newCurrency(Ledger::primaryLedger(CompanyInfo::findDataArea(ledgerJournalTrans.Company).RecId), ledgerJournalTrans.CurrencyCode);
totalSettledAmount = SpecTransManager::getTotalSettleAmountForSpecReference(ledgerJournalTrans.Company,
                                                                            ledgerJournalTrans.TableId,
                                                                            ledgerJournalTrans.RecId,
                                                                            ledgerJournalTrans.CurrencyCode,
                                                                            ledgerJournalTrans.Company,
                                                                            ledgerJournalTrans.TransDate,
                                                                            ExchangeRateHelper.prepareExchangeRateForStorage(ledgerJournalTrans.crossrate()));

E, finalmente, vou atualizar a linha do diário:


// 5o. passo: atualizar a linha do diário
ttsBegin;
ledgerJournalTrans.selectForUpdate(true);
ledgerJournalTrans.AmountCurDebit = abs(totalSettledAmount);
ledgerJournalTrans.SettleVoucher = SettlementType::SelectedTransact;
ledgerJournalTrans.update();
ttsCommit;

Dessa forma, é possível verificar que a fatura no. 37 (do meu exemplo) está marcada para ser liquidada no diário que eu criei (no. 33):

Diário de Pagamento com título marcado para liquidação

Para lançar diários em X++ é possível utilizar a classe LedgerJournalCheckPost.

Até a próxima!


Autor

Edvandro Santos

Desenvolvedor de software desde 2005, é certificado em JAVA e MCP em Microsoft Dynamics AX 2009. Com projetos desenvolvidos para IBOPE, IG, NOKIA, Huawei e Siemens, nerd assumido e fã de rock ‘n roll, quadrinhos, sci-f e blues.