Имя: Пароль:
1C
 
ФИО в родительном падеже
0 santa
 
23.11.06
03:58
Понимаю, что затея эта глупая, но может у кого есть функция представления ФИО в родительном падеже? И вообще возможно ли это - ведь есть несклоняемые фамилии? Какие будут идеи, мнения?!
1 ASV
 
23.11.06
04:03
"Я" найдется всё
2 ASV
 
23.11.06
04:03
3 santa
 
23.11.06
04:36
а по восьмерке готового ничего нет?
4 santa
 
23.11.06
04:39
или хотя бы по представлению должностей в родительном падеже
5 skunk
 
23.11.06
05:12
//*******************************************
// strDeclineAdd(strName, intCase = 2, intSex = "*")
//
// Параметры:
//  strName  - Строка. Фамилия, Имя или Отчество.
//  intCase  - Число. В каком падеже склонять.
//               0 - ???
//               2 - родительный(нет кого?).
//               3 - дательный(кому?).
//               4 - винительный(вижу кого?).
//               5 - творительный(кем?).
//               6 - предложный(о ком?).
//             Параметр необязателен.
//             По умолчанию - 2.
//  intSex   - Число. Пол.
//               1 - мужской.
//               2 - женский.
//               3 - средний ;)).
//               4 - если склоняем профессию.
//             Параметр необязателен.
//             По умолчанию - 3.
//
// Возвращаемое значение:
//  Строка. Фамилию, Имя или Отчество
//          в нужном падеже.
//
// Описание:
//  Производит склонение по падежам
//  Фамилии, Имени или Отчества.
//
function strDeclineAdd(strName, intCase = 2, intSex = "*")
   strTemp1 = right(strName, 2);
   strTemp2 = ?(strTemp1 = "ия", 7, find(".чайяь", right(strTemp1, 1)));
   strTemp3 = strlen(strName) - 2;
   return ?(intCase = 1, strName,
          ?(strTemp2 > 2, left(strName, strTemp3 + 1),
          ?(strTemp1 = "ел", right(strName, strTemp3) + "л",
          ?(strTemp1 = "ев", left(strName, strTemp3) + "ьв", strName))) +
          ?(right(strName, 3) = "жан", "", trimr(mid("а у а оме           а у а еме " +
          ?(find("гжкхш", left(strTemp1, 1)) > 0, "и", "ы") + " е у ойе я ю я еме и е ю ейе и и ь ьюи и и ю ейи", 10 *
          ?((strTemp2 = 6) and (intSex = "ч"), 4, strTemp2) + 2 * intCase - 3, 2))));
endfunction

//*******************************************
// _strDecline(strName, intCase = 2, intSex = 3) export
//
// Параметры:
//  strName  - Строка. ФИО или профессия.
//  intCase  - Число. В каком падеже склонять.
//               0 - ???
//               2 - родительный(нет кого?).
//               3 - дательный(кому?).
//               4 - винительный(вижу кого?).
//               5 - творительный(кем?).
//               6 - предложный(о ком?).
//             Параметр необязателен.
//             По умолчанию - 2.
//  intSex   - Число. Пол.
//               1 - мужской.
//               2 - женский.
//               3 - средний ;)).
//               4 - если склоняем профессию.
//             Параметр необязателен.
//             По умолчанию - 3.
//
// Возвращаемое значение:
//  Строка. Переданое для склонения строка.
//          в нужном падеже.
//
// Описание:
//  Производит склонение по падежам
//  Фамилии и профессии людей.
//
function _strDecline(strName, intCase = 2, intSex = 3) export
   strName = trimall(strName);
   intSex = mid("ча" + right(strName, 1) + "ч", intSex, 1);
   strTemp1 = find(strName + " ", " ");
   if intCase < 0 then
       intCase = -intCase;
       strTemp2 = left(strName + " ", strTemp1 + 1) + ". ";
       strName = strreplace(strTemp2 + mid(strName, find(mid(strName + "  ", strTemp1 + 2), " ") +
                 strlen(strTemp2) - 1, 1) + ".", " .", "");
   endif;
   strTemp2 = left(strName, strTemp1 - 1);
   strTemp3 = right(strTemp2, 3);
   strTemp4 = right(strTemp3, 2);
   strTemp5 = right(strTemp4, 1);
   strTemp2 = ?(intSex = "а",
              ?((strTemp5 = "а") and (strTemp3 <> "ула") or (strTemp4 = "ая"), left(strTemp2, strTemp1 -
              ?(strTemp4 = "ая", 3, 2)) + mid(
              ?(strTemp4 = "ая", strTemp4, strTemp5 + " ") +
              ?(strTemp4 = "ка", "и е у ойе", "ойойу" +
              ?(strTemp4 = "ая", "ю", " ") + "ойой"), intCase * 2 - 1, 2), strTemp2),
              ?(find("ой ый ий", strTemp4) > 0,
              ?(find("Цц", mid(strTemp2, strTemp1 - 3, 1)) > 0, strDeclineAdd(strTemp2, intCase),
              left(strTemp2, strTemp1 - 3) + mid("   огоомуого" +
              ?((strTemp4 = "ий") or (strTemp3 = "гой") or (strTemp3 = "хой"), "и", "ы") + "м ом", intCase * 3 - 2, 3)),
              ?(find("вт", strTemp5) + find("ак ах ик им ин ич рг ын юк яр яш", strTemp4) > 0, strTemp2 +
              mid("  а у а " + mid("оыыые", find(" внтч", strTemp5) + 1, 1) + "ме", intCase * 2 - 1, 2), strTemp2)));
   strTemp5 = strTemp1 + find(mid(strName + " ", strTemp1 + 1), " ");
   return ?((intSex = "ч") and (strTemp1 = strlen(strName) + 1), strDeclineAdd(strName, intCase), trimall(strTemp2)) + " " +
          strDeclineAdd(mid(strName, strTemp1 + 1, strTemp5 - strTemp1 - 1), intCase, intSex) + " " +
          strDeclineAdd(mid(strName, strTemp5 + 1, strlen(strName) - strTemp5), intCase, intSex);
endfunction
6 колодина
 
23.11.06
06:16
на ИТС лежит обработка, уже использую ее - все ОК.
7 amnch
 
23.11.06
08:39
В БЕСТ-ПРО (зарплата) знаю реализовано так, когда заводишь нового человека есть возможность заполнить еще два варианта ФИО в Родительном и Дательном падеже.
А потом при выписке документов уже сам решаешь какую фамилию и в каком падеже подставлять.
8 litlex
 
23.11.06
12:01
на какой ИТС ке?
9 sergeante
 
23.11.06
12:52
(8) на ноябрьской есть. и на более ранних тоже. В разделе "Внешние компоненты..."
10 RomaH
 
naïve
23.11.06
13:01
11 litlex
 
23.11.06
14:53
нашел компоненту, но она не работает:
компонента = "NameDecl.dll";
       попытка
           загрузитьВнешнююКомпоненту(компонента);
           Объект = Новый("AddIn.NameDeclension");
       исключение
           сообщить("не удалось"+ описаниеОшибки());
       конецПопытки;
   Падеж =2;
   
       ПеременнаяВозврата = объект.Просклонять(ПеременнаяВозврата, Падеж);
12 litlex
 
23.11.06
14:55
Значение не является значением объектного типа (Просклонять)
13 litlex
 
23.11.06
14:55
она вообще во внешней обработке работает? кто вкурсе?
14 ssassa
 
24.11.06
11:57
У меня в 7-ке работает. Могу выслать пример внешнего отчета и библиотеку.
15 sergeante
 
24.11.06
12:35
(5) дал вполне рабочую функцию.
16 sergeante
 
24.11.06
12:44
А вообще NameDecl.dll надо закинуть в "X:\Program Files\1cv8\bin" и всё будет в шоколаде.
17 ssassa
 
24.11.06
14:18
А у меня нет диска Х.