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