Имя: Пароль:
1C
1С v8
Склонение ФИО на украинском языке
0 Anonimka
 
16.01.12
18:19
Подскажите, существует ли аналог NameDecl.dll для украинского языка, и если да - где можно найти?
1 V_V_V
 
16.01.12
18:20
Что-то сегодня всех посклонять потянуло...
2 Grusswelle
 
16.01.12
18:21
да чё там склонять-то
3 vmv
 
16.01.12
18:22
склоню дешева
4 Neg
 
16.01.12
18:24
(0) Там все на "о" заканчиваются.
5 КапЛей
 
16.01.12
18:24
существует
6 Anonimka
 
16.01.12
18:26
(4) Только женские фамилии. Мужские - увы, нет. С именами и отчествами вообще песня отдельная.
(5) Подскажите название, пожалуйста.
7 Neg
 
16.01.12
18:28
8 КапЛей
 
16.01.12
18:30
(6) не поверите NameDecluKR.dll есть на ИТС
9 aka MIK
 
16.01.12
18:33
(8) нету

... или в последнем?
10 Anonimka
 
16.01.12
18:44
(8) Я искала в декабрьском. Нет там такого. За январь пока диска не было.
(7) В описании что-то не нашла, как заставить компоненту на украинском склонять, но надо еще поковыряться, спасибо.
11 Grobik
 
16.01.12
18:49
если нужно быстро сделать на от***си то использую такое:


Функция ФамВРП(стр)
   Бук = ВРег(Прав(стр,1));
   кол = 2;
   Если (Бук="А")
       Тогда кол = 3;
   КонецЕсли;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("ОВ",_ОК)>0 ИЛИ Найти("ЕВ",_ОК)>0 ИЛИ Найти("ЄВ",_ОК)>0 ИЛИ Найти("ИН",_ОК)>0 ИЛИ Найти("ІН",_ОК)>0 ИЛИ Найти("ЇН",_ОК)>0 Тогда
       Доб = "а";
   ИначеЕсли Найти("ОВА",_ОК)>0 ИЛИ Найти("НА",Прав(_ОК,2))>0 ИЛИ Найти("ЕВА",_ОК)>0 ИЛИ Найти("ЄВА",_ОК)>0 ИЛИ Найти("ИНА",_ОК)>0 ИЛИ Найти("ІНА",_ОК)>0 ИЛИ Найти("ЇНА",_ОК)>0 Тогда
       Доб = "ої";
       Убрать = 1;
   ИначеЕсли Найти("ИЙ",_ОК)>0 Тогда
       Доб = "ого";
       Убрать = 2;
   ИначеЕсли Найти("Я",Прав(_ОК,1))>0 Тогда
       Доб = "ю";
       Убрать = 1;
   ИначеЕсли Найти("А",Прав(_ОК,1))>0 Тогда
       Доб = "ої";
       Убрать = 1;
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ФамВДП(стр)
   Бук = ВРег(Прав(стр,1));
   кол = 2;
   Если (Бук="А")
       Тогда кол = 3;
   КонецЕсли;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("ОВ",_ОК)>0 ИЛИ Найти("ЕВ",_ОК)>0 ИЛИ Найти("ЄВ",_ОК)>0 ИЛИ Найти("ИН",_ОК)>0 ИЛИ Найти("ІН",_ОК)>0 ИЛИ Найти("ЇН",_ОК)>0 Тогда
       Доб = "у";
   ИначеЕсли Найти("ОВА",_ОК)>0 ИЛИ Найти("НА",Прав(_ОК,2))>0 ИЛИ Найти("ЬКА",_ОК)>0 ИЛИ Найти("ЕВА",_ОК)>0 ИЛИ Найти("ЄВА",_ОК)>0 ИЛИ Найти("ИНА",_ОК)>0 ИЛИ Найти("ІНА",_ОК)>0 ИЛИ Найти("ЇНА",_ОК)>0 Тогда
       Доб = "ій";
       Убрать = 1;
   ИначеЕсли Найти("ИЙ",_ОК)>0 Тогда
       Доб = "ому";
       Убрать = 2;
   ИначеЕсли Найти("КА",Прав(_ОК,2))>0 Тогда
       Доб = "ці";
       Убрать = 2;
   ИначеЕсли Найти("АЯ",_ОК)>0 Тогда
       Доб = "ій";
       Убрать = 2;
   ИначеЕсли Найти("Я",Прав(_ОК,1))>0 ИЛИ Найти("А",Прав(_ОК,1))>0 Тогда
       Доб = "і";
       Убрать = 1;
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ИмяВРП(стр)
   Если Найти(стр,".")>0 Тогда
       возврат стр;
   КонецЕсли;
   Бук = ВРег(Прав(стр,1));
   кол = 1;
   Если Найти("А",Бук)>0 ИЛИ Найти("Л",Бук)>0 ИЛИ Найти("Ь",Бук)>0 Тогда
       кол = 2;
   КонецЕсли;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("Я",_ОК)>0 Тогда
       Доб = "ю";
       Убрать = 1;
   ИначеЕсли "Р" = _ОК Тогда
       Доб = "а";
   ИначеЕсли "О" = _ОК Тогда
       Доб = "а";
       Убрать = 1;
   ИначеЕсли "В" = _ОК Тогда
   ИначеЕсли Найти("Й",_ОК)>0 ИЛИ Найти("Ь",Прав(_ОК,1))>0 Тогда
       Доб = "я";
       Убрать = 1;
   ИначеЕсли ВРег(Прав(стр,1))="А" Тогда
       // для женских имен
       Доб = "у";
       Убрать = 1;
   Иначе
       доб = "а";
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ИмяВДП(стр)
   Если Найти(стр,".")>0 Тогда
       возврат стр;
   КонецЕсли;
   Бук = ВРег(Прав(стр,1));
   кол = 1;
   Если Найти("А",Бук)>0 ИЛИ Найти("Я",Бук)>0 ИЛИ Найти("Л",Бук)>0 ИЛИ Найти("Ь",Бук)>0 Тогда
       кол = 2;
   КонецЕсли;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("ІЯ",_ОК)>0 Тогда
       Доб = "ї";
       Убрать = 1;
   ИначеЕсли Найти("Я",Прав(_ОК,1))>0 Тогда
       Доб = "і";
       Убрать = 1;
   ИначеЕсли Найти("В",Прав(_ОК,1))>0 Тогда
       Доб = "і";
   ИначеЕсли "О" = _ОК Тогда
       Доб = "у";
       Убрать = 1;
   ИначеЕсли "Р" = _ОК Тогда
       Доб = "у";
   ИначеЕсли Найти("Й",_ОК)>0 ИЛИ Найти("Ь",Прав(_ОК,1))>0 Тогда
       Доб = "ю";
       Убрать = 1;
   ИначеЕсли Найти("ГА",_ОК)>0 Тогда
       Доб = "зі";
       Убрать = 2;
   ИначеЕсли ВРег(Прав(стр,1))="А" Тогда
       // для женских имен
       Доб = "і";
       Убрать = 1;
   Иначе
       доб = "у";
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ОтчВРП(стр)
   Если Найти(стр,".")>0 Тогда
       возврат стр;
   КонецЕсли;
   кол = 1;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("Ч",_ОК)>0 Тогда
       Доб = "а";
   ИначеЕсли Найти("А",_ОК)>0 Тогда
       Доб = "у";
       Убрать = 1;
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ОтчВДП(стр)
   Если Найти(стр,".")>0 Тогда
       возврат стр;
   КонецЕсли;
   кол = 1;
   Ок = Прав(стр, кол);
   //окончание фамилии (ов,ин,ова,ева)
   _ОК = ВРег(Ок);
   Доб = "";
   Убрать = 0;
   //кол символов которые нужно вырезать в конце
   Если Найти("Ч",_ОК)>0 Тогда
       Доб = "у";
   ИначеЕсли Найти("А",_ОК)>0 Тогда
       Доб = "і";
       Убрать = 1;
   КонецЕсли;
   дл = СтрДлина(стр)-Убрать;
   фам = Лев(стр,дл)+Доб;
   Возврат фам;
КонецФункции
//-------------------
Функция ФИОВРодПадеж(_строка)
   сп = РазобратьСтроку(_строка, " ");
   //РодПадеж = ИмПадеж;
   для н=0 по сп.Количество()-1 Цикл
       стр = СокрЛП(сп[н].Значение);
       тмп = стр;
       Если СтрДлина(тмп)=0 Тогда
           Продолжить;
       КонецЕсли;
       Если н=0 тогда
           Фам = ФамВРП(стр);
       ИначеЕсли н=1 Тогда
           Им = ИмяВРП(стр);
       ИначеЕсли н=2 Тогда
           Отч = ОтчВРП(стр);
       КонецЕсли;
   КонецЦикла;
   Возврат Фам + " " + Им + " " + Отч;
КонецФункции  
//-------------------
Функция ФИОВДатПадеж(_строка)
   сп = РазобратьСтроку(_строка, " ");
   //ДатПадеж = ИмПадеж;
   для н=0 по сп.Количество()-1 Цикл
       стр = СокрЛП(сп[н].Значение);
       тмп = стр;
       Если СтрДлина(тмп)=0 Тогда
           Продолжить;
       КонецЕсли;
       Если н=0 тогда
           Фам = ФамВДП(стр);
       ИначеЕсли н=1 Тогда
           Им = ИмяВДП(стр);
       ИначеЕсли н=2 Тогда
           Отч = ОтчВДП(стр);
       КонецЕсли;
   КонецЦикла;
   Возврат Фам + " " + Им + " " + Отч;
КонецФункции  


Функция РазобратьСтроку(_Строка, _Разделитель, _УдалятьПустые = Истина)
   Результат = Новый СписокЗначений;
   _т = СтрЗаменить(_Строка, _Разделитель, Символы.ПС);
   Для Строк = 1 по СтрЧислоСтрок(_т) Цикл
       Если СтрДлина(СтрПолучитьСтроку(_т, Строк)) = 0 Тогда
           Если не _УдалятьПустые Тогда
               Результат.Добавить(СтрПолучитьСтроку(_т, Строк));
           КонецЕсли;
       Иначе
           Результат.Добавить(СтрПолучитьСтроку(_т, Строк));
       КонецЕсли;
   КонецЦикла;
   
   Возврат Результат;
КонецФункции

чье оно не знаю просто копирую и использую

   ОбластьМакета.Параметры.СтрокаДАТ = ФИОВДатПадеж(РаботникДля) + " відпустку по догляду за дитиною,";
   РаботникДляРод = ФИОВРодПадеж(РаботникДля);
   ФИО = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СокрЛП(Строка(РаботникДляРод))," ");
   КоличествоПодстрок = ФИО.Количество();
   Фамилия = ?(КоличествоПодстрок > 0,ФИО[0],"");
   Имя        = ?(КоличествоПодстрок > 1,ФИО[1],"");
   Отчество= ?(КоличествоПодстрок > 2,ФИО[2],"");
   ОбластьМакета.Параметры.РаботникФИО = ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя),"  " + Лев(Имя,1) + "." + ?(НЕ ПустаяСтрока(Отчество)," " + Лев(Отчество,1)+".", ""), ""), "");
12 vyaz
 
16.01.12
19:06
(11)
> відпустку по догляду за дитиною

это отпуск по уходу за ребенком чтоль?
да уж))))
13 Anonimka
 
16.01.12
19:11
(7) Работает, но мужские фамилии на -ко склоняет неправильно(((
14 Anonimka
 
16.01.12
19:12
Grobik, спасибо, чувствую, к Вашему варианту и приду в конце концов :)
15 Anonimka
 
16.01.12
19:21
Виновата, не ту библиотеку зарегистрировала. (7) работает отлично!
Спасибо огромное!
Независимо от того, куда вы едете — это в гору и против ветра!