Bzgl. des Trims hast du natürlich Recht.
Wenn das Zielfeld nicht vom Typ varying ist, muss das Ziel eben auch immer getrimmt werden.

Einfacher gehts per:

D MyCsvField 100 varying

clear MyCsvField;

dow bla;
MyCsvField += %trimr(MySourceField) + ";";
enddo;

Wofür brauchst du noch das Schreibmodul?
Warum machst du das nicht direkt im selben Modul?

CLOSQLCSR betrifft den SQL-Cursor, den es ja nur beim Select mit "Declare Cursor" gibt.
Das hätte den Vorteil, das der geöffnete Cursor beim Wiedereintritt ins Modul weitere Daten liefern könnte (z.B. Scrollcursor für seitenweise Blätteranzeigen).
Das hat fatale Auswirkungen wenn man SQL per OVRDBF austrickst, da ja die 1. Datei offen bleibt auch wenn man den OVRDBF ändert.

Dies hat nichts (bzw. nur indirekt) mit den OOP's zu tun.
SQL optimiert dahingehend, dass der einmal ermittelte Zugriffsweg beim 2. Auftreten geöffnet bleibt.
Somit entfällt das Analysieren, Optimieren und Öffnen der Tabelle/n.
Beim Verlassen einer ACTGRP werden die OOP's dann aber doch alle geschlossen, so dass hier ACTGRP(*NEW) ggf. kontraproduktiv ist.