|
![]() |
#1 |
Участник
|
Цитата:
str to X++ Упс. не посмотрел, что та тема тоже ваша ![]() ![]() Последний раз редактировалось S.Kuskov; 26.02.2010 в 08:21. |
|
![]() |
#2 |
Участник
|
Немного изменилась задача: не просто передать параметр, а передать так чтобы можно было его значение сравнить при помощи синтаксиса макроса (#IF.ARG() или что то подобное)
Вот этот job не выдает сообщение. Но если вызвать так: #cycle(AccountNum,1) то info() jотрабатывает. Может быть пользуюсь не правильным условием? X++: static void Job1(Args _args) { CustTable CustTable; AccountNum AccountNum = "Клиент1"; int int1 = 1; ; #localMacro.cycle #DEFINE.ARG(%2) while select * from CustTable where CustTable.AccountNum == %1 { #IF.ARG(1) info (CustTable.AccountNum); #ENDIF } #UNDEF.ARG #endMacro #cycle(AccountNum,int1) } |
|
![]() |
#3 |
Участник
|
Дело не в условии. Дело в том, что абсолютно все макроподстановки выполняются на этапе компиляции (где, как вы сами понимаете значение переменных ещё не определено). Хотите runtime - используйте подпрограммы.
Цитата:
X++: if ((%2) == 1) |
|
|
За это сообщение автора поблагодарили: Gustav (3). |
![]() |
#4 |
Участник
|
Цитата:
Второй же параметр попадая в условие #IF.ARG(1) Сравнил как кусок кода, а не как значение параметра. Зачем? вопрос чисто теоретический, понятно, что я могу сделать и по-другому но просто интересно. Версия Ax 4.0 sp2 |
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Moderator
|
Цитата:
Измените тип переменной AccountNum и посмотрите, что получится: X++: str AccountNum = "Клиент1"; // AccountNum AccountNum = "Клиент1"; Еще иллюстрация. Верните всё обратно, после чего внесите такие изменения: X++: AccountNum AccountNum = "Клиент1"; .................. while select * from CustTable // where CustTable.AccountNum == %1 where CustTable.AccountNum %1 .................. //#cycle(AccountNum,int1) #cycle(== AccountNum,int1) } |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от Gustav
![]() Не-а. Именно КУСОК КОДА - грубо говоря, фрагмент текста программы вида "AccountNum".
Измените тип переменной AccountNum и посмотрите, что получится: X++: str AccountNum = "Клиент1"; // AccountNum AccountNum = "Клиент1"; Для исправления ошибки досточно всего-лишь явно задать размерность символьной переменной X++: str 10 AccountNum = "Клиент1"; |
|
|
За это сообщение автора поблагодарили: Gustav (2). |
![]() |
#8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Gustav (2). |
![]() |
#9 |
Участник
|
может быть вы пользуетесь неправильной постановкой задачи? какова исходная цель работы? не с технической точки зрения, а с функциональной, пользовательской ?
Налицо также непонимание вами что такое "макроподстановка". Это не процедура и не метод класса. Это подстановка части кода при компиляции. Последний раз редактировалось Bober; 26.02.2010 в 11:06. |
|