Имя: Пароль:
1C
 
Склонение ФИО и должностей
0 AlexAl-77
 
02.06.10
13:31
Подскажите пожалуйста кто как сколняет ФИО и должности, много где пишут про DLL ndeclin.dll. Посоветуйте пожалуйста.
1 zak555
 
02.06.10
13:32
// (c) Jurer Production Begin ( Start )
// В случае, если программа окажется для Вас полезной, и Вы представляете только свои интересы, а не интересы фирмы,
// автор будет весьма признателен, если Вы перечислите ему некую сумму на Ваше усмотрение (автор будет благодарен любым инициативам).
// Для этого через сбербанк перечислите N-ую сумму на следующий счет:
// филиал 8606/018 Рязанское ОСБ № 8606 СБ РФ г.Рязань РЕКВИЗИТЫ: ИНН 7707083893КОР.СЧЕТ 30101810500000000614 БИК 046126614
// ДЛЯ ПЕРЕЧИСЛЕНИЙ ВО ВКЛАД ФИЗИЧ.ЛИЦ – 47422810453009902100 НОМЕР СБЕРКНИЖКИ:  42301810953002115714/01  Железняков Юрий Юрьевич
// __________________________________________________________________
//
//                           SuperJur.Narod.Ru
//
// __________________________________________________________________
// Удаление этих строк незнаконно!
// Гарантия 91 года и 1 месяц!!!
// Послегарантийное обслуживание - бесплатно!!!
// Круглосуточная поддержка - все 48 часов в бою!
// Ссылка на источник обязательна!
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы.
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!!
// Смотри Милячуша в творительном !!
// скупой слепой тупой - пропой!!
// !№№!
// !54! Очередное сокращение кода
// !53! Очередное сокращение кода
// !51! Прегромадное спасибо Олегу Дубровскому за оказанную моральную, информационную и материальную поддержку сего проекта.
//      Сергею Толкачёву за напоминание о том, что в русском языке всегда есть место исключениям!
// !50! П:Ответственный за электрохозяйство  Ф:Ацута Груша  
// !48! исправлена ошибка при склонении фамилий (спасибо, Mario).
// !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев).
// !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или всё сразу в нужном падеже
// !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец
// !41! отчества оканчивающиеся на "ы" считаются женскими ?
// Функция для склонения одного слова!!!
// z1 - само слово
// z2 - номер падежа
// z3 - пол
// z4 - 1-склонять как фамилию, 2-имя, 3-отчество
Функция ПадежС(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 - родительный)
// 2 - родительный  ( нет кого?    ) Железнякова Юрия Юрьевича    
// 3 - дательный    ( кому?        ) Железнякову Юрию Юрьевичу
// 4 - винительный  ( вижу кого?   ) Железнякова Юрия Юрьевича  
// 5 - творительный ( кем?         ) Железняковым Юрием Юрьевичем    
// 6 - предложный   ( о ком?       ) Железнякове Юрии Юрьевиче
// Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с
// инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром  1 - мужской 2 - женский  
// ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// ---------------------------------------------------------------------------------------
// Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Фио ,1 ,3),       то на выходе получим Фамилия Имя Отчество и т.д.
// Если Падеж(Фио ,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) Экспорт

   Если ТипЗначенияСтр(z1)="Справочник" Тогда
       Если Метаданные.Справочник(z1.Вид()).Реквизит("ВРодительномПадеже").Выбран()=1 Тогда
           Если ПустаяСтрока(z1.ВРодительномПадеже)=0 Тогда
               Возврат(СокрЛП(z1.ВРодительномПадеже));
           Иначе
               z1=СокрЛП(глНаименование(z1));
           КонецЕсли;
       Иначе
           z1=СокрЛП(глНаименование(z1));
       КонецЕсли;
   Иначе
       z1=СокрЛП(z1);
   КонецЕсли;

Возврат СокрЛП(?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(Лев(z1,Найти(z1+" "," ")-1),z2,Сред("ча"+НРег(Прав(z1,1)),z3,1),z5)+" "),z5+1),z4));
КонецФункции//Падеж

Функция ПадежП(Знач z1,Знач z2,z3=0, ВНижнийРегистр=0) Экспорт
   
   Если ТипЗначенияСтр(z1)="Справочник" Тогда
       Если Метаданные.Справочник(z1.Вид()).Реквизит("ВРодительномПадеже").Выбран()=1 Тогда
           Если ПустаяСтрока(z1.ВРодительномПадеже)=0 Тогда
               Возврат(СокрЛП(z1.ВРодительномПадеже));
           Иначе
               z1=СокрЛП(глНаименование(z1));
           КонецЕсли;
       Иначе
           z1=СокрЛП(глНаименование(z1));
       КонецЕсли;
   Иначе
       z1=СокрЛП(z1);
   КонецЕсли;
   
 z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2);
 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))));
Возврат ?(ВНижнийРегистр=1,НРег(Рез),Рез);
КонецФункции//ПадежП
// (c) Jurer Production End ( Finish )
2 AlexAl-77
 
02.06.10
13:36
Выглядит весьма коротка. кто может сказать что лучше использовать? знаю в ЗУП используют NameDecl.dll
3 skunk
 
02.06.10
13:37
(2)могу сказать, что лучшее есть только вторая версия ... искать в инете
4 skunk
 
02.06.10
13:37
вторая версия представленного в (1)
5 zak555
 
02.06.10
13:38
(4) а что там нового ?
6 Secret
 
02.06.10
13:43
(0) "руководитель отдела" состоит из склоняемой и несклоняемой части. Главная проблема - как выделить склоняемую часть?
7 skunk
 
02.06.10
13:44
(5)исправлена часть ошибок в сложных фамилиях
8 zak555
 
02.06.10
13:48
(7) http://www.superjur.narod.ru/padeg.htm здесь новая ?
9 AlexAl-77
 
02.06.10
13:57
а что ЗУПОСКИЙ механизм не кто не использует?
10 zak555
 
02.06.10
14:00
(9) так он кривой !
Основная теорема систематики: Новые системы плодят новые проблемы.