Modber Сообщество
профессионалов по 1С

Склонение фамилий

  
Сообщений: 1

0
Мне в отчете необходимо вывести ФИО сотрудника в дательном падеже. Примерно так: "Деньги переданы Петрову Ивану Сидоровичу". Или хотя бы фамилию склонять, а остальное сокращенно: "Петрову И.С.". Слышал, что есть компонента для склонения фамилий. dll-файл. Я у себя не нашел ничего похожего. Подскажите как называется, где искать и как его подключать в 1С? Компоненты вроде надо регистрировать?
Либо альтернативный вариант — написать процедуру самому. Там не должно быть сильно сложно. Но я без понятия какие правила склонения фамилий в русском языке.
Медаль
Сообщений: 101

+1
СанСаныч, Moru, а я нашла вот такой более коротенький код

Код 1C:
  1.  
  2. // Функция для склонения одного слова!!!
  3. // z1 — само слово
  4. // z2 — номер падежа
  5. // z3 — пол
  6. // z4 — 1-склонять как фамилию, 2-имя, 3-отчество
  7. Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
    z
    5=Найти(z1,"-");
  8. z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));
  9. z1=НРег(?(z5=0,z1,Лев(z1,z5-1)));
  10. z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
  11. z5=СтрДлина(z1);
  12. za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
  13. zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
  14. zc=Макс(z2,-z2);
  15. zd=?(za=4,5,Найти("айяь",z9));
  16. 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)));
  17. ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
  18. 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,"йц","р"))))))))));
  19. 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)));
  20. Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
  21. КонецФункции
    //_____________________________________________________________________________
  22. // z1 — фамилия имя отчество например Железняков Юрий Юрьевич
  23. // z2 — Падеж ( по умолчанию = 2 — родительный)
  24. // 2 — родительный ( нет кого? ) Железнякова Юрия Юрьевича
  25. // 3 — дательный ( кому? ) Железнякову Юрию Юрьевичу
  26. // 4 — винительный ( вижу кого? ) Железнякова Юрия Юрьевича
  27. // 5 — творительный ( кем? ) Железняковым Юрием Юрьевичем
  28. // 6 — предложный ( о ком? ) Железнякове Юрии Юрьевиче
  29. // Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
  30. // z3 — параметр Пол может не указываться, но при наличии фамилий с
  31. // инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
  32. // параметром 1 — мужской 2 — женский
  33. // ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
  34. // ---------------------------------------------------------------------------------------
  35. // Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
  36. // Если Падеж(Фио ,1 ,3), то на выходе получим Фамилия Имя Отчество и т.д.
  37. // Если Падеж(Фио ,1 ,3,"1" ), то Фамилия
  38. // Если Падеж(Фио ,1 ,3,"2" ), то Имя
  39. // Если Падеж(Фио ,1 ,3,"3" ), то Отчество
  40. // Если Падеж(Фио, 1 ,3,"12" ), то Фамилия Имя
  41. // Если Падеж(Фио, 1 ,3,"23" ), то Имя Отчество
  42. // Если Падеж(Фио,-1 ,3,"231" ),то И. О. Фамилия
  43. // Если Падеж(Фио,-1 ,3,"23" ), то И. О.
  44. // 10-11-2003 3-20
  45.  
  46. Функция Падежик(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);
  47. КонецФункции//Падежик
  48.  
  49. Функция Падеж(z1,z2=2,z3=3,Знач z4="123") Экспорт
    z
    1=СокрП(z1);
  50. z5=Прав(z1,4);
  51. z6=Найти("оглы кызы",z5);
  52. Возврат Падежик(?(z6>0,Лев(z1,СтрДлина(z1)-5),z1),z2,z3,z4)+?(z6>0,z5,"");
  53. КонецФункции//Падеж
  54.  
  55. Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
    z
    1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2);
  56. z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
  57. Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
  58. КонецФункции//ПадежП
  59.  
  60. Это для тех, кто считает что ему некомильфо работать с исходным программным кодом
  61.  
  62. &НаКлиенте
  63. Процедура Команда1(Команда)
  64. ФИО = "Иванов Иван Иванович";
  65. Падеж = 2;
  66. Пол = 1;
  67. Результат = СклонениеФИО(ФИО, Падеж, пол);
  68. Сообщить(Результат);
  69. КонецПроцедуры
     
    &
    НаСервере
  70. Функция СклонениеФИО(ФИО, Падеж, пол)
  71. Результат = "";
  72. ПутьКФайлу="C:\NAMEDECL.DLL";
  73. NameDecl = "Склонение";
  74. Попытка
    Если ПодключитьВнешнююКомпоненту(ПутьКФайлу,NameDecl)ТОгда
  75. ФункцияСкл = Новый ("AddIn.Склонение.NameDeclension");
  76. Результат = ФункцияСкл.Просклонять(ФИО,Падеж, пол);
  77. КонецЕсли;
    ИсключениеСообщить("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки());
  78. КонецПопытки;
    Возврат Результат;
  79. КонецФункции
просто скачав внешнюю компоненту NameDecl.dll, но ее иногда нужно на примерах учить правильному склонению, так что без собственного знания правил русского языка не обойтись.
Редактировалось: 1 раз (Последний: 14 марта 2013 в 15:45)
МедальГрамота
Сообщений: 541

+8
Что-то мне говорит что в типовой конфигурации уже должен быть такой функционал…
Сообщений: 59

0
Alexandr, так вот Aida в своем комменте, начиная с п.67 как раз и ссылается на функционал для типовой конфигурации.
В начало страницы 
Перейти на форум: