+ $query =
+ qq|SELECT
+ ac.acc_trans_id, g.id, 'gl' AS type, $false AS invoice, g.reference, ac.taxkey, c.link,
+ g.description, ac.transdate, ac.source, ac.trans_id,
+ ac.amount, c.accno, g.notes, t.chart_id
+ $project_columns
+ $columns_for_sorting{gl}
+ FROM gl g, acc_trans ac $project_join, chart c
+ LEFT JOIN tax t ON (t.chart_id = c.id)
+ WHERE $glwhere
+ AND (ac.chart_id = c.id)
+ AND (g.id = ac.trans_id)
+
+ UNION
+
+ SELECT ac.acc_trans_id, a.id, 'ar' AS type, a.invoice, a.invnumber, ac.taxkey, c.link,
+ ct.name, ac.transdate, ac.source, ac.trans_id,
+ ac.amount, c.accno, a.notes, t.chart_id
+ $project_columns
+ $columns_for_sorting{arap}
+ FROM ar a, acc_trans ac $project_join, customer ct, chart c
+ LEFT JOIN tax t ON (t.chart_id=c.id)
+ WHERE $arwhere
+ AND (ac.chart_id = c.id)
+ AND (a.customer_id = ct.id)
+ AND (a.id = ac.trans_id)
+
+ UNION
+
+ SELECT ac.acc_trans_id, a.id, 'ap' AS type, a.invoice, a.invnumber, ac.taxkey, c.link,
+ ct.name, ac.transdate, ac.source, ac.trans_id,
+ ac.amount, c.accno, a.notes, t.chart_id
+ $project_columns
+ $columns_for_sorting{arap}
+ FROM ap a, acc_trans ac $project_join, vendor ct, chart c
+ LEFT JOIN tax t ON (t.chart_id=c.id)
+ WHERE $apwhere
+ AND (ac.chart_id = c.id)
+ AND (a.vendor_id = ct.id)
+ AND (a.id = ac.trans_id)
+
+ ORDER BY $sortorder, acc_trans_id $sortdir|;
+
+ my @values = (@glvalues, @arvalues, @apvalues);
+
+ # Show all $query in Debuglevel LXDebug::QUERY
+ my $callingdetails = (caller (0))[3];
+ dump_query(LXDebug->QUERY(), "$callingdetails", $query, @values);
+
+ $sth = prepare_execute_query($form, $dbh, $query, @values);
+ my $trans_id = "";
+ my $trans_id2 = "";
+ my $balance;