Axe 2012 - альтернативы прямым SQL-запросам
Я использую прямой запрос SQL в качестве источника данных моего отчета SSRS:
SELECT
emp.EmployeeNumber, FirstName, LastName, MiddleName
, amts.AmountCode, amts.amt, amts.AmountType
from EmployeeMaster emp
LEFT OUTER JOIN
(
SELECT 'Earning' as AmountType, EmployeeNumber, EarningCode as AmountCode
, SUM(Amount) AS amt
FROM EmployeeEarnings GROUP BY EmployeeNumber, EarningCode
UNION ALL
SELECT 'Deduction', EmployeeID, DeductionID
, SUM(Amount) AS amt FROM EmployeeDeduction GROUP BY EmployeeID, DeductionId
) AS amts
ON emp.EmployeeNumber = amts.EmployeeNumber
Этот запрос собирает все доходы и отчисления на сотрудника, сгруппированные по номеру сотрудника, типу заработка и типу отчислений. Я не уверен, смогу ли я сделать это в x++ или запросе AOT. Мне интересно, если это нормально, или есть альтернатива для получения результата, как этот запрос? Я использую класс RDP.
2 ответа
Вложенные объединения не поддерживаются в AX. Однако вы можете сделать единый взгляд на EmployeeEarnings
а также EmployeeDeduction
, Затем вы можете выбрать EmployeeMaster
и внешнее соединение с видом, чтобы получить тот же результат.
Ваш SQL неверен, так как не считает dataAreaId
а также Partition
,
Да, вложенные объединения не поддерживаются в AX. Да, вы можете сделать вид. И вы можете использовать ResultSet
класс, чтобы получить результат sqlStatement
с прямым SQL-запросом через SQLconnection
,
Некоторое время назад я создал класс-оболочку https://github.com/mazzy-ax/SysResultSet. Комментарии только на русском языке. Сожалею. Проект для импорта в ax2012 https://github.com/mazzy-ax/SysResultSet/blob/ax2012/AOT/Classes/Class_SysResultSet.xpo
Это упрощает работу с прямым SQL-запросом. Попробуйте, если знаете, что делаете.
И, да, ваш SQL неверен, так как не учитывает dataAreaId
а также Partition
, Кроме того, ваш SQL-запрос игнорирует Axapta XDS (безопасность на уровне записей) и подсистему безопасности Axapta. Я думаю, что запрос AOT более адекватен.