Причина проста. В классе sysSaveSetup в методе Pack() есть такой вызов
X++:
return setupRunForm.design().packUserSetting();
При этом в нем происходит генерация эксепшена Exception::Warning (судя по всему, просто вызов trow Exception::Warning; ).
По-этому происходит вываливание из метода SysSetupFormRun.saveUserSettings() без вызова super().
В принципе, для обхода этой проблемы достаточно просто обрабатывать эксепшен. Единственно, придется править системные классы (SysSetupFormRun или sysSaveSetup).
Почему вызывается эксепшен сказать не могу, пока не разобрался
PS Разобрался.
В общем, ошибка вызвана режимом отладки. Когда в форме стоит брейкпойнт не грузятся и не сохраняются пользовательские настройки. Но, при этом, метод design().hasUserSettings() возвращает TRUE. При вызове design().packUserSettings() происходит вызов эксепшена WARNING.
Достаточно просто убрать точки останова из формы и вставить, к примеру, в перекрытом saveUserSettings() info, чтобы убедиться, что метод вызывается нормально
PPS В четверка это проблема не воспроизводится. Там пользовательские настройки работают и с брейкпойнтами