Требуется функция склонения ФИО
Кто как это делает? Подскажите наиболее удачный вариант.
А может у кого-нибудь в "загашнике" есть рабочий код.
Поделитесь пожалуйста.
---
Ещё есть на ИТС Компонента "Склонение ФИО" предназначен для склонения фамилии, имени и отчества на русском языке.
В макет с типом двоичные данные помещается архив NameDecl.zip
После этого можно непосредственно обращаться к компоненте:
Обработка.Обработка1.Макет.КомпонентаСклоненияФИО

```1c
    Функция ПросклонятьФИО(ФИО, Падеж)

    //Компонента в макете обработки
    Адрес = "Обработка.Обработка1.Макет.КомпонентаСклоненияФИО";

    //ИЛИ

    //Компонента в общем макете
    Адрес = "ОбщийМакет.Макет";

    //ИЛИ

    //Для внешней обработки, макет обязательно должен быть помещен во временное хранилище
    Макет = ПолучитьМакет("Макет");
    Адрес = ПоместитьВоВременноеХранилище(Макет, Новый УникальныйИдентификатор);

    Попытка
    ПодключитьВнешнююКомпоненту(Адрес, "NameDecl", ТипВнешнейКомпоненты.Native);
    Объект = Новый("AddIn.NameDecl.CNameDecl");
    Исключение
    Сообщить("Не удалось подключить внешнюю компоненту: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Объект.Просклонять(ФИО, Падеж);

    КонецФункции
```
---
Вот функции.

```1c
    Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
    z5=Найти(z1,"-");
    z6=?(z5=0,","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));
    z1=НРег(?(z5=0,z1,Лев(z1,z5-1)));
    z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
    z5=СтрДлина(z1);
    za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
    zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
    zc=Макс(z2,-z2);
    zd=?(za=4,5,Найти("айяь",z9));
    zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч",","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
    ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
    zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,",?(ze<12,"ь"+?(ze=1,"ц","),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
    zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>"),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
    Возврат ?("=z1,",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
    КонецФункции

    Функция Падеж(Знач z1,Знач z2=2,Знач z3=3,z10=0) Экспорт

    z1=СтрЗаменить(СокрЛП(СтрЗаменить(НРег(СокрЛП(z1)),".",". "))," "," ");

    z3=Сред("ча"+Прав(z1,1),z3,1);
    z4=Найти(z1+" "," ");

    //участок преобразования фамилия имя отчество --> Фамилия Имя Отчество
    z5=z4+Найти(Сред(z1+" ",z4+1)," ");
    z1=?(z10<0,z1,ВРег(Лев(z1,1))+Сред(z1,2,z4-1)+Врег(Сред(z1,z4+1,1))+Сред(z1,z4+2,z5-z4-1)+ВРег(Сред(z1,z5+1,1))+Сред(z1,z5+2,СтрДлина(z1)-z5));
    z5=Лев(z1,z4-1);z6=Прав(z5,3);z7=Прав(z6,2);z8=Прав(z7,1);

    z5=?((z2=1)или(Найти("оеиую",z8)+Найти("аа еа ёа иа оа уа ыа эа юа яа",z7)<>0),z5,?((z3="а")или(z3="ы"),?((z8="а")и(z6<>"ула")или(z7="ая"),ПадежС(z5,z2,"1"),z5),?((Найти("ой ый ий",z7)>0)и(z6<>"Цой"),Лев(z5,z4-3)+СокрП(Сред("огоомуого"+?((z7="ий")или(Найти("гой хой",z6)>0),"и","ы")+"м ом егоемуегоим ем",?(Найти("чшщ",Лев(z6,1))>0,15,0)+z2*3-5,3)),ПадежС(z5,z2,"2"))));
    z8=z4+Найти(Сред(z1+" ",z4+1)," ");
    z8=?((z3="ч")и(z4=СтрДлина(z1)+1),ПадежС(z1,z2),z5)+" "+ПадежС(Сред(z1,z4+1,z8-z4-1),z2,z3,1)+" "+ПадежС(Сред(z1,z8+1,СтрДлина(z1)-z8),?(z3="ы",?(z2<0,-1,1),z2),z3,1);

    Возврат?(z10<1,z8,Сред(z8,Найти(z8+" "," ")+1)+" "+Лев(z8,Найти(z8+" "," ")-1))
    КонецФункции

    Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт

    z1=Нрег(СокрЛП(z1));z4=Найти(z1,"-");z1=СтрЗаменить(z1,"-"," ");z5=Найти(z1+" "," ")+1;z6=Лев(z1,z5-2);
    z7=?((Найти("ая ий ый",Сред(z1,z5-3,2))>0)и(Сред(z1,z5-5,4)<>"ющий")и(z3=0),"1","*");
    z1=?((Сред(z1,z5-3,2)="ая")или(Сред(z1,z5-2,1)="а"),ПадежС(z6,z2,z7)+" "+ПадежС(Сред(z1,z5),z2),Падеж(z6,z2,3,-1) + ?((Сред(z1,z5-3,2)="ий")и(Найти(z1," ")=0),",?(((z3>1)или(z4>0)или(z7="1")),ПадежП(Сред(z1,z5),z2,?(z7="1",?(z4>0,2,1),0)),Сред(z1,z5))));
    z5=Найти(Сред(z1,z4)," ")+z4;

    Возврат?(z4>0,Лев(z1,z5-2)+"-"+СокрЛ(Сред(z1,z5)),z1);

    КонецФункции
```

Либо попробуйте использовать внешнюю компоненту: padeg.dll
---
Даже странно, что по такой избитой теме создаются новые ветки, да еще с вознаграждением.

Вот свежий пример: http://forum.infostart.ru/forum86/topic157094/message1617193/#message1617193
---
Ещё есть на ИТС Компонента "Склонение ФИО" предназначен для склонения фамилии, имени и отчества на русском языке.
В макет с типом двоичные данные помещается архив NameDecl.zip
После этого можно непосредственно обращаться к компоненте:
Обработка.Обработка1.Макет.КомпонентаСклоненияФИО

```1c
    Функция ПросклонятьФИО(ФИО, Падеж)

    //Компонента в макете обработки
    Адрес = "Обработка.Обработка1.Макет.КомпонентаСклоненияФИО";

    //ИЛИ

    //Компонента в общем макете
    Адрес = "ОбщийМакет.Макет";

    //ИЛИ

    //Для внешней обработки, макет обязательно должен быть помещен во временное хранилище
    Макет = ПолучитьМакет("Макет");
    Адрес = ПоместитьВоВременноеХранилище(Макет, Новый УникальныйИдентификатор);

    Попытка
    ПодключитьВнешнююКомпоненту(Адрес, "NameDecl", ТипВнешнейКомпоненты.Native);
    Объект = Новый("AddIn.NameDecl.CNameDecl");
    Исключение
    Сообщить("Не удалось подключить внешнюю компоненту: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Объект.Просклонять(ФИО, Падеж);

    КонецФункции
```
---
Спасибо! Очень оперативно.
Указали направление для дальнейших изысканий.
---
```1c
    Функция СклонениеМорферРП(Элемент)
    Попытка
    ОпределениеМорфер = Новый WSОпределения("http://morpher.ru/WebService.asmx?WSDL");
    Морфер = Новый WSПрокси (ОпределениеМорфер,"http://morpher.ru/","WebService","WebServiceSoap");
    Исключение
    Сообщить("Не удалось загрузить внешнюю компаненту по причине: " + ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    Результат = Морфер.GetXml(Элемент);
    Результат = Результат.Р;
    Возврат Результат;
    КонецФункции
```
---
http://www.superjur.narod.ru/padeg20110728.rar