gifts2017

Использование склонений ФИО и должностей в справках и приказах

Опубликовал Евгений П. (jack19) в раздел Программирование - Практика программирования

Часто в справке или приказе нужно указать ФИО и/или должность в падеже. Используется, как правило, родительный, дательный и винительный падеж. В прилагаемом фрагменте глобального модуля предлагается вариант решения данной проблемы.

Для склонения ФИО используется функция глПадежФИО(). В 99% случаев работает без ошибок. Исключения могут быть только для каких-либо национальных фамилий и имен.

С должностями (функция глПадежДолжности() и глПадежСтроки()) несколько сложнее, т.к. у каждой организации они могут быть свои и к тому же составные. Я учитывал специфику строительной организации.

При необходимости тексты функций можно доработать.

Скачать файлы

Наименование Файл Версия Размер
ФрагментГлобальногоМодуля.txt 173
.txt 12,02Kb
28.03.11
173
.txt 12,02Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Владимир Самойлов (samamoiloff) 28.03.11 15:43
По поводу склонения ФИО есть старая версия, даже не помню откуда взятая, огромная благодарность тому, кто делал...
Не было нареканий.
В ячейке Табличного документа пишем выражение Падеж(Сотрудник.Наименование,3,3)
А в Глобальном модуле 2 процедурки:
Функция ПадежС(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,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);
КонецФункции // Падеж()
2. Владимир Самойлов (samamoiloff) 28.03.11 15:48
Не смог я HTML код сюда вставить...
3. Евгений П. (jack19) 28.03.11 16:48
Возможно приведённая Вами функция и работает, но больно уж её текст непрозрачный. Если понадобится что-то подправить, то чёрт ногу сломит.
4. Яков Коган (Yashazz) 29.03.11 11:48
(1) Ага, это товарищ Jurer делал. Ещё есть http://infostart.ru/public/16470/
В общем, велосипед изобретён успешно, да.
cool.vlad4; +1 Ответить 1
5. Ийон Тихий (cool.vlad4) 29.03.11 11:57
(4) то, что доктор прописал, спасибо!
6. Hoodoo (Hoodoo) 23.10.11 20:30
автору спасибо за решение вопроса
7. Владимир (winise) 29.10.11 00:31
Велосипед, не велосипед, главное работает !!!
8. Юлия Сергеевна (2112861) 29.10.11 18:19
НЕ ОЖИДАЛА, что даже такая обработка есть
9. Эд - (Edd123) 05.01.12 23:21
Обработка интересная, а сайту минус за то, что многие обработки продают как кота в мешке, чтобы посмотреть на обработку и понять, что это полная лажа за нее нужно сначала заплатить. Ех, не хватает на вас общества защиты прав потребителей...