Имя: Пароль:
1C
 
Поделитесь функцией склонения ФИО плиз (7.7)
,
0 Skom
 
16.12.08
10:12
плиз. срочна надо, думать некада.
1 lea_220400
 
16.12.08
10:13
(0) поищи, у кого-то были готовые решения здесь на мисте
2 lea_220400
 
16.12.08
10:13
точно не помню, у кого, но мелькало не раз
3 IamAlexy
 
16.12.08
10:13
на инфостарте множество вариантов
4 IamAlexy
 
16.12.08
10:14
5 IamAlexy
 
16.12.08
10:14
6 Skom
 
16.12.08
10:29
пасиба...скачал (4)
7 Cthulhu
 
16.12.08
10:29
даже так:
// (c) Jurer Production Begin ( Start )
// В случае, если программа окажется для Вас полезной, и Вы представляете только свои интересы, а не интересы фирмы,
// автор будет весьма признателен, если Вы перечислите ему некую сумму на Ваше усмотрение (автор будет благодарен любым инициативам).
// Для этого через сбербанк перечислите N-ую сумму на следующий счет:
//филиал 8606/018 Рязанское ОСБ № 8606 СБ РФ г.Рязань РЕКВИЗИТЫ: ИНН 7707083893КОР.СЧЕТ 30101810500000000614 БИК 046126614
//ДЛЯ ПЕРЕЧИСЛЕНИЙ ВО ВКЛАД ФИЗИЧ.ЛИЦ – 47422810453009902100 НОМЕР СБЕРКНИЖКИ:  42301810953002115714/01  Железняков Юрий Юрьевич
// __________________________________________________________________
//                           SuperJur.Narod.Ru
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ SuperJur _ _ _ _ _ _ _ _ _ _ _ _ _ _
// __________________________________________________________________
// Удаление этих строк незнаконно!
// Гарантия 92 года и 3 месяца!!!
// Послегарантийное обслуживание - бесплатно!!!
// Круглосуточная поддержка - все 48 часов в бою!
// Ссылка на источник обязательна!
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы.
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!!

// !№№!
// !51! нашла и прекрасно воплотилась в жизнь рекурсия в функции падеж
//      , так же изменился тип четвертого параметра - теперь это строка,
//      благодря всему этому, удалось ужать код до одной строчки!!! ИМХО, это великолепно:
// ?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(Лев(z1,Найти(z1+" "," ")-1),z2,Сред("ча"+НРег(Прав(z1,1)),z3,1),z5)+" "),z5+1),z4);
//    при случае попытайтесь понять, как она - эта рекурсия здесь работает
//     - только, самое главное, не зависните - это же рекурсия, а не  фиг с маслом.

// !50! П:Ответственный за электрохозяйство  Ф:Ацута Груша  И:Патимат Саманият Написат Каламкан Лууле Седа Цыбен Инесе Витаутас  
//      составные существительные
// !49! Программист - это звучит гордо.
// !48! исправлена ошибка при склонении фамилий (спасибо, Mario).
// !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев).
// !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или все сразу в нужном падеже
//      задав его равным 9 из фио получим иоф
// !45! Боровец + Коломыец + Боровской + Кусок + Молодец
// !44! выправил ещё что-то
// !43! составные фамилии
// !42! Осел + Соловей + Воробей + Немец
// !41! отчества оканчивающиеся на "ы" считаются женскими ?
// !40! Кормилец + Силиец
// !39! что-то подправил - вроде бы фамилии на -ий для z2=-1 неправильный был возврат.
// !38! оптимизация кода - баги
// !37! добавлена новая функция, специально предназначенная для склонения профессий
// !36! добавлен новый входной параметр
// !35! равнодушие к регистрам
//        1       2                       3           4  
//        12345678901234567890123456789012345678901234567
Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
 z12=Найти(z1,"-");z11=?(z12=0,"","-"+ПадежС(Сред(z1,z12+1,СтрДлина(z1)-z12+1),z2,z3,z4));z1=?(z12=0,z1,Лев(z1,z12-1));//под составные слова
 z2=?((z4>0)и(z12>0),1,z2);
 z12=СтрДлина(z1);
 z1=НРег(?((z2<0)и(z4>1)и(z1<>""),Лев(z1,1)+".",z1));
 z2=?((z4=2)и(Найти("ллу йти али аги ржи оте хъе лло джи амо юло тди аво эне лоу лло узи асу хру аки мбо ади дзи ибо рмо пти изо ари рво йно тне али жан тай мат ият сат кан уле бен есе тас",Прав(z1,3))>0),1,Макс(z2,-z2));
 z2=?((z4=1)и(Найти("мия мяэ лия кия жая лея",Прав(z1,3))>0),1,Макс(z2,-z2));
 z5=Прав(z1,3);
 z90=Прав(z5,2);
 z10=Прав(z90,1);
 z6=Найти("ая ия ел ок яц ий па да ца ша ба та га",z90);
 z7=?(z4=1,?(Найти("оеиую",z10)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z90)>0,-1,?((z3="а")или(z3="ы"),?((z10="а")и(z5<>"ула")или(z6=1),?(z6=1,8,?(z6>18,3,9)),-1),?((Найти("ой ый ий",z90)>0)и(z12>4),10,0))),0);
 z7=?(z7=0,?(z6=2,7,Найти(".чайяь",z10)), z7);
 z8=Найти("лец вей дец пец мец нец рец вец аец иец ыец бер бей",z5);
 z9=?((z7=10)и(z2<>5),?(Найти("чшщ",Лев(z5,1))+Найти("жий",z5)>0,"е" ,"о" ),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z12-3 ,1))+Найти("аеёийоуэюя",Лев(z5,1))=0)и(z8<>41),"",?(z6=7,"л",?(z6=10,"к",?(z6=13,"йц",?(z8=0,"",?((z8<9)или(z8=49),"ь"+?(z8=1,"ц",""),?(z8<33,"ц",?(z8<45,"йц","р"))))))))));
 z9=?((z2=1)или(z7<0)или((z4=3)и(z3="ы")или(""=z1)),z1,Лев(z1,z12-?((z7=8)или(z9<>"")или(z7=10),2,?(z7>2,1,0)))+z9+СокрП(Сред("а у а "+Сред("оыыыоео",Найти(" внтчц",z10)+1,1)+"ме           а у а еме "+?(Найти("гжкхш",Лев(z90,1))>0,"и","ы")+" е у ойе я ю я ем"+?(z6=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойуюойойойойу ойойгомуго"+?((z9="е")или(z6=16)или(Найти("гой хой кой",z5)>0),"и","ы")+"мм",10*?((z7=6)и(z3="ч"),4,z7)+2*z2-3,2)));
Возврат ?(z4>0,ВРег(Лев(z9,1))+Сред(z9,2),z9)+z11;
КонецФункции
//_____________________________________________________________________________
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич
// z2 - Падеж ( по  умолчанию = 2 - родительный)
// 2 - родительный  ( нет кого?    ) Железнякова Юрия Юрьевича    
// 3 - дательный    ( кому?        ) Железнякову Юрию Юрьевичу
// 4 - винительный  ( вижу кого?   ) Железнякова Юрия Юрьевича  
// 5 - творительный ( кем?         ) Железняковым Юрием Юрьевичем    
// 6 - предложный   ( о ком?       ) Железнякове Юрии Юрьевиче
// Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с
// инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром  1 - мужской 2 - женский  
// ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// ---------------------------------------------------------------------------------------
// Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Фио ,1 ,3,"1" ), то на выходе получим Железняков и т.д.
// Если Падеж(Фио ,1 ,3,"2"), то на выходе получим Юрий и т.д.
// Если Падеж(Фио ,1 ,3,"3"), то на выходе получим Юрьевич и т.д.
// Если Падеж(Фио, 1 ,3,"12" ), то на выходе получим Железняков Юрий и т.д.
// Если Падеж(Фио, 1 ,3,"23" ), то на выходе получим Юрий Юрьевич и т.д.
// Если Падеж(Фио,-1 ,3,"231" ), то на выходе получим Ю. Ю. Железняков и т.д.
// Если Падеж(Фио,-1 ,3,"23"), то на выходе получим Ю. Ю.
// 10-11-2003 3-20
Функция Падеж(z1,z2=2,z3=3,Знач z4="123",z5=1) Экспорт
   Возврат?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(Лев(z1,Найти(z1+" "," ")-1),z2,Сред("ча"+НРег(Прав(z1,1)),z3,1),z5)+" "),z5+1),z4);
КонецФункции//Падеж
// z1 - наименование профессии, как одно слово, так и несколько слов. Например
//      звукорежиссер, инженер - программист 1 категории, заместитель технического директора
// z2 - номер падежа (1 - именительный, 2 - родительный, 3 -  дательный, 4 - винительный, 5 - творительный, 6 - предложный)
// z3 - служебная переменная
// Пример вызова ПадежП("агент по снабжению", 2 ) для родительного падежа.
// Пример вызова ПадежП("ведущий инженер-программист 2 категории", 3 ) для дательного падежа.
Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
   z1=СокрЛП(z1);  z4=Найти(z1+" "," ")+1;  z5=Лев(z1,z4-2);  z6=Прав(z5,2);
   //z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
   z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
   Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
КонецФункции//ПадежП
//==============================================================================
8 lea_220400
 
16.12.08
10:34
Коментарии рулят ))
9 smaharbA
 
16.12.08
10:38
Типовые рулят.
10 Серый Пес
 
16.12.08
10:38
(0) Тут такое дело. Если нужно получить хоть какое нить склонение - то автоматическая обработка спасет. Выше ссылок накидали.
Но если нужно что-то официальное (например, для подставновки в договоры), то, извините, хрен вам... Иного варианта, кроме как вручную просклонять список физиков, желательно силами филолога, не придумано.
11 IamAlexy
 
16.12.08
10:39
(10) за неимением в штате филолога, при заполнении вордовских шаблонов договоров из базы ЗУПа склоняем одним из решений по ссылке.
а далее сотрудник кадровой уже проверяет заполненный шаблон и принеобходимости вносит изменения.
12 smaharbA
 
16.12.08
10:40
ааа, про склонение не заметил ))
...
не все адназначна... есть и имена и фамилии фих склонишь

Майор Сидор - Имя и фамилия
13 Серый Пес
 
16.12.08
10:41
(11) Просто имейте в виду, что зачастую правильное склонение фамилии знает только сам владелец фамилии, до кучи :)
14 smaharbA
 
16.12.08
10:43
+ Устраивался чел, имя - Красныйоктябрь
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн