24.11.2005, 13:24 | #1 |
Участник
|
Проверка на передачу пустого параметра в макрос
Добрый день. Необходимо в зависимости от того, нужно или нет фильтровать проводки по складу, изменять запрос по проводкам. Возьмем самый простейший пример:
static void Job1(Args _args) { #macrolib.InventABC InventTrans inventTrans; InventDim inventDim; InventLocationId location = 'Ск2'; ; while select inventTrans { print inventTrans.ItemId; } pause; } Решила реализовать данную задачу с использованием макроса, который будет подставлять в запрос либо Join с таблицей InventDim, либо ничего. Написанный макрос выглядит следующим образом: /* %1 InventTrans, CustInvoiceTrans...*/ /* %2 InventLocationId */ #localmacro.InventABCDim #ifnot.empty(%2) join tableId from InventDim index hint DimIdIdx where (InventDim.InventDimId == %1.InventDimId) && (InventDim.InventLocationID == %2) #endif #endmacro Но он не в полной мере меня устраивает. Если вызвать макрос с обеими заполненными параметрами, то печатаются все проводки по данному складу, все ок. Если второй параметр не указывать - печатает все проводки. Если в качестве второго параметра задать пустую строку, то, естественно, выводятся все проводки, у которых склад не задан. Мне же в этом случае необходимо, как и в случае с незаданным параметром "%2", выводить все проводки. Есть ли в макросах, наряду с проверкой #ifnot.empty(%2) возможность проверки, что параметр передан, но он пустой (в случае строки) либо нулевой (в случае числа)? Не хочется в коде плодить лишние условия, ветки, дублировать запрос и т.д. Хотелось бы реализовать все красиво и одной строкой вида: while select inventTrans #InventABCDim(inventTrans, location) только не получается как-то сделать обработку условия, что переменная location - пустая (склад не указан). Возможно, решение совсем простое, только я его не вижу... Может, кто-то знает, как это реализовать? |
|