gifts2017

Склонение ФИО и профессий

Опубликовал Дмитрий Башинский (bashinsky) в раздел Программирование - Практика программирования

Обработка склонения ФИО и профессий. Почти у каждого программиста возникает потребность просклонять ФИО или профессию. На просторах могучего интернета можно без труда найти функцию склонения. Но нельзя посмотреть как они работают, именно для этого была написана  эта обработка

Функции склонения взяты с сайта http://1c.proclub.ru/modules/mydownloads/personal.php?lid=1545&topic_id=4175&forum=6&viewmode=flat&order=DESC&cid=92&start=10.

Я всего лишь написал обработку позволяющую посмотреть какие параметры использует функция склонения и что из этого выходит.

Скачать файлы

Наименование Файл Версия Размер
СклонениеСлов.epf 129
.epf 14,64Kb
14.03.13
129
.epf 14,64Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Юрий Осипов (yuraos) 15.03.13 15:43
ЭХ!
ЛЮБЛЮ Я ЗАПИСЫВАТЬ ПЕРВЫЕ КОММЕНТАРИИ К СТАТЬЯМ!!!

А ПОЧЕМУ ???
----------------------------------------------------
А ПОТОМУ, ЧТО:
В сообщения рассылаемых сайтом по почте говорится, что Я АВТОР ПУБЛИКАЦИИ.
----------------------------------------------------
:))))

PS:
В функциях склонения используются какие-то внешние компоненты???
2. Дмитрий Башинский (bashinsky) 15.03.13 16:12
Нет. используется только перебор символов.
В сообщения рассылаемых сайтом по почте говорится, что Я АВТОР ПУБЛИКАЦИИ.
На счет этого можно поподробнее?
3. Алекс Ю (AlexO) 15.03.13 16:36
(0)
Я всего лишь написал обработку позволяющую посмотреть какие параметры использует функция склонения и что из этого выходит.

Так что вы написали на самом деле?
4. andrewks 15.03.13 16:40
(1) yuraos, не автор публикации, а автор ветки :-)
но это ещё цветочки. ведь автор ветки может ей управлять - закрыть, например. причём писал об этом на форуме по сайту несколько месяцев назад http://forum.infostart.ru/forum17/topic74490/ - ноль реакции
5. Дмитрий Башинский (bashinsky) 15.03.13 16:57
(3) AlexO,
Так что вы написали на самом деле?
написал обработку, в которой, в пользовательском режиме, можно выбрать, например, в каком падеже склонять слова, и увидеть, что из этого получится. А также посмотреть с какими параметрам нужно вызвать функцию склонения, чтобы получить долгожданный результат.
6. Дмитрий Башинский (bashinsky) 15.03.13 16:59
(1) yuraos, не автор публикации, а автор ветки :-)
но это ещё цветочки. ведь автор ветки может ей управлять - закрыть, например. причём писал об этом на форуме по сайту несколько месяцев назад http://forum.infostart.ru/forum17/topic74490/ - ноль реакции


Буду теперь знать при создании новых публикаций.
7. Юрий Осипов (yuraos) 15.03.13 18:23
(6) bashinsky,
вообщет-то вроде сейчас в спаме приходит что автор - ТЫ
(не знаю чего там статьи или ветки)
вроде эту дырку в "безопасности" вроде закрыли.
насчет остальных - не знаю...
:)))
8. Юрий Осипов (yuraos) 15.03.13 18:26
(4) andrewks,
нда...
техподдержка инфостартовская тяжела на подъем,
если функционал сайта изменять требуется.
:))
9. Дмитрий Башинский (bashinsky) 17.03.13 00:51
(7) yuraos, ветку комментариев я могу только отключить в настройках публикациях, больше ничего с ней сделать не могу
10. Александр (МимохожийОднако) 20.03.13 07:31
(2) bashinsky, покажи результат склонения "генеральный директор", "главный бухгалтер", "старший специалист отдела".
11. Дмитрий Башинский (bashinsky) 20.03.13 09:09
(10) МимохожийОднако, смотри результаты
Прикрепленные файлы:
12. Андрей Осин (anosin) 20.03.13 09:45
Теже проблемы что и у всех подобных функций, не имеют склонять неполное ФИО без отчества :(
Думал что вы доработали функционал, увы
13. Дмитрий Башинский (bashinsky) 20.03.13 10:30
(12) anosin,
Теже проблемы что и у всех подобных функций, не имеют склонять неполное ФИО без отчества :(
Почему же, может, только нужно указывать пол. Пол определяется автоматически, если есть отчество, если его нету, то нужно указать какого пола эта ФИО.
14. Andrey Budnik (azsw) 09.07.13 10:02
При скланении профессии заглавные буквы меняются на прописные.
15. Марина Чирина (chmv) 10.07.13 13:42
16. muha muhaha (fr.myha) 10.07.13 14:04
Спасибо =)
Делюсь функцией, возвращающая инициалы в дательном падеже

// функция в зависимости от переданного параметра возвращает ФИО
//
// Параметры:
// ФИО - строка. Если Можно вводить только Фамилию или Фимилия Имя или полное ФИО,
// разделитель пробел.
// Пол - Перечисления.Пол
// ТипВывода - числа 1: полное ФИО
// 2: Фамилия И.О.
// 3: И.О. Фамилия
// Возвращаемое значение:
// строка - результат форматирования
Функция обДательныйПадежНаСервере(ФИО,Пол,ТипВывода=0) Экспорт

ФИО_Падеж="";
Фамилия="";
Имя="";
Отчество="";
ФамилияПадеж="";
ИмяПадеж="";
ОтчествоПадеж="";
ФИО=СокрЛП(ФИО);
Длина=0;

Если СтрЧислоВхождений(ФИО," ") = 0 Тогда
Фамилия = ФИО;
Длина = 1;
ИначеЕсли СтрЧислоВхождений(ФИО," ") = 1 Тогда
Фамилия = Лев(ФИО,Найти(ФИО," ")-1);
Имя = СтрЗаменить(ФИО,Фамилия+" ","");
Длина = 2;
ИначеЕсли СтрЧислоВхождений(ФИО," ") = 2 Тогда
Фамилия = Лев(ФИО,Найти(ФИО," ")-1);
Имя = Лев(СтрЗаменить(ФИО,Фамилия+" ",""),Найти(СтрЗаменить(ФИО,Фамилия+" ","")," ")-1);
Отчество = СтрЗаменить(СтрЗаменить(ФИО,Фамилия+" ",""),Имя+" ","");
Длина = 3;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Неправильно записано ФИО. Проверьте пробелы!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;

Если (Нрег(Прав(Отчество,1))="ч") Тогда
ТекПол = Перечисления.Пол.Муж;
ИначеЕсли (Нрег(Прав(Отчество,1))="а") Тогда
ТекПол = Перечисления.Пол.Жен;
КонецЕсли;

Если ТекПол = Перечисления.Пол.Муж Тогда
КонецФамилии = Прав(Фамилия,1);
Если Нрег(КонецФамилии)="е"
ИЛИ Нрег(КонецФамилии) = "и"
ИЛИ Нрег(КонецФамилии) = "о"
ИЛИ Нрег(КонецФамилии) = "у"
ИЛИ Нрег(КонецФамилии) = "э"
ИЛИ Нрег(КонецФамилии) = "ю"
Тогда
ФамилияПадеж = Фамилия;
ИначеЕсли Нрег(КонецФамилии) = "я" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
ИначеЕсли Нрег(КонецФамилии) = "а" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
ИначеЕсли Нрег(КонецФамилии) = "й"
ИЛИ Нрег(КонецФамилии) = "ь"
Тогда
Если Нрег(Прав(Фамилия,2)) = "ий"
ИЛИ Нрег(Прав(Фамилия,2)) = "ый"
Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "ому";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "ю";
КонецЕсли
Иначе
Если Нрег(Прав(Фамилия,2)) = "ец" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "цу";
Иначе
ФамилияПадеж = Фамилия + "у";
КонецЕсли
КонецЕсли;

Если Имя = "Лев" Тогда
ИмяПадеж = "Льву";
ИначеЕсли Имя="Павел" Тогда
ИмяПадеж = "Павлу";
ИначеЕсли Имя = "Пётр" Тогда
ИмяПадеж = "Петру";
ИначеЕсли Нрег(Прав(Имя,1)) = "й"
ИЛИ Нрег(Прав(Имя,1)) = "ь"
Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "ю";
ИначеЕсли Нрег(Прав(Имя,1)) = "и" Тогда
ИмяПадеж = Имя;
ИначеЕсли Нрег(Прав(Имя,1)) = "а" Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "е";
Иначе
ИмяПадеж = Имя + "у";
КонецЕсли;
ОтчествоПадеж = Отчество + "у";
ИначеЕсли ТекПол = Перечисления.Пол.Жен Тогда
КонецФамилии = Прав(Фамилия,1);

Если Нрег(КонецФамилии) = "а" Тогда
Если Нрег(Прав(Фамилия,3)) = "ова"
ИЛИ Нрег(Прав(Фамилия,3))="ева"
Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "ой";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
КонецЕсли
ИначеЕсли Нрег(КонецФамилии) = "я" Тогда
Если Нрег(Прав(Фамилия,2)) = "ая" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "ой";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
КонецЕсли
Иначе
ФамилияПадеж = Фамилия;
КонецЕсли;

Если Нрег(Прав(Имя,1)) = "а" Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "е";
ИначеЕсли Нрег(Прав(Имя,1)) = "я" Тогда
Если Нрег(Прав(Имя,2)) = "ия" Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "и";
Иначе
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "е";
КонецЕсли
Иначе
ИмяПадеж = Имя;
КонецЕсли;
ОтчествоПадеж = Лев(Отчество,СтрДлина(Отчество)-1) + "е";
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Неправильно задан Пол. Проверьте!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;

Если Длина = 1 Тогда
ФИО_Падеж = "" + ФамилияПадеж;
ИначеЕсли Длина = 2 Тогда
Если ТипВывода = 1 Тогда
ФИО_Падеж = "" + ИмяПадеж + " " + ФамилияПадеж;
ИначеЕсли ТипВывода = 2 Тогда
ФИО_Падеж = "" + ФамилияПадеж + " " + Лев(ИмяПадеж,1) + ".";
ИначеЕсли ТипВывода = 3 Тогда
ФИО_Падеж = "" + Лев(ИмяПадеж,1) + "." + " " + ФамилияПадеж;
Иначе
ФИО_Падеж = "" + ФамилияПадеж + " " + ИмяПадеж;
КонецЕсли
ИначеЕсли Длина = 3 Тогда
Если ТипВывода = 1 Тогда
ФИО_Падеж = "" + ИмяПадеж + " " + ОтчествоПадеж + " " + ФамилияПадеж;
ИначеЕсли ТипВывода = 2 Тогда
ФИО_Падеж = "" + ФамилияПадеж + " " + Лев(ИмяПадеж,1) + "." + " " + Лев(ОтчествоПадеж,1) + ".";
ИначеЕсли ТипВывода=3 Тогда
ФИО_Падеж = "" + Лев(ИмяПадеж,1) + "." + " " + Лев(ОтчествоПадеж,1) + "." + " " + ФамилияПадеж;
Иначе
ФИО_Падеж = "" + ФамилияПадеж + " " + ИмяПадеж + " " + ОтчествоПадеж;
КонецЕсли
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Это не ФИО. Проверьте!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;
Возврат ФИО_Падеж;
КонецФункции
17. Денис Луцик (NAKIS) 18.12.13 17:12
Для автоматического формирования договоров пригодится, думаю))) Как дойду до этого вопроса - скачаю))
Автору спасибо за пример)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа