1) Если не обрабатываете это если
Если Выборка.Количество() > 0 Тогда
То оно и не нужно, оставьте только
Пока Выборка.Следующий() Цикл
По поводу параметров, есть такой костыль
И Курсы.ВидКурса = &ПарамВидКурса
Меняем на
И &ПарамВидКурса
Дальше
Если ЗначениеЗаполнено(ВидКурса) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"&ПарамВидКурса","Курсы.ВидКурса = &ПарамВидКурса")
Запрос.УстановитьПараметр("ПарамВидКурса", ВидКурса);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст,"&ПарамВидКурса","Истина")
КонецЕсли
Так можно по каждому.