В теме обсуждения, абстрагируясь от макросов, стоит задача написать универсальный запрос в одну конструкцию, которая бы корректно учитывала значения параметров из условий запроса. Это есть прямая необходимость при построении конструкции запроса использовать логику более высшего уровня, чем предлагает X++ в аспекте работы с данными like SQL. Т.е., очевидно, что тут необходимо конструировать структуру запроса программно. Если уж необходимость в таких "умных" запросах возникает часто, то прямой путь - абстрагировать логику.
Бла-бла-бла
Короче, по моему мнению надо делать метод без макросов (м.б. и статический), который в зависимости от переданных параметров возвращает курсор(ы). Далее по ним бежать next-ом.
Что-то типа:
X++:
cursor = getMySmartCursor(inventTrans, location);
do
{
if (cursor) ...
.....
next cursor;
} while (cursor);
и вызывать его одинаковым образом в коде. При этом логика выделена, при изменениях требуется модификация только одного метода, а внутри него можно хоть вавилонские башни строить.Это уже по желанию.
Как актуален и свеж мой комментарий в 2013 году. 8 лет я готовился к этому...