Используйте функцию List()
:
List(
Address Line 1;
Address Line 2;
Substitute( List( Sity, Upper( State ); ZIP ); "¶"; " " );
Country ) )
Идея в том, что функция List()
игнорирует пустые значения, поэтому вам не нужно проверять, являются ли они пустыми или нет. С адресными строками он автоматически игнорирует пустые места; с помощью строки sity-state-ZIP вы получите правильный список, и все, что вам нужно сделать, это заменить разделитель.
Если вы используете FM Advanced, определите пользовательскую функцию для объединения списка с указанным разделителем:
/* Join( separator; list *) */
Substitute( list; "¶"; separator )
Это упростит задачу.