Склонение ФИО и должностей

06.02.12

Разработка - Универсальные функции

Бесплатное склонение ФИО и должностей на языке 1С.

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

Наименование Файл Версия Размер
down.zip
.zip 333,60Kb
297
.zip 333,60Kb 297 Скачать

Обработка предназначена для склонения ФИО и должностей.

Я решил сделать абсолютно бесплатную и свободную функцию склонения. Есть тестовая база, которая постоянно пополняется, чтобы вы были уверены, что функция работает правильно. Несложно адаптировать для 77.Учитывая, что для склонения нужен или словарь исключений, или ИИ, доступно простое ведение списка исключений.

 

 

Подобные проекты есть, но у них есть недостатки:

1.       Используется внешняя компонента, ее требуется зарегистрировать, для этого нужны права администратора (яркий пример – склонение в типовых конфигурациях)

2.       Отсутствует словарь исключений.

3.       Код на языке 1С запутанный и непрозрачный (Падеж «Крохотулька»)

4.       Некоторые разработки платные.

Обработка реализована в виде функции обСклонениеСтроки. В обработке «Тест склонения» можно протестировать мою функцию, обработку namedecl.dllот 1С и крохотульку.

Я использую подход, когда написана не только обработка, но и тесты к ней.

Форма редактирования таблицы исключений

Можно использовать константу (строка неограниченной длины) с именем «КонстантаГения1СДляИсключенийСклонения» для хранения исключений.

Таблицу исключений можно редактировать обработкой: «РедакторТаблицыИсключенийСклонений.epf»

 

 

Данные в константе хранятся в виде XML-строки вида:

 

 

1

Иванов

Д

Фамилия

М

RU

Иванидзе

 

 

2

Иванов

Р

Фамилия

М

RU

Иванидзе1

 

 

В событии «При открытии формы» вызывается функция общего модуля «ХукерНастройкаРедактораТаблицыИсключений(П)». Вы можете объявить эту функцию и перенастроить форму, заполнить списки выбора и т.п.

Доступные поля структуры П:

  • СписокПадеж – список падежей
  • СписокПол – список полов
  • СписокЯзык – список языков
  • СписокВид – список видов
  • ЭтаФорма – ссылка на форму
  • ЭтотОбъект – сам объект обработки
  • ТЗИсключения – таблица исключений

См. также

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4316    atdonya    22    

41

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3883    ke.92@mail.ru    16    

60

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8560    YA_418728146    6    

139

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2020    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16012    131    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7200    quazare    8    

108
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. noprogrammer 236 07.02.12 00:43 Сейчас в теме
А почему склонение не сделать через регистры правил?! чем описание "доступа" http://infostart.ru/public/115906/ отличается от склонения? Зачем плодить сущности в виде исключений?
2. fixin 4252 07.02.12 08:28 Сейчас в теме
(1) а почему автор "Крохотульки" не использовал регистры правил? Особенности реализации. Так и я - использовал реализацию в виде кода. Если быть точнее, то на момент реализации про регистры правил не знал, поэтому писал в коде. Но код более прозрачный чем Крохотулька. А исключения - для того, чтобы сделать не закрытый алгоритм, а устойчивый к реальной жизни (исключениям).
Помимо этого у меня есть тестирование обработок склонения, что тоже не мало важно...

Если хотите реализовать склонение через регистр правил - бог вам в помощью, я буду только за.
3. fomix 33 07.02.12 17:05 Сейчас в теме
Прикольное название zip файла для скачивания ))))
4. Boroda 90 10.02.12 22:10 Сейчас в теме
Хорошая, нужная, понятная вещица. Спасибо!
5. fixin 4252 10.02.12 22:19 Сейчас в теме
(4) хорошая была бы, если бы на регистр правил переложить, а сами правила в XML закатать. ;-)
но как бесплатный и полностью контролируемый код тоже неплоха.
6. ВРедная 44 23.04.12 08:23 Сейчас в теме
Для склонения подразделений не предполагается использовать?
Например, Администрация президента сколняется неправильно. А у Крохотульки правильно :)
7. fixin 4252 03.05.12 10:53 Сейчас в теме
(6) не предполагается. Но можно занести в исключения. ;-)
8. YuraVK 17.05.12 16:40 Сейчас в теме
украинский не поддерживает?
9. Belkin_Sergey 263 12.07.12 12:11 Сейчас в теме
А как просклоняется должность "Первый заместитель директора по корпоративным вопросам" или "Главный технический руководитель по охране труда и ТБ"?
10. Belkin_Sergey 263 12.07.12 12:13 Сейчас в теме
11. EarlyBird 6 15.08.12 08:00 Сейчас в теме
Я офигеваю с этих людей!
Скачало 74 человека, сказали спасибо (в виде плюса) только 17.
По ходу, 57 неблагодарных свиней детектед :)
12. fixin 4252 21.08.12 19:43 Сейчас в теме
(11) ну может остальным не понравилось. спокойно.
13. sumixam 24.08.12 14:28 Сейчас в теме
спасибо полезнаю вещь да ещё и бесплатно )))
14. itt 10.09.12 13:53 Сейчас в теме
надо попробывать, а то в БП нет склонения ФИО и подразделений
15. fixin 4252 10.09.12 14:28 Сейчас в теме
(14) Если бы делал счас, сделал бы через регистр правил, но и так недурно.
16. ponaroshku 16.10.12 06:15 Сейчас в теме
17. alsegor 09.01.13 15:50 Сейчас в теме
Спасибо за обработку. Склонение Гения 1С неправильно склоняет имя Ольга (может и другие).
В проверке используется имя Анна, которое склоняется правильно.
Для Ольги должно быть:
И: Ольга
Р: Ольги
Д: Ольге
В: Ольгу
Т: Ольгой
П: Ольге

А Гений склоняет так:
И: Ольга
Р: Ольгы
Д: Ольге
В: Ольгу
Т: Ольгой
П: Ольге

Усовершенствуйте, пожалуйста, проверку.
18. _n26__ 15.01.13 08:47 Сейчас в теме
Спасибо, будем тестировать. Очень нужная вещь!
19. dedicated 25 20.02.13 15:43 Сейчас в теме
Спасибо! Помогло решить задачу вывода в Дательном падеже должности и ФИО в печатной форме "М2" документа Доверенность. Я использую в печатной форме таким образом:
// Перевод Падежей встроенной функцией Гения
	С = обСлужРазбитьНаФИО(ФамилияИмяОтчествоДоверенного);
	Пол = Строка(Шапка.ФизЛицо.Пол);
	Если Пол = "Мужской" Тогда Пол = "М";
	ИначеЕсли Пол = "Женский" Тогда	Пол = "Ж";
	КонецЕсли;
	
	НовоеФамилия = обСклонениеСтроки(С.Фамилия, "Д", "Фамилия",Пол );
    НовоеИмя = обСклонениеСтроки(С.Имя,  "Д", "Имя",Пол);
	НовоеОтчество = обСклонениеСтроки(С.Отчество,  "Д", "Отчество",Пол);

	ФамилияИмяОтчествоДоверенного = НовоеФамилия+?(НовоеИмя="",""," ")+НовоеИмя+?(НовоеОтчество="",""," ")+НовоеОтчество;
	
	ДолжностьДоверенного = обСклонениеСтроки(ДолжностьДоверенного,  "Д", "Должность");
Показать


Если кому то поможет прикрепил файл печ. формы.
Прикрепленные файлы:
Доверенность.epf
Andrekaa; GrayCrane; +2 Ответить
20. TrinitronOTV 14 11.03.13 10:55 Сейчас в теме
(19) dedicated, спасибо большое
21. AlexO 135 15.03.13 16:40 Сейчас в теме
Сергей, а что так некорректно отозвались о Крохотульке, "уперев" оттуда 2\3 контента по примерам склонения? :)
22. fixin 4252 15.03.13 16:56 Сейчас в теме
(21) AlexO, что именно я оттуда упер? дядя?
мне пришлось разбирать алгоритмы склонения самому.
и я взял за основу не крохотульку, а код на каком-то SQL-подобном языке с SQL.RU
Ибо в крахотульке разобраться невозможно, код специалом так написан.
23. 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) + "." + " " + ФамилияПадеж;
Иначе
ФИО_Падеж = "" + ФамилияПадеж + " " + ИмяПадеж + " " + ОтчествоПадеж;
КонецЕсли
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Это не ФИО. Проверьте!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;
Возврат ФИО_Падеж;
КонецФункции
24. SotNick 21 30.01.14 18:30 Сейчас в теме
Спасибо, отличная обработка!
25. user766040 25.07.18 08:17 Сейчас в теме
Полезная обработка. Спасибо автору!
Оставьте свое сообщение