|
функции склонения фио | ☑ | ||
---|---|---|---|---|
0
LivingStar
22.04.13
✎
13:45
|
есть ли в бп функции склонения фио?
|
|||
1
1Сергей
22.04.13
✎
13:46
|
да. В родительный и дательный
|
|||
2
Wobland
22.04.13
✎
13:46
|
в ней есть глобальный поиск
|
|||
3
LivingStar
22.04.13
✎
13:51
|
(1 ) что за функция, подскажите пожалуйста?
|
|||
4
LivingStar
22.04.13
✎
13:54
|
нащел функцию просклонять, но она нигде не используется в конфигурации, непонятно что за компонента???
| // Функция склоняет переданую фразу // Параметры: // Фраза (обязательный), тип строка // Параметр должен содержать фразу. Каждое слово фразы будет просклонено отдельно // // Падеж (обязательный), тип число // Падеж, в который необходимо поставить ФИО. // 1 - Именительный // 2 - Родительный // 3 - Дательный // 4 - Винительный // 5 - Творительный // 6 - Предложный // Функция Просклонять(Компонента, Знач Фраза = "", Падеж = 1, Пол = Неопределено, Результат) Экспорт Если Компонента = Неопределено Тогда Возврат Ложь; КонецЕсли; Результат = ""; #Если Клиент Тогда МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Фраза, " "); // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов НомерНесклоняемогоСимвола = 4; Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл Если Не РегламентированнаяОтчетность.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда НомерНесклоняемогоСимвола = Номер; Прервать; КонецЕсли; Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; КонецЦикла; Если ПустаяСтрока(Результат) Тогда Результат = Фраза; Возврат Ложь; КонецЕсли; Попытка Если Пол = Перечисления.ПолФизическихЛиц.Мужской Тогда Результат = Компонента.Просклонять(Результат, Падеж, 1) + " "; ИначеЕсли Пол = Перечисления.ПолФизическихЛиц.Женский Тогда Результат = Компонента.Просклонять(Результат, Падеж, 2) + " "; Иначе Результат = Компонента.Просклонять(Результат, Падеж) + " "; КонецЕсли; Исключение Результат = Фраза; Возврат Ложь; КонецПопытки; // Остальные символы добавим без склонения Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл Результат = Результат + " " + МассивСтрок[Номер-1]; КонецЦикла; Результат = СокрЛП(Результат); Возврат Истина; #Иначе Возврат Ложь; #КонецЕсли КонецФункции // Просклонять() |
|||
5
Wobland
22.04.13
✎
13:55
|
+(2) и возможность ввода строк "склон", "падеж"
|
|||
6
Cube
22.04.13
✎
13:56
|
(4) В ЗиУП используется, как минимум.
|
|||
7
LivingStar
22.04.13
✎
14:00
|
(6) как ей пользоваться? что передавать в параметрах?
|
|||
8
floody
22.04.13
✎
14:04
|
в каментах разве не про это?
|
|||
9
Maxus43
22.04.13
✎
14:06
|
дарю красивые:
Функция глПадеж(Знач Фио, Падеж = 1 ) Экспорт // Фио - фамилия имя отчество например Железняков Юрий Юрьевич, Бибик Иван Андреевич, Галушка Виктор Михайлович // Падеж // 2 - родительный ( нет кого? ) // 3 - дательный ( кому? ) // 4 - винительный ( вижу кого? ) // 5 - творительный ( кем? ) // 6 - предложный ( о ком? ) // возвращает // Если Падеж =2 Железнякова Юрия Юрьевича Бибика Ивана Андреевича Галушки Виктора Михайловича // 3 Железнякову Юрию Юрьевичу Бибику Ивану Андреевичу Галушке Виктору Михайловичу // 4 Железнякова Юрия Юрьевича Бибика Ивана Андреевича Галушку Виктора Михайловича // 5 Железняковым Юрием Юрьевичем Бибиком Иваном Андреевичем Галушкой Виктором Михайловичем // 6 Железнякове Юрие Юрьевиче Бибике Иване Андреевиче Галушке Викторе Михайловиче // Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Перем Z604,Z605,Z607,Z608,Z617,Z616, Пол; Фио = СокрЛП(Фио); Пол = Прав(СокрЛП(Фио), 1); Найти_ = Find(Фио," "); z608 = Найти_ - 1; Result = Сред(Фио,1,Z608); Z607 =Сред(Result,Z608, 1); Z616 = Сред( Result ,Z608 -1, 2); z609 = Сред(Result,Z608-2,3); Result =?( ( ( Z616="ой") или (Z616="ый") или (Z616="ий") или (Z616="рг") ) и (Пол <> "а") , ?(Найти( "Цц", Сред( Result ,Z608 -2, 1) )<>0, Сред( Result,1, Z608- 1)+ Сред("я ю я еме",Падеж*2-3,2) , ?( (Z616="рг") , Result+ Сред("а у а оме",Падеж*2-3,2), Сред( Result,1, Z608- 2) + Сред("огоомуого" + ?((Z616="ий")или(z609="гой")или(z609="хой"),"им ","ым ")+"ом",Падеж*3-5,3))) , ?(((Z607="в")или(Z607="т")или(Z616="ик")или(Z616="ах")или(Z616="ин")или(Z616="ын")или(Z616="юк")или(Z616="им")или(Z616="ак"))и(Пол<>"а"),Result+Сред("а у а "+?((Z616="ик")или(Z616="ах")или(Z616="им")или(Z616="юк")или(Z616="ак"),"ом","ым")+"е",Падеж*2-3,2),?(((Z607="а")или(Z616="ая"))и(z609<>"ула"),Лев(Result,Z608-?(Z616="ая",2,1))+Сред(?(Z616="ка","и е у ойе","ойойу"+?(z616="ая","ю"," ")+"ойой"),Падеж*2-3,2),Result))); Z604=""; Z605=""; Если z608<> -1 Тогда НайтиОтчество = Найти( Сред(Фио, Найти_+ 1,100)," "); Найти_ = Найти_ + НайтиОтчество; Z604 = Сред( Фио , Z608 + 2 , Найти_ - Z608 - 2); Если z604<>"" Тогда Z617 = Прав( Z604, 1 ); Z604 = ?( (Z617 = "а") или (Z617 = "й") или (Z617 = "ь") или (Z617 = "я"), Лев( Z604, СтрДлина(Z604) - 1) + ?( ( ( Сред( Z604, СтрДлина(z604) - 1, 1) = "г" ) и (Падеж=2 ) ) или ( Сред( Z604, СтрДлина(z604) - 2, 2) = "ли" ) и (Падеж=6 ) , "и",Сред( Сред( ?( (Z607="а") или (Пол="а") ,"ыяииеюи"+?(Прав(Z604,2 )="ия","и","е")+"уяьюоеьеееие" , "ыяяиеююеуяяюоеееееее"), Падеж*4 - 7, 4) , Найти( "айья", Z617), 1) ) + ?( Падеж =5, Сред( ?(Z607="а", "ймюй", "йммй") , Найти( "айья", Z617), 1),""), ?(Прав(Z604, 2)="ел", Лев(Z604,СтрДлина(Z604)-2) +"л", ?(Прав(Z604, 2)="ев", Лев(Z604,СтрДлина(Z604)-2) +"ьв", Z604)) + ?((Прав(Z604, 1)<>".") и (Прав(Z604, 3)<>"жан") , Сред("а у а оме", Падеж* 2 - 3, 2 ), "")) ; КонецЕсли; Если НайтиОтчество <> 0 Тогда Z605 = Сред( Фио , Найти_ +1 , СтрДлина(Фио) ); Z605 = СокрЛП(Z605); Z605 = ?(Пол="а" , Сред(Z605,1, СтрДлина(Z605)-1)+ Сред("ы е у ойе", Падеж* 2 - 3, 2 ), ?( Пол="ч", Z605+ Сред("а у а еме", Падеж*2 - 3, 2), z605)); КонецЕсли; КонецЕсли; Возврат СокрП( Result ) + " " + СокрП( Z604) + " " + СокрП( Z605) КонецФункции // Падеж(Фио, Падеж = 1 ) //---------------------------------------------------- // 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))); zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),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="*",z4=0) //_____________________________________________________________________________ // 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) Экспорт z6=Нрег(Прав(СокрП(z1),4)); z7=Прав(z6,1); Возврат?(z5<4,глПадежФИО(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,глПадежС(?((z5=3)и(z7="ы"),z1,Лев(z1,Найти(z1+" "," ")-1)),z2,Сред("ча"+z7,?(z3=3,?(z6="оглы",1,?(z6="кызы",1,3)),z3),1),z5)+" "),z5+1),z4); КонецФункции //глПадежФИО(z1,z2=2,z3=3,z4="123",z5=1) Функция глПадежП(Знач 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","*"); Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),глПадежС(z5,z2,z7,1)+" "+глПадежС(Сред(z1,z4),z2),глПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",глПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4))))); КонецФункции //глПадежП(Знач z1,Знач z2,z3=0) (с) |
|||
10
GANR
22.04.13
✎
14:06
|
||||
11
LivingStar
22.04.13
✎
14:08
|
СПАСИБО!!!
|
|||
12
LivingStar
22.04.13
✎
14:23
|
(10) Серафим Серафимыч Серафимский, первая склоняет как Серафима Серафимыча Серафимскийа
| ПадежФИО( Выборка.Фамилия + " " + Выборка.Имя + " " + Выборка.Отчество ,2,Ложь) |
|||
13
LivingStar
22.04.13
✎
14:28
|
досадно, но (9) тоже не полноценно склоняет, или я пример дубовый привел?
|
|||
14
LivingStar
22.04.13
✎
14:29
|
дубовый пример привел видимо в самом фио
|
|||
15
hardsign
22.04.13
✎
14:43
|
(12)
во-первых, Серафим СерафимОВИЧ Серафимский во-вторых, ясно же написано = фамилия, потом имя, а потом отчество... Вы зачем порядок поменяли наоборот?:) попробуйте Серафимский Серафим Серафимович - все верно склоняет |
|||
16
hardsign
22.04.13
✎
14:44
|
(9) Спасибо, все работает, забрал:) Очень полезно.
|
|||
17
LivingStar
22.04.13
✎
14:50
|
да спасибо, все супер !!!
|
|||
18
sda553
22.04.13
✎
15:02
|
Закладка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |