helpf.pro
Регистрация
 +4 
Распечатать

1С 8.x : Cклонения по падежам

Код 1C v 8.2 УП
 &НаКлиенте
Процедура Команда1(Команда)
ФИО = "Иванов Иван Иванович";
Падеж = 2;
Пол = 1;
Результат = СклонениеФИО(ФИО, Падеж, пол);
Сообщить(Результат);
КонецПроцедуры

&НаСервере
Функция СклонениеФИО(ФИО, Падеж, пол)
Результат = "";
ПутьКФайлу="C:\NAMEDECL.DLL";
NameDecl = "Склонение";
Попытка
Если ПодключитьВнешнююКомпоненту(ПутьКФайлу,NameDecl)ТОгда
ФункцСкл = Новый ("AddIn.Склонение.NameDeclension");
Результат = ФункцСкл.Просклонять(ФИО,Падеж, пол);
КонецЕсли;
Исключение
Сообщить("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции



Код для 8-й версии, но работает и в 7-й )
Код 1C v 8.х
 // (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 )


Пример использования в ЗиК 7.7:
Код 1C v 7.x
  ПодписантРодитПад=Падеж(Константа.Руководитель.Получить(ДатаДок),-2); 
ПодпСтрока="Заместителя Генерального Директора "+СокрЛП(ПодписантРодитПад)+", действующего на основании доверенности "+ сокрлп(Константа.Доверенность);
Разместил:   Версии: | 7.x | 8.x | 8.2 УП |  Дата:   Прочитано: 37763
 +4 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 4
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно...
1С Предприятие что это? 8
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который...
Ввод дополнительного ежегодного отпуска 1
Вид расчета, используемый для начисления оплаты дополнительного ежегодного отпуска , описывается в плане видов расчета Основные начисления организаций . Новый вид расчета удобнее создать копированием...
Внешние источники данных 0
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других...
Внешние обработки, печатные формы, обработки по заполнению табличных частей 2
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ...
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.