Bank Adjustments DMT 2025.1

Prior to 2025.1 we could DMT bank adjustments including the GL account number into the header.
With 2025.1, functionality was added to allow multiple GL distributions for each bank adjustment line. The GL account can no longer be added to the header.
Has anyone been able to create a single pass DMT template to add bank adjustment lines and gl distribution accounts?

An additional thought to your question…prior to 2025.1, I could enter a Bank Fee ID and the GL would default to the GL associated with the Bank Fee ID. Now, regardless of what Bank Fee ID I enter, the GL Account in the new GL Distribution section defaults to the Default Bank Fee ID value…it does not update to match the Bank Fee ID that is entered…

Hi Richard
We use Bank Adj to process our Credit card charges in 2025.1 we have had to change to DMT from paste update. The Below DMT headers worked for us, things to note the group must exist prior to running the DMT, TranNum is 0 to allow the system to generate it, if you only require one GL per adjustment then BankTranGLDist#SeqNum should be 1.
Company
BankAcctID
TranNum
TranDate
GroupID
TranAmt
TranRef
BankFeeID
Voided
BankTranGLDist#SeqNum
BankTranGLDist#DocDistributionAmt
BankTranGLDistTGLC#GLAccount

Hi Melinda,
Thanks for the help. I used your suggested format and it worked perfectly for all the fields except the GLAccount. For some reason the GL Account is not importing.

what format are you using for the GL ac? Which Kinetic version do you have I’ve used it successfully on 2025.1.5 and 2025.1.8

We are on Kinetic 2025.1.5.
The format I’m using is 1240|00|0100

We use dash, try 124-00-0100

Tried it with dashes - that didn’t work either.

Log a case with support that DMT template was provided by them a few weeks ago should be working.

Thanks Melinda. I logged a case with support.

I know for another DMT we had to use the SeqValue1 to X to assign the GLs. It wasn’t for a Bank Adjustment but perhaps try that while waiting for Support. Could be a version difference why it’s not working for you.

Thanks for the suggestion Randy, tried that too and no success.
If Support comes up with a solution, I’ll post it.

Support uncovered the issue.
There are 3 different fields available for GLAccount. The BankTranGLDistTGLC#GLAccount is the field that is required. I probably should have noticed that in the field descriptions.

Thank you for trying to help me.

Did you end up with a working template? This “enhancement” has completely hosed our processes and is taking way too much time to enter each line verses just doing a paste insert as we’ve done for years.

We also ran into this breaking change.

I wrote a BPM that will force an account entered in the BankTran.GLAccount field to be set instead of the default account. Now we can use paste new like we did before.

This is a Post Processing BPM on BankAdjEntry.Update.
Add a reference to Erp.Contracts.GLAccount

foreach (var row in ds.BankTran.Where(o => string.IsNullOrEmpty(o.GLAccount) == false).ToList())
{
    // Set dataset
    var dataSet = ds;

    // Get BankTranGLDistTGLC
    var bankTranGLDistTGLC = dataSet.BankTranGLDistTGLC.FirstOrDefault(o => o.Company == row.Company && o.RelatedToFile == "BankTranGLDist" && o.BankAcctID == row.BankAcctID && o.TranNum == row.TranNum);

    // Get GL account desc
    var display = default(string);
    var description = default(string);
    this.CallService<GLAccountSvcContract>(bo => bo.GetGLAcctDispAndDesc(bankTranGLDistTGLC.COACode, row.GLAccount, "", false, "", out display, out description));

    // Get BankTranGLDist
    var bankTranGLDist = dataSet.BankTranGLDist.First();

    // Create copy of original row; 
	var originalRow = dataSet.BankTranGLDist.NewRow();
	BufferCopy.Copy(bankTranGLDist, originalRow);
	dataSet.BankTranGLDist.Add(originalRow);
    
    // Set properties
    bankTranGLDist.GLAccount = display;
    bankTranGLDist.GLAccountDesc = description;
    bankTranGLDist.RowMod = "U";

    // Create copy of original row; 
	var originalRow2 = dataSet.BankTranGLDistTGLC.NewRow();
	BufferCopy.Copy(bankTranGLDistTGLC, originalRow2);
	dataSet.BankTranGLDistTGLC.Add(originalRow2);

    // Set properties
    bankTranGLDistTGLC.GLAccount = display.Replace("-", "|");
    bankTranGLDistTGLC.GLAccountAccountDesc = description;
    var accountSplit = bankTranGLDistTGLC.GLAccount.Split("|");
    bankTranGLDistTGLC.SegValue1 = accountSplit.ElementAtOrDefault(0);
    bankTranGLDistTGLC.SegValue2 = accountSplit.ElementAtOrDefault(1);
    bankTranGLDistTGLC.SegValue3 = accountSplit.ElementAtOrDefault(2);
    bankTranGLDistTGLC.IsModifiedByUser = true;
    bankTranGLDistTGLC.RowMod = "U";
    
    // Don't need BankTran for next update
    dataSet.BankTran.Clear();

    // Call update
    this.CallService<BankAdjEntrySvcContract>(bo => bo.Update(ref dataSet));
}