Criar diário de registro de depreciação

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);
}




Importar/Exportar Definições de Projetos por código

Olá Pessoal,
Tudo bem?

Esses dias me deparei em uma situação em que precisava exportar somente as definições dos projetos e depois levar para um outro ambiente, pesquisando encontrei dois Jobs que me ajudaram com essa situação.

Estou enviando caso vocês venham a precisar um dia.

  1.  Exportar Definicoes Projeto

 

static void ExportProjectDefinitions(Args _args)
{
    TreeNode        node;
    ProjectNode     project;
    str             path, folder = "C:\\AXProjects\\";
    ;
 
    project = SysTreeNode::getSharedProject().AOTfirstChild();
 
    while(project)
    {
        node = project.loadForInspection();
        path = <strong>strfmt</strong>("%1%2_%3.xpo" ,folder, "", node.treeNodeName());
        node.treeNodeExport(path, <strong>2049</strong>);
        project = project.AOTnextSibling();
    }
 
    info( "Complete");
}

 

  1. Job Importar XPO

 

static void JobImportarXpo(Args _args)
{
     Filename baseFolder;
     Filename csvFilename;
     Filename foundBaseFileName;
     Filename foundFileName;
     container mainFolder, subFolder, fileContainer;
     SysImportElements   sysImportElements;
 
     baseFolder = "C:\\BEL\\AXProjects\\AXProjects\\" ;
 
     mainFolder = WinAPI::findFirstFile( strFmt("%1*.xpo" ,baseFolder));
 
     foundBaseFileName = conpeek(mainFolder, 2);
 
     while (foundBaseFileName)
     {
        sysImportElements.newFile( strFmt("%1%2" ,baseFolder,foundBaseFileName));
        sysImportElements.parmImportAot(true);
        sysImportElements.parmImportLabels(false);
        sysImportElements.parmImportWithIds(false);
        sysImportElements.import();
        foundBaseFileName = WinAPI::findNextFile(conpeek(mainFolder,1));
     }
}




Guidelines para uso de eventos no AX 2012

Pessoal,
O Rodrigo Matiazo publicou um artigo excelente em seu blog, recomendo a leitura a todos os desenvolvedores.

Artigo: http://daxdev.com.br/blog/guidelines-para-uso-de-eventos-no-ax-2012/

[]s
Pichler





Novo Blog – Dax Beginners

Pessoal,
Mais um blog bem bacana para contribuir com a comunidade, o blog é do Christian Fleishmann e trata diversos assuntos de desenvolvimento. Link para acesso: http://daxbeginners.wordpress.com/.

[]s
Pichler





Caros,
Ao fazer um upgrade de versão no AX (CU novo), ele sempre gerava os projetos com os conflitos de código e recdis, no entanto, no 2012 quando vamos rodar essa funcionalidade estamos recebendo a seguinte mensagem: No elements are found in AOD files in the old directory. the layer conflict project will not be created e por consequência não conseguimos gerar os projetos.

Depurando o processo de update, vi que a mensagem era gerada pela classe SysUpgradeDetectConflicts, método detectConflictsRun, que faz um select, verifica se encontrou o elemento na tabela utilElementsOld, caso sim retorna true caso não retorna false.

O “workaround” que fiz foi sempre retornar true e aparentemente resolveu, agora estamos com um chamado aberto na Microsoft para que nos auxiliem na maneira correta para resolver.

Caso alguém passe por isso, já sabem como contornar.

[]s
Pichler





Tags / Categorias

RSS



Arquivo

Dynamics Community