Я так думаю, что для условной компиляции можно поискать какой-нибудь определенный макрос, который есть в четверке и нет в трешке. Например, макрос из #AOT - #define.ReferencesPath('\\References').
Что-то типа
X++:
static void Job1(Args _args)
{
;
#AOT
#if.ReferencesPath
info("Axapta 4.0");
#endif
#ifnot.ReferencesPath
info("Axapta 3.0");
#endif
}
А так, для условных переходов можно использовать класс ApplicationVersion.