-    qq|SELECT 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, c.gifi_accno, g.notes, t.chart_id, ac.oid
-                 FROM gl g, acc_trans ac, 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 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, c.gifi_accno, a.notes, t.chart_id, ac.oid
-                FROM ar a, acc_trans ac, 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 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, c.gifi_accno, a.notes, t.chart_id, ac.oid
-                FROM ap a, acc_trans ac, 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 transdate, trans_id, taxkey DESC, oid|;
+    qq|SELECT
+        ac.oid AS acoid, 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, ac.oid
+        $project_columns
+      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.oid AS acoid, 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, ac.oid
+        $project_columns
+      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.oid AS acoid, 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, ac.oid
+        $project_columns
+      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 transdate, trans_id, acoid, taxkey DESC|;
+
+  my @values = (@glvalues, @arvalues, @apvalues);