Sorry for the delayed response. Here is the code.
public Counter numOfVouchers()
{
SqlSystem sqlSystem = new SqlSystem();
SysDictTable journalTransTable = new SysDictTable(tableNum(LedgerJournalTrans));
FieldName voucherField = journalTransTable.fieldName(fieldNum(LedgerJournalTrans, Voucher));
FieldName journalNumField = journalTransTable.fieldName(fieldNum(LedgerJournalTrans, JournalNum));
FieldName dataAreaField = journalTransTable.fieldName(fieldNum(LedgerJournalTrans, DataAreaId));
FieldName partitionField = journalTransTable.fieldName(fieldNum(LedgerJournalTrans, Partition));
str sql = 'select count(distinct %1) from %2 where %3 = %4 and %5 = %6 and %7 = %8';
sql = strFmt(sql,
voucherField,
journalTransTable.name(),
journalNumField,
sqlSystem.sqlLiteral(this.JournalNum),
dataAreaField,
sqlSystem.sqlLiteral(this.DataAreaId),
partitionField,
getcurrentpartitionrecid());
SqlStatementExecutePermission permission = new SqlStatementExecutePermission(sql);
permission.assert();
//Setup the connection needed to send the command to SQL Server.
Connection userConnection = new Connection();
Statement stmt = userConnection.createStatement();
ResultSet sqlres = stmt.executeQueryWithParameters(sql, SqlParams::create());
CodeAccessPermission::revertAssert();
//Select queries record
sqlres.next();
return sqlres.getInt(1);
}
And yes, I agree the same that Mohamed said can be achieved through group by.
I am just curious why did Microsoft went with an SQL query when the same can be done through x++ select statements.