Update existing records to ensure the Consolidation Account field is correctly populated based on the Consolidate MainAccount setup.
1. Contract Class:-
[DataContractAttribute]
[SysOperationAlwaysInitializeAttribute]
internal final class UpdateConsolidateAccountContract
implements SysOperationValidatable, SysOperationInitializable
{
TransDate fromDate;
[DataMemberAttribute,
SysOperationLabel(literalStr("Transaction date"))]
public TransDate parmFromDate(TransDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
public boolean validate()
{
boolean isValid = true;
if (!fromDate)
{
isValid = checkFailed("Date must be filled in.");
}
return isValid;
}
public void initialize()
{
fromDate = mkDate(1, 1, 2025);
}
}
2. Service Class:-
internal final class UpdateConsolidateAccountService extends SysOperationServiceBase
{
public void processOperation(UpdateConsolidateAccountContract contract)
{
GeneralJournalAccountEntry generalJournalAccountEntry;
GeneralJournalEntry generalJournalEntry;
MainAccountConsolidateAccount consolidationAccount;
LedgerParameters ledgerParameters;
TransDate transactionDate = contract.parmFromDate();
select ledgerParameters
where ledgerParameters.DataAreaId == curExt();
if (ledgerParameters.ConsolidateAccountGroup)
{
while select forupdate generalJournalAccountEntry
join generalJournalEntry
where generalJournalAccountEntry.GeneralJournalEntry == generalJournalEntry.RecId
&& generalJournalAccountEntry.ConsolidationMainAccount == ""
&& generalJournalEntry.SubledgerVoucherDataAreaId == curExt()
&& generalJournalEntry.AccountingDate >= transactionDate
{
try
{
select firstonly consolidationAccount
where consolidationAccount.MainAccount == generalJournalAccountEntry.MainAccount
&& consolidationAccount.ConsolidateAccountGroup == ledgerParameters.ConsolidateAccountGroup;
if (consolidationAccount)
{
ttsBegin;
generalJournalAccountEntry.ConsolidationMainAccount = consolidationAccount.ConsolidationMainAccount;
generalJournalAccountEntry.ConsolidateAccountName = consolidationAccount.Name;
generalJournalAccountEntry.doUpdate();
ttsCommit;
}
}
catch
{
error(UpdateConsolidateAccountService::getError());
continue;
}
}
}
}
public static str getError()
{
SysInfologEnumerator sysInfologEnumerator;
SysInfologMessageStruct infoMessageStruct;
str logMessage;
str logString;
int i;
#Define.NewLine('\n')
sysInfologEnumerator = SysInfologEnumerator::newData(infolog.infologData());
while (sysInfologEnumerator.moveNext())
{
i = 1;
if (logMessage)
{
logMessage += #NewLine;
}
infoMessageStruct = SysInfologMessageStruct::construct(sysInfologEnumerator.currentMessage());
while (i <= infoMessageStruct.prefixDepth())
{
logString += infoMessageStruct.preFixTextElement(i) + '. ';
i++;
}
logString += infoMessageStruct.message();
logMessage += infoMessageStruct.message();
}
infolog().clear();
return logMessage;
}
}
3. controller class:-
internal final class UpdateConsolidateAccountController extends SysOperationServiceController
{
public void new()
{
super();
this.parmClassName(classStr(UpdateConsolidateAccountService));
this.parmMethodName(methodStr(UpdateConsolidateAccountService, processOperation));
this.parmDialogCaption("Update consolidate main account");
// this.parmExecutionMode(SysOperationExecutionMode::ScheduledBatch);
}
public ClassDescription caption()
{
return "Update consolidate main account";
}
public static void main(Args args)
{
UpdateConsolidateAccountController controller = new UpdateConsolidateAccountController();
controller.parmInBatch(true);
controller.parmShowDialog(true);
controller.startOperation();
}
}
No comments:
Post a Comment