AX 2009: диапазон отчетов для перечислений перечисления запятые значения перечисления? - PullRequest
2 голосов
/ 02 апреля 2012

Я думаю, что, возможно, нашел интересную ошибку в AX 2009, и я не уверен, как мне поступить.

Я пытаюсь написать новый отчет, и одно из условий этого отчета должно быть отфильтровано на основе поля Posting таблицы LedgerTrans. Однако, похоже, что когда отчет идет на выполнение, метка перечисления Purchase, receipt анализируется без учета кавычек. Обычно это не будет проблемой, но метка enum в этом случае содержит запятую. В результате при запуске диалогового окна запроса отображается: Purchase, consumption, __ILLEGAL_VALUE__. Я получаю этот результат, даже если я использую значение или имя перечисления. Отчет должен оставаться интерактивным, но это поле должно быть заблокировано, поэтому мы не можем заставить пользователей корректировать запрос во время выполнения.

На данный момент я не хочу менять сам ярлык, но если это единственный способ решить это, я сделаю это. Кто-нибудь еще сталкивался с этим или знает, как мы могли бы преодолеть это?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2012

Я сталкивался с этим раньше.Иногда приемлемым вариантом является жесткое кодирование условных значений в виде оператора ИЛИ, а не списка, разделенного запятыми:

((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) || (LedgerTrans.Posting == LedgerPostingType::PurchConsump))

, который можно ввести в поле фильтра диапазона или установить в качестве значениядиапазон через код x ++:

ledgerPostingRange.value("((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) ||
                           (LedgerTrans.Posting == LedgerPostingType::PurchConsump))");

AX не пытается преобразовать их в метки, поэтому они остаются в виде отдельных значений, а не выводятся как метки.Обратите внимание, что скобки необходимы для его правильного анализа.

Поскольку ILLEGAL_VALUE может появляться даже при попытке использовать одно значение, которое содержит запятую в метке, то же самое можно сделатьдля одного:

ledgerPostingRange.value("(LedgerTrans.Posting == LedgerPostingType::PurchReceipt)");
0 голосов
/ 03 апреля 2012

Я бы определенно поменял этикетку!Но в качестве обходного пути вы могли бы вместо этого использовать номер значения перечисления.

Если поле часто запрашивается, вы можете поместить поле в диалоговое окно, а затем изменить запрос:

 ledgerPostingRange.value(ledgerPostingType ? int2str(ledgerPostingType) : '');
...