Olá Pessoal,
Tudo bem?

Essa semana me deparei em uma situação em que precisava gerar um diário de registro de depreciação para um ativo fixo através de X++. Achei interessante compartilhar com vocês caso se encontrem na mesma situação algum dia.

class AssetSplit_AssetDepBookJournalTable
{
    AssetDepBookJournalTable    assetDepBookJournalTable;
}
 
// Criar o cabeçalho do diário
public assetDepBookJournalTable createAssetDepBookJournalTable(JournalNameId _journalNameId)
{
    AssetJournalId              journalId;
 
    assetDepBookJournalTable.initValue();
    journalId = AssetDepBookJournalTableData::nextJournalId();
    assetDepBookJournalTable.JournalId = journalId;
    assetDepBookJournalTable.JournalNameId = _journalNameId;
    assetDepBookJournalTable.JournalType  = AssetDepBookJournalType::DepreciationBooks;
    assetDepBookJournalTable.insert();
 
    return assetDepBookJournalTable;
}
 
// Criar a linha para o diário
public void createAssetDepBookJournalTrans(JournalId _journalId, AssetTransTypeDepBookJournal _assetTransTypeDepBookJournal, TransDate _transDate,
                                            AssetDepreciationBookId _assetDepreciationBookId, LedgerJournalTransTxt _ledgerJournalTransTxt,
                                            AmountCur _paymentAmount, AssetId _assetId, CurrencyCode _currencyCode = CompanyInfo::standardCurrency())
{
    AssetDepBookJournalTrans assetDepBookJournalTrans;
 
    assetDepBookJournalTrans.clear();
    assetDepBookJournalTrans.JournalId = _journalId;
    assetDepBookJournalTrans.TransDate = _transDate;
    assetDepBookJournalTrans.TransactionType = _assetTransTypeDepBookJournal;
    assetDepBookJournalTrans.DepreciationBookId = _assetDepreciationBookId;
    assetDepBookJournalTrans.Txt = _ledgerJournalTransTxt;
 
    if (_paymentAmount < 0)
    {
        assetDepBookJournalTrans.AmountCurDebit = Currency::amount(-_paymentAmount,_currencyCode);
    }
    else
    {
        assetDepBookJournalTrans.AmountCurCredit = Currency::amount(_paymentAmount,_currencyCode);
    }
 
    assetDepBookJournalTrans.AssetId = _assetId;
    assetDepBookJournalTrans.CurrencyCode = _currencyCode;
    assetDepBookJournalTrans.insert();
}
 
// Lançar o diário de registro de depreciação
public void postAssetDepBookJournalTrans(AssetDepBookJournalTable _assetDepBookJournalTable)
{
    Args args = new Args();
 
    args.record(_assetDepBookJournalTable);
 
    AssetDepBookJournalPost::main(args);
}
 
//validar diários antes de lançar
public void checkAssetDepBookJournalTrans(AssetDepBookJournalTable _assetDepBookJournalTable)
{
    Args args = new Args();
 
    args.record(_assetDepBookJournalTable);
 
    AssetDepBookJournalCheck::main(args);
}