Склонение имен
17.11.2005
15:28
#1
Привет, всем.
Подскажите, пожалуйста, существует ли в 1С возможность склонения ФИО сотрудников. Наш отдел кадров не доволен, что в приказы попадпют сотрудники в именительном падеже. Для них это очень принципиально.
Подскажите, пожалуйста, существует ли в 1С возможность склонения ФИО сотрудников. Наш отдел кадров не доволен, что в приказы попадпют сотрудники в именительном падеже. Для них это очень принципиально.
21.11.2005
13:18
#6
"// Функция для склонения одного слова!!!
// 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)))));
КонецФункции//ПадежП
// © Jurer Production End ( Finish )"
// 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)))));
КонецФункции//ПадежП
// © Jurer Production End ( Finish )"
18.12.2005
07:48
#8
"//Зачем так всё усложнять? У меня работает намного проще:
//Пишется после функции "ФИО()" в глобальном модуле бух-ии:
Функция Кому(Сотрудник) Экспорт
Фамилие=ФИО(Сотрудник,,"Ф");
Фамилие=СокрЛП(Фамилие);
Имя=ФИО(Сотрудник,,"И");
Отч=ФИО(Сотрудник,,"О");
Ф=Врег(Фамилие);
Им=Врег(Имя);
От=Врег(Отч);
Попытка
Пол=?(Сотрудник.Пол=Перечисление.Пол.Мужской,"М","Ж");
Исключение
Пол=?(Врег(Прав(СокрЛП(Сотрудник.Наименование),2))="НА","Ж","М");
КонецПопытки;
Группа=0;
Если Пол="М" Тогда //Мужские имена
Если (Прав(Им,1)="Й") или (Прав(Им,1)="Ь") Тогда
Имя=Лев(Имя,СтрДлина(Имя)-1)+"ю";
//Не склоняемые имена:
ИначеЕсли Прав(Им,1)="А" Тогда
ИначеЕсли Прав(Им,1)="Е" Тогда
ИначеЕсли Прав(Им,1)="Ё" Тогда
ИначеЕсли Прав(Им,1)="И" Тогда
ИначеЕсли Прав(Им,1)="У" Тогда
ИначеЕсли Прав(Им,1)="Я" Тогда
ИначеЕсли Прав(Им,1)="О" Тогда
ИначеЕсли Прав(Им,1)="Ы" Тогда
ИначеЕсли Прав(Им,1)="Ю" Тогда
Иначе
Имя=Имя+"у";
КонецЕсли;
Иначе //Женские Имена
Если (Прав(Им,1)="А") Или (Прав(Им,2)="ЬЯ") Тогда //Ирина, Яга, Софья...
Имя=Лев(Имя,СтрДлина(Им)-1)+"е";
ИначеЕсли Прав(Им,1)="Я" Тогда //Лидия, Аглая, София...
Имя=Лев(Имя,СтрДлина(Им)-1)+"и";
ИначеЕсли Прав(Им,1)="Ь" Тогда //Любовь, Руфь...
Имя=Лев(Имя,СтрДлина(Им)-1)+"и";
КонецЕсли;
КонецЕсли;
Если Прав(От,1)="Ч" Тогда
Отч=Отч+"у";
ИначеЕсли Прав(От,1)="А" Тогда
Отч=Лев(Отч,СтрДлина(От)-1)+"е";
КонецЕсли;
//Отчества:
//Фамилии:
Если (Прав(Ф,2)= "ЕВ") или (Прав(Ф,2)= "ЁВ") или (Прав(Ф,2)= "ИН")
или (Прав(Ф,2)= "ОВ")
Тогда
Возврат Фамилие+"у "+Имя+" "+Отч;
ИначеЕсли (Прав(Ф,3)= "ЕВА") или (Прав(Ф,3)= "ЁВА") или (Прав(Ф,3)= "ОВА")
или (Прав(Ф,3)= "ИНА")
Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-1)+"ой "+Имя+" "+Отч;
ИначеЕсли Прав(Ф,2)= "ИЙ" Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-2)+"ому "+Имя+" "+Отч;
ИначеЕсли Прав(Ф,2)= "АЯ" Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-2)+"ой "+Имя+" "+Отч;
КонецЕсли;
Возврат Фамилие+" "+Имя+" "+Отч;//Фамилие не склоняется
КонецФункции
"
//Пишется после функции "ФИО()" в глобальном модуле бух-ии:
Функция Кому(Сотрудник) Экспорт
Фамилие=ФИО(Сотрудник,,"Ф");
Фамилие=СокрЛП(Фамилие);
Имя=ФИО(Сотрудник,,"И");
Отч=ФИО(Сотрудник,,"О");
Ф=Врег(Фамилие);
Им=Врег(Имя);
От=Врег(Отч);
Попытка
Пол=?(Сотрудник.Пол=Перечисление.Пол.Мужской,"М","Ж");
Исключение
Пол=?(Врег(Прав(СокрЛП(Сотрудник.Наименование),2))="НА","Ж","М");
КонецПопытки;
Группа=0;
Если Пол="М" Тогда //Мужские имена
Если (Прав(Им,1)="Й") или (Прав(Им,1)="Ь") Тогда
Имя=Лев(Имя,СтрДлина(Имя)-1)+"ю";
//Не склоняемые имена:
ИначеЕсли Прав(Им,1)="А" Тогда
ИначеЕсли Прав(Им,1)="Е" Тогда
ИначеЕсли Прав(Им,1)="Ё" Тогда
ИначеЕсли Прав(Им,1)="И" Тогда
ИначеЕсли Прав(Им,1)="У" Тогда
ИначеЕсли Прав(Им,1)="Я" Тогда
ИначеЕсли Прав(Им,1)="О" Тогда
ИначеЕсли Прав(Им,1)="Ы" Тогда
ИначеЕсли Прав(Им,1)="Ю" Тогда
Иначе
Имя=Имя+"у";
КонецЕсли;
Иначе //Женские Имена
Если (Прав(Им,1)="А") Или (Прав(Им,2)="ЬЯ") Тогда //Ирина, Яга, Софья...
Имя=Лев(Имя,СтрДлина(Им)-1)+"е";
ИначеЕсли Прав(Им,1)="Я" Тогда //Лидия, Аглая, София...
Имя=Лев(Имя,СтрДлина(Им)-1)+"и";
ИначеЕсли Прав(Им,1)="Ь" Тогда //Любовь, Руфь...
Имя=Лев(Имя,СтрДлина(Им)-1)+"и";
КонецЕсли;
КонецЕсли;
Если Прав(От,1)="Ч" Тогда
Отч=Отч+"у";
ИначеЕсли Прав(От,1)="А" Тогда
Отч=Лев(Отч,СтрДлина(От)-1)+"е";
КонецЕсли;
//Отчества:
//Фамилии:
Если (Прав(Ф,2)= "ЕВ") или (Прав(Ф,2)= "ЁВ") или (Прав(Ф,2)= "ИН")
или (Прав(Ф,2)= "ОВ")
Тогда
Возврат Фамилие+"у "+Имя+" "+Отч;
ИначеЕсли (Прав(Ф,3)= "ЕВА") или (Прав(Ф,3)= "ЁВА") или (Прав(Ф,3)= "ОВА")
или (Прав(Ф,3)= "ИНА")
Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-1)+"ой "+Имя+" "+Отч;
ИначеЕсли Прав(Ф,2)= "ИЙ" Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-2)+"ому "+Имя+" "+Отч;
ИначеЕсли Прав(Ф,2)= "АЯ" Тогда
Возврат Лев(Фамилие,СтрДлина(Фамилие)-2)+"ой "+Имя+" "+Отч;
КонецЕсли;
Возврат Фамилие+" "+Имя+" "+Отч;//Фамилие не склоняется
КонецФункции
"
Медленно печатаются этикетки со штрихкодом из "1С". Кто сталкивался с такой проблемой.Метод расчета себестоимости
Читают тему
(гостей: 1)