For starters, I'd put your items in a table of related records that list on your main invoice form inside a portal. Then a list type report printed from this table (where each items is a single record) won't have the issue you are dealing with.
one technique for what you describe is a calc as follows (it ignores blank fields and substitutes of commas with a space after the comma)
Substitute ( List ( field1 ; field2 ; field3 ; and so on... ) ; "¶" ; ", " ) )
This could be scripted or unstored in your db.
sorry, calc should read
Substitute ( List ( field1 ; field2 ; field3 ; and so on... ) ; "¶" ; ", " )
- had one extra parenthesis