Метод прост и достаточно эффективен.
Суть решения: разложить фразу, состоящую из нескольких слов на отдельные слова, и просклонять каждое из них отдельно.
Ниже привожу пример кода.
ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);
.......................................
................................
....................................
Функция ПросклонятьФразуПоСловам(Знач ИсходнаяСтрока, Падеж) Экспорт
Результат = "";
ИсходнаяСтрока = СокрЛП(ИсходнаяСтрока);
Если СтрДлина(ИсходнаяСтрока) = 0 Тогда
Возврат Результат;
КонецЕсли;
Поз = Найти(ИсходнаяСтрока, " ");
Пока Поз > 0 Цикл
СловоВПадеже = "";
Слово = Лев(ИсходнаяСтрока, Поз-1);
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), Слово, Падеж, , СловоВПадеже);
Результат = СокрЛП(Результат + " " + НРег(СловоВПадеже));
ИсходнаяСтрока = СокрЛП(Сред(ИсходнаяСтрока, Поз));
Если ПустаяСтрока(ИсходнаяСтрока) Тогда
Прервать; // Это перестраховка. Цикл и так должен прерваться
КонецЕсли;
Поз = Найти(ИсходнаяСтрока, " ");
КонецЦикла;
Если НЕ ПустаяСтрока(ИсходнаяСтрока) Тогда // добавляем заключительное слово
СловоВПадеже = "";
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ИсходнаяСтрока, Падеж, , СловоВПадеже);
Результат = СокрЛП(Результат + " " + НРег(СловоВПадеже));
КонецЕсли;
Возврат Результат;
КонецФункции // ПросклонятьФразуПоСловам()