![]() |
![]() |
![]() |
|
ФИО в родительном падеже | ☑ | ||
---|---|---|---|---|
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
|
А у меня нет диска Х.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |