Created
April 27, 2021 14:20
-
-
Save kuntashov/5c72747a0fd375afb92bd209acea78be to your computer and use it in GitHub Desktop.
Ненормальный 1С: Падеж (классика от http://superjur.narod.ru)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// (c) Jurer Production Begin ( Start ) | |
// http://superjur.narod.ru | |
// | |
// Удаление этих строк незнаконно! | |
// Гарантия 91 года и 1 месяц!!! | |
// Послегарантийное обслуживание - бесплатно!!! | |
// Круглосуточная поддержка - все 48 часов в бою! | |
// Ссылка на источник обязательна! | |
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы. | |
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!! | |
// Смотри Милячуша в творительном !! | |
// скупой слепой тупой - пропой!! | |
// !№№! | |
// !55! ПадежЫ - для оглы и кызы | |
// !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) Экспорт | |
Возврат?(z5<4,Падежик(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(Лев(z1,Найти(z1+" "," ")-1),z2,Сред("ча"+НРег(Прав(СокрП(z1),1)),z3,1),z5)+" "),z5+1),z4); | |
КонецФункции//Падежик | |
Функция Падеж(z1,z2=2,z3=3,Знач z4="123") Экспорт | |
z1=СокрП(z1); | |
z5=Прав(z1,4); | |
z6=Найти("оглы кызы",z5); | |
Возврат Падежик(?(z6>0,Лев(z1,СтрДлина(z1)-5),z1),z2,z3,z4)+?(z6>0,z5,""); | |
КонецФункции//Падеж | |
Функция ПадежП(Знач 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))))); | |
КонецФункции//ПадежП | |
// (c) Jurer Production End ( Finish ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment