Имя: Пароль:
1C
1С v8
Как сделать ФИО в родительном падеже
0 Трынделка
 
03.09.13
12:42
Заранее спасибо
1 Абыр
 
03.09.13
12:43
namedecl.dll, например
2 ale-sarin
 
03.09.13
12:44
В типовых есть спец функция, использующая спец ДЛЛ.
3 АнжелаДэвис
 
03.09.13
12:44
+1 вызывать на фамилье , имя и отчество по отдельности
4 Wobland
 
03.09.13
12:44
когда-то я глобально искал "падеж" по зупу
5 Трынделка
 
03.09.13
12:45
(1) (2) (3) (4) конф Зуп... Можете поподробней объяснить. Я еще новичек
6 ale-sarin
 
03.09.13
12:46
(5) В конфигураторе запусти глобальный поиск, например, слово "падеж".
7 Wobland
 
03.09.13
12:46
(5) ищи в меню слова "глобальный" и "поиск" рядом
8 ale-sarin
 
03.09.13
12:47
+6 О, а (4)-то я и не заметил.
9 jj369
 
03.09.13
12:48
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ФИОРук, 2, , ФИОРук);
10 Трынделка
 
03.09.13
12:55
Спасибо нашел щас попробую
11 Kvitok8320
 
18.09.13
19:56
А можно пояснить:
Функция Просклонять(Компонента, Знач Фраза = "", Падеж = 1, Пол = Неопределено, Результат) Экспорт
здесь Компонента это где берется?
12 jsmith82
 
18.09.13
20:07
Не новичек, а новичок
13 Kvitok8320
 
18.09.13
20:09
мой стаж в 8.2 = 1 месяц
можно все таки пояснить?
14 Фокусник
 
18.09.13
20:13
ИМХО, нужно составлять текст документов так, чтобы фио походило в именительном падеже. А то можно насклонять какого-нибудь уважаемого человека так, что потом стыдно будет ;)
15 grayshadow
 
18.09.13
20:49
(11) глобальный поиск по конфе на "просклонять"
16 Kvitok8320
 
18.09.13
20:53
сделал, вот это и нашел
потому и спрашиваю - с чем это едят ....
17 Kvitok8320
 
18.09.13
21:23
ничего не понял, сделал как здесь - http://www.1c-pro.ru/topic41980.html - работает вроде
18 EvgeniuXP
 
18.09.13
22:40
есть уже написанная готовая функция под 1С, вставь в глобальник и передавай туда фио и падеж - вернет то что нужно и dll не надо.
19 Kvitok8320
 
19.09.13
11:36
(18) спасибо, а можно уточнить: где есть?
20 Grobik
 
19.09.13
11:40
См (9). Вместо ФИОРук ставить свое.
21 zak555
 
19.09.13
11:42
// 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 - родительный)

// 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,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)))));
КонецФункции//*******************************************
22 WhiteDragon93
 
19.09.13
11:44
+1 к (14)
существует же куча несклоняемых фамилий, если только в той самой dll не содержится супералгоритм или база таких фамилий, сам не пользовался
23 Kvitok8320
 
19.09.13
11:44
(20) пробовал - выдает ошибки
(21) спасибо!
24 Масянька
 
19.09.13
11:47
(22) Поддержу. А что трудно руками ввести?
25 Kvitok8320
 
19.09.13
11:52
(24) Думаю, что не трудно, но если хотя бы часть правильно просклоняется - наверное пользователи не обидятся ...
26 Масянька
 
19.09.13
11:53
(25) Пользователи разные бывают :)
27 Kvitok8320
 
19.09.13
11:55
ок - поставлю галочку - склонять - не склонять :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс