Как сделать склонение по падежам в excel? Склонение фио Функции выполняющие склонение фио access.

Здесь можно получить ответы на вопросы по Microsoft Excel 57638 471543
44519 357828
Лучшие избранные темы с основного форума 14 80
Если вы - счастливый обладатель Mac 😉 217 1059

21 Сен 2018 06:21:34

Раздел для размещения платных вопросов, проектов и задач и поиска исполнителей для них. 2100 13379
Если Вы скачали или приобрели надстройку PLEX для Microsoft Excel и у Вас есть вопросы или пожелания - Вам сюда. 310 1587
808 11620
Обсуждение функционала, правил и т.д. 269 3464

Сейчас на форуме (гостей: 590, пользователей: 12, из них скрытых: 3) ,

Сегодня отмечают день рождения (37), (32), (28), (37), (36), (52)

Всего зарегистрированных пользователей: 83105

Приняло участие в обсуждении: 31843

Всего тем: 105875

склонение по падежам в excel

В разделе Другие языки и технологии на вопрос можно ли автоматически склонять по падежам существительные в формате Excel заданный автором Зуфар лучший ответ это Доброго времени суток.
Если речь идет о ФИО, наименованиях должностей или подразделений, то можно. Правда, это инструмент скорее для разработчика. Впрочем, юзер тоже может разобраться. В примерах есть готовые макросы для Excel.
Удачи!
PS Ищите в гугле по ключу «Склонение фамилий, имен и отчеств по падежам»

22 ответа

Привет! Вот подборка тем с ответами на Ваш вопрос: можно ли автоматически склонять по падежам существительные в формате Excel

Ответ от Вровень
Нет, такая возможность в Ехсel не поддерживается. Но для частного случая можно использоваться функцию IF для выбора одного или другого варианта.

Ответ от Просцениум
Вы находитесь в категории «Программирование», так что никто не может вам запретить написать свою функцию на VBA, которая будет заниматься этим богоугодным делом. И как раз решение задачи в таком формате - вполне реально.

Ответ от христосоваться
слышал, что реформа русского языка прошла, но чтобы ввели «существительные в формате Excel» даже представить себе не мог))))))

Пользовательская функция для MS Excel

Склонение ФИО по падежам

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

Область применения:

Функцию удобно использовать для автоматизации формирования документов в MS Excel (или облегчения создания их вручную), где ФИО необходимо указывать не в именительном падеже: различного рода договоры, кассовые ордера, квитанции, акты сверок, приказы, протоколы, доверенности и т.д.

Функция также незаменима, если средствами автоматизации реализовано формирование перечисленных выше документов в приложении MS Word на основании данных, находящихся в таблицах MS Excel.

Примеры использования:

  • в договоре: «в лице руководителя Баранова Петра Вячеславовича «
  • в кассовых ордерах: «выдано Гнатюку Павлу Васильевичу «, «получено от Гриценко Ирины Сергеевны «
  • в доверенности: «доверяю управление траспортным средством Смирницкому Виталию Валерьевичу «
  • в приказе: «назначить на должность Степашову Ольгу Николаевну «
  • в протоколе: «доклад подготовлен Дворжецким Никитой Ивановичем «

Что реализовано:

  • корректно склоняются фамилии со всеми распространенными на территории стран СНГ окончаниями «-ов», «-ев», «-ин», «-ян(ц)», «-ский(-цкий)», «-ской(-цкой)», «-ый», «-ых», «-их», «-ец», «-нко», «-ук», «-юк», «-ич», «-ия» и др.: Павлов, Зиновьев, Гагарин, Петросян, Высоцкий, Трубецкой, Цой, Задорожный, Садовничий, Седых, Долгих, Сосковец, Нестеренко, Гончарук, Данилюк, Рабинович, Данелия, Кваша, Врубель, Козак, Казачок и т.д., а также соответствующие женские фамилии
  • учитываются отличия в склонении мужских и женских фамилий: Ткачу Виктору и Ткач Светлане, Козовцу Антону и Козовец Екатерине
  • корректно обрабатываются составные фамилии: например, Мамин-Сибиряк, Салтыков-Щедрин, Немирович-Данченко, Лебедев-Кумач
  • не склоняются иноязычные фамилии: Галуа, Моруа, Дефо, Дали, Безе, Верди, Гарсиа, Хэмингуэй и пр.
  • успешно обрабатываются отчества с частицами «-оглы», «-кызы», «ибн»: Мамедов Полад Муртуза оглы -> Мамедовым Поладом Муртуза оглы, Гассан Абдурахман ибн Хаттаб -> Гассаном Абдурахманом ибн Хаттабом, Абу Али ибн Сина -> Абу Али ибн Синой
  • автоматически по отчеству определяется пол (мужской/женский) и исходя из этого выбираются соответствующие правила склонения
  • для ситуаций, когда пол автоматически определить затруднительно (отчество иностранное или отсутствует), можно указать пол в качестве параметра функции
  • возможен вывод в сокращенном виде «фамилия + инициалы»: Полозову Н. А., Васильевой А. К., Дворжецкому Е. Е.
  • возможность использования как в виде надстройки (можно использовать во всех файлах на данном рабочем месте), так и в виде кода, внедренного в файл (функция будет работать в данном файле на любом рабочем месте - удобно, если файл, например, отправляется контрагенту)
  • открытый программный код - при желании можно изучать алгоритм либо модифицировать

Как подключить?

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

  1. открыть файл MS Excel, в котором требуется использовать функцию
  2. войти в редактор VBA по нажатию горячей клавиши «Alt + F11» или через меню:
  3. в главном меню редактора VBA выбрать пункт «File» -> «Import file…»:
  4. в появившемся окне выбора файла выбрать файл bdgFIOPropisyu.bas и нажать кнопку «Открыть»:

Все, программный код импортирован и его можно использовать.

Как использовать?

Вот еще несколько примеров ее использования:

Ситуации, когда работа функции может быть некорректной :

Несмотря на то, что ситуаций, когда работа функции может быть неудовлетворительной, ниже перечислено немало, вероятность столкновения с таким ФИО в практической работе достаточно мала, т.к. в 99,9% случаев фамилии, встречающиеся на территории России, склоняются по общим правилам.
Кроме того, следует заметить, что другие алгоритмы и программы также не могут гарантировать корректность результата в 100% случаев - русский язык слишком велик и могуч, чтобы быть описанным набором логических правил (смотрите ниже про влияние положения ударения в слове, происхождения фамилии, про зависимость написания женской формы фамилии от написания мужской формы и т.д.).

  • По правилам русского языка склонение мужских и женских иноязычных фамилий, оканчивающихся на «-а» и «-я», зависит от места ударения в слове и происхождения фамилии.
    Все фамилии, кончающиеся на неударное «-а» после согласных, склоняются: Сенека -> Сенеки, Петрарка -> Петрарки, Сметана -> Сметаны, Куросава -> Куросавы, Глинка -> Глинки, Окуджава -> Окуджавы и др. Склонение фамилий с ударным «-а» на конце зависит от ее происхождения: не склоняются фамилии французского происхождения: Дюмá, Дегá, Фермá, Петипá и т.д., фамилии иного происхождения (из славянских и восточных языков) склоняются: Митта -> Митты, Кваша -> Кваши, Сковорода -> Сковороды, Кочерга -> Кочерги, Хамза -> Хамзы и др.
    Аналогично, французские по происхождению фамилии с ударным «-я» на конце несклоняемы: Золя, Труайя. Все прочие фамилии на «-я» склоняемы: Головня -> Головни, Данелия -> Данилии, Берия -> Берии, Гойя -> Гойи.
    Поскольку программно определить положения ударения и происхождение фамилии невозможно, в алгоритме программы принято допущение, что все подобные фамилии склоняются по общим правилам. Поэтому французские фамилии с ударением на окончании обрабатываются программой некорректно: Дюма -> Дюмы, Золя -> Золи, Петипа -> Петипы.
  • Мужские фамилии, оканчивающиеся на «-ий», «-ый», «-ой», склоняются как прилагательные Горький -> Горького, Блаженный -> Блаженного, Броневой -> Броневого. Исключения составляют случаи, когда фамилия с таким окончанием - нарицательное существительное (Козодой, Водопой, Гений, Сценарий) либо иноязычна по происхождению (Цой, Цхой, Чой). Так как программно не определить, является ли фамилия подобным исключением, условно принято, что все фамилии с окончаниями «-ий», «-ый», «-ой» склоняются как прилагательные. В подавляющем большинстве случаяв это верно, однако в исключительных случаях с фамилиями-существительными результат функции будет ошибочным: Козодой Яков -> Козодого Якова, Гений Стефан -> Генего Стефана.
    Однако, в виде исключения в алгоритме учтено склонение фамилий с данными окончаниями и длиной менее 5 букв (преимущественно корейских по происхождению): Цой Виктор -> Цоя Виктора.
  • В ряде случаев корректное склонение женской фамилии, оканчивающейся на «-ина», «-ова», возможно только, если известно склонение соответствующей ей мужской фамилии: Жемчужина Людмила, Малина Светлана могут склоняться как в обычной форме: Жемчужина Людмила -> Жемчужиной Людмилы, Малина Светлана -> Малиной Светланы (если соответствующими мужскими фамилиями являются, например, Жемчужин Борис и Малин Олег), так и в форме существительного: Жемчужина Людмила -> Жемчужины Людмилы, Малина Светлана -> Малины Светланы (если мужские формы фамилии, например, Жемчужина Борис и Малина Олег).
    Учесть подобные нюансы в алгоритме невозможно, поэтому все женские фамилии функцией обрабатываются по единым правилам (как прилагательные), что в отдельных случаях может приводить к неверным результатам.
  • Похожая ситуация обстоит с мужскими и женскими фамилиями, оканчивающимися на «-ов(а)», «-ев(а)», «-ин(а)», которые омонимичны нарицательным существительным: Боров, Лев, Филин, Барин, Корова, Сова, Картина, Перина, Старина и т.д.). Ни по каким формальным признакам программно установить идентичность фамилии и существительного нет возможности, поэтому склонение подобных фамилии по единым общим правилам приводит к некорректным результатам вида: Лев Павел -> Левым Павлом, Филин Сергей -> Филиным Сергеем, Корова Ксения -> Коровой Ксении, Сова Ольга -> Совой Ольги, Картина Алла -> Картиной Аллы.
  • Мужские фамилии, оканчивающиеся на мягкий знак, склоняются: Врубель Михаил -> Врубеля Михаила, Гоголь Николай -> Гоголя Николая и т.д. Однако при склонении окончания таких фамилий зависят от того, существительными какого рода - мужского, женского или среднего - они являются.
    Алгоритмически определить род существительного не представляется возможным, поэтому в тех случаях, когда мужская фамилия является существительным женского или среднего рода, функция будет работать некорректно: Сталь Иван -> Сталя Ивана, Полынь Виктор -> Полыня Виктора.
  • Образование творительного падежа фамилий, оканчивающихся на «-жа», «-ца», «-ча», «-ша», «-ща», зависит от ударения в слове: если это окончание является безударным, то при склонении оно меняется на «-ей»: Капица Петр -> Капицей Петром, Туча Федор -> Тучей Федором; если же окончание удареное, оно заменяется на «-ой»: Кваша Игорь -> Квашой Игорем, Свеча Иван -> Свечой Иваном. Аналогичная ситуация с фамилиями, оканчивающимися на «-ец»: без ударения окончание меняется на «-ем»: Палец Виктор -> Пальцем Виктором; под ударением - на «-ом»: Сосковец Олег -> Сосковцом Олегом.
    Как было сказано выше, определить положения ударения в слове программно нельзя, поэтому в алгоритме программы принято допущение, что в словах, оканчивающихся на «-жа», «-ца», «-ча», «-ша», «-ща», окончание безударное (таких слов больше), то есть творительный падеж всегда образуется окончанием «-ей». Напротив, в словах, оканчивающихся на «ец», принято, что окончание находится под ударением, то есть склонение будет с окончанием «-ом». Соответственно, в остальных случаях будут наблюдаться ошибки вида: Квашей Игорем, Свечей Иваном, Пальцом Виктором.
  • Согласно правилам русского языка первая часть двойной русской фамилии склоняется, если она сама по себе может употребляться как фамилия: творчество Мамина-Сибиряка, рассказ Салтыкова-Щедрина, опера Римского-Корсакова и т.д. В противном случае она не изменяется: картина Ван-Дейка, похождения Дон-Жуана, оруженосец Дон-Кихота и др. Так, например, в фамилии Семёнов-Тян-Шанский склоняется первая часть, но не вторая: труды Семёнова-Тян-Шанского.
    Опять же, определить, является ли составная часть фамилии самостоятельной, алгоритмически возможности нет, поэтому для работы принято допущение, что все части составной фамилии следует склонять (в большинстве случаев это так), что в ряде ситуаций приводит к ошибкам: Вана-Дейка, Дона-Кихота, Семёнова-Тяна-Шанского.
  • Иностранные фамилии, оканчивающиеся на «-ов» и «-ин» в творительном падеже меняют окончание на «-ом»: Бенджамином Франклином, Чарльзом Дарвином, Чарли Чаплином, Александром Грином. «Русские» же фамилии с аналогичными окончаниями заканчиваются на «-ым»: Ивановым, Гагариным, Фонвизиным и т.д. Несмотря на то, что перечисленные выше фамилии (Франклин, Дарвин, Чаплин, Грин) в виде исключений учтены в алгоритме, есть небольшая вероятность, что встретится какая-либо другая аналогичная иностранная фамилия - в таком случае результат функции будет некорректен.

Правила склонения фамилий и имен использованы в соответствии с разделами 13.1 и 13.2 работы Н. А. Еськовой «Трудности словоизменения существительных. Учебно-методические материалы к практическим занятиям по курсу «Язык современной печати» (Госкомитет печати СССР. Всесоюзный институт повышения квалификации работников печати. М., 1990).

Цена: 1500 рублей

В файле - процедуры для 7.7 и для 8.х. В процедуру передаётся строка в формате Фамилия Имя Отчество.

UPD 26.11.10: с благодарностью - новая версия функции. Я - не тестировала! Вопросы по работе этой версии - к нему, выкладывать сам почему-то не хочет:)

Функция ПадежФИО(Знач ФИО,Падеж=1,ТолькоИнициалы=Ложь, Знач пРазделитель=".")
Если ТипЗнч(ФИО)<>Тип("Строка") Тогда
Сообщить("Неверная строка передана ""падежу ФИО!"""); Возврат ФИО;
КонецЕсли;

// уберем множественные пробелы
Пока 1=1 Цикл
ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
Если Найти(ФИО," ")=0 Тогда Прервать КонецЕсли;
КонецЦикла;

Если ТипЗнч(Падеж)=Тип("Строка") Тогда
пад=СокрЛП(НРег(Лев(Падеж,1)));
Если Найти("ирдвтп",пад)=0 Тогда

КонецЕсли;
ИначеЕсли ТипЗнч(Падеж)=Тип("Число") Тогда
Если (Падеж<1) или (Падеж>6) Тогда
Сообщить("Неверный падеж передан ""падежу ФИО""!"); Возврат ФИО;
КонецЕсли;
пад=Падеж-1;
КонецЕсли;

ФИО=СокрЛП(НРег(ФИО)); // так удобнее

// свой анализатор состава
Фамилия="";
Для й=1 По СтрДлина(ФИО) Цикл
символс=Сред(ФИО,й,1);

Фамилия=Фамилия+символс;
КонецЦикла;
ы=й+1; // перешли пробел
Имя="";

символс=Сред(ФИО,й,1);
Если символс=" " Тогда Прервать КонецЕсли;
Имя=Имя+символс;
КонецЦикла;
ы=й+1; // перешли второй пробел
Отчество="";
Для й=ы По СтрДлина(ФИО) Цикл
символс=Сред(ФИО,й,1);
Если символс=" " Тогда Прервать КонецЕсли;
Отчество=Отчество+символс;
КонецЦикла;

// теперь имеем раздельно Фамилию, Имя и Отчество.
// начинается собственно блок анализа содержания и падежей

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

// проанализируем пол М/Ж
Если Прав(Отчество,1)="а" Тогда Пол="Ж" Иначе Пол="М" КонецЕсли;

// создадим структуру таблицы, хранящей окончания слов
ток=Новый ТаблицаЗначений;
ТипСтроки=Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(3));
ТипЧисла=Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(1,0));
ток.Колонки.Добавить("СтарОк",ТипСтроки); // старое окончание 2 символа
// колонки, хранящие новые окончания слов
ток.Колонки.Добавить("р"); // родительный
ток.Колонки.Добавить("д"); // дательный
ток.Колонки.Добавить("в"); // винительный
ток.Колонки.Добавить("т"); // творительный
ток.Колонки.Добавить("п"); // предложный
// для указания, сколько букв с конца слова отсечь,
ток.Колонки.Добавить("КолвоСрез",ТипЧисла); // кол-во срезаемых букв

Гласные="аеэоуиыяюьъ"; // список гласных букв в виде строки

// ======== обработаем фамилию ==========
// заполним таблицу данными для фамилии

Если пол="М" Тогда
строток=ток.Добавить(); // иванов
строток.СтарОк="*s";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // красинский
строток.СтарОк="*й";
строток.р="ого"; строток.д="ому"; строток.в="ого"; строток.т="им"; строток.п="ом";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // всемогущий
строток.СтарОк="щий";
строток.р="его"; строток.д="ему"; строток.в="его"; строток.т="им"; строток.п="ем";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // белый
строток.СтарОк="ый";
строток.р="ого"; строток.д="ому"; строток.в="ого"; строток.т="ым"; строток.п="ом";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // палей
строток.СтарОк="*й";

строток.КолвоСрез=1;

Строток=ток.Добавить(); // рабинович
строток.СтарОк="*ч";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // починок, зализняк
строток.СтарОк="*к";
строток.р="ка"; строток.д="ку"; строток.в="ка"; строток.т="ком"; строток.п="ке";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // шинкарь
строток.СтарОк="*ь";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.КолвоСрез=1;

Строток=ток.Добавить(); // перельман, оганесян
строток.СтарОк="*н";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // баранкин
строток.СтарОк="ин";
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ым"; строток.п="е";
строток.КолвоСрез=0;

ИначеЕсли Пол="Ж" Тогда
строток=ток.Добавить(); // склодовская
строток.СтарОк="ая";
строток.р="ой"; строток.д="ой"; строток.в="ую"; строток.т="ой"; строток.п="ой";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // иванова
строток.СтарОк="*а";
строток.р="ой"; строток.д="ой"; строток.в="у"; строток.т="ой"; строток.п="ой";
строток.КолвоСрез=1;
КонецЕсли;


Если не ПустаяСтрока(Фамилия) Тогда
пб=Прав(Фамилия,3); кол="СтарОк"; // ищем по ней
новФамилия=Фамилия; // если ничего не изменится, так и будет
стро=ток.Найти(пб,кол);
Если стро<>


Иначе
// строго не нашли по трем последним символам, ищем по двум символам только по последней
пб=Прав(Фамилия,2);
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);
Иначе // если по двум не нашли, ищем по одному
пб="*"+Прав(пб,1);
стро=ток.Найти(пб,кол);
Если стро<>
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);


стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли по виду
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
новФамилия="";
КонецЕсли;

// ======== обработаем имя ==========
// заполним таблицу данными для имени
ток.Очистить();

Если Пол="М" Тогда
// обработаем исключения
Если Имя="лев" Тогда Имя="льв" КонецЕсли;
Если Имя="павел" Тогда Имя="павл" КонецЕсли;

Строток=ток.Добавить(); // сергей
строток.старок="*й";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // иван + лев + павел
строток.старок="*s";
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ом"; строток.п="е";
строток.колвосрез=0;

Строток=ток.Добавить(); // никита
строток.старок="*а";

строток.колвосрез=1;

Строток=ток.Добавить(); // лука
строток.старок="ка";

строток.колвосрез=1;

Строток=ток.Добавить(); // иеремия
строток.старок="ия";

строток.колвосрез=1;

Строток=ток.Добавить(); // илья
строток.старок="*я";

строток.колвосрез=1;

Строток=ток.Добавить(); // игорь
строток.старок="*ь";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.колвосрез=1;

ИначеЕсли Пол="Ж" Тогда
// обработаем исключения
//Если Имя="ольга" Тогда Имя="ольгь" КонецЕсли;

Строток=ток.Добавить(); // ирина
строток.старок="*а";
строток.р="ы"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // инга, ольга
строток.старок="га";
строток.р="и"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // эсфирь
строток.старок="*ь";
строток.р="и"; строток.д="и"; строток.в="ь"; строток.т="ью"; строток.п="и";
строток.колвосрез=1;

Строток=ток.Добавить(); // мария
строток.старок="ия";
строток.р="и"; строток.д="и"; строток.в="ю"; строток.т="ей"; строток.п="и";
строток.колвосрез=1;

Строток=ток.Добавить(); // софья
строток.старок="*я";
строток.р="и"; строток.д="е"; строток.в="ю"; строток.т="ей"; строток.п="е";
строток.колвосрез=1;
КонецЕсли;

// таблица заполнена. считаем 2 последних буквы и поищем их
Если не ПустаяСтрока(Имя) Тогда
пб=Прав(Имя,2); кол="СтарОк"; // ищем по ней
новИмя=Имя; // если ничего не изменится, так и будет
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли строгое сразу


Иначе // строго не нашли, ищем только по последней
пб="*"+Прав(пб,1);
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли по последней
Основа=Лев(Имя,СтрДлина(Имя)-стро.КолвоСрез);
новИмя=Основа+СокрЛП(стро[пад]);
Иначе // по последней не нашли, ищем по виду буквы
пб="*"+?(Найти(Гласные,Прав(пб,1))=0,"s","g");
стро=ток.Найти(пб,кол);
Если стро<>Неопределено=1 Тогда // нашли по виду
Основа=Лев(Имя,СтрДлина(Имя)-стро.КолвоСрез);
новИмя=Основа+СокрЛП(стро[пад]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
новИмя="";
КонецЕсли;

// ======== обработаем отчество, тут проще ==========
ток.Очистить();

Если Пол="М" Тогда
строток=ток.Добавить();
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ем"; строток.п="е";
строток.колвосрез=0;
ИначеЕсли Пол="Ж" Тогда
строток=ток.Добавить();
строток.р="ы"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;
КонецЕсли;
Если не ПустаяСтрока(Отчество) Тогда
Основа=Лев(Отчество,СтрДлина(Отчество)-ток.КолвоСрез);
новОтчество=Основа+СокрЛП(ток[пад]);
Иначе
новОтчество="";
КонецЕсли;

Если ТолькоИнициалы Тогда
новИмя=Лев(новИмя,1); новОтчество=Лев(новОтчество,1);
КонецЕсли;

// установим первые буквы верхним регистром
новФамилия=ВРег(Лев(новФамилия,1))+Сред(новФамилия,2);
новИмя=ВРег(Лев(новИмя,1))+Сред(новИмя,2);
новОтчество=ВРег(Лев(новОтчество,1))+Сред(новОтчество,2);

// и теперь всё вместе
Если ТолькоИнициалы Тогда // если задан формат инициалов
новФИО=новФамилия+" "+новИмя+пРазделитель+новОтчество+пРазделитель;
Иначе
новФИО=новФамилия+" "+новИмя+" "+новОтчество;
КонецЕсли;

Если Найти(ФИО, ".") Тогда // На тот случай, если входной параметр Фамилию с инициалами. Инициалы не трогаем
новФИО = новФамилия + " " + ТРег(Имя) + Трег(Отчество);
КонецЕсли;

Возврат СокрЛП(новФИО);
КонецФункции