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); } |
23 Jul 2014
Posted by: Juliano Bachesque in: X++
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.
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"); } |
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)); } } |
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
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
31 Mar 2014
Posted by: Ricardo Pichler in: X++
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