Показать сообщение отдельно
Старый 24.11.2005, 13:24   #1  
vey is offline
vey
Участник
 
60 / 12 (1) ++
Регистрация: 15.03.2005
Адрес: Киев
Проверка на передачу пустого параметра в макрос
Добрый день. Необходимо в зависимости от того, нужно или нет фильтровать проводки по складу, изменять запрос по проводкам. Возьмем самый простейший пример:


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 - пустая (склад не указан). Возможно, решение совсем простое, только я его не вижу... Может, кто-то знает, как это реализовать?