Три падежа : именительный, родительный, дательный.
Сделано подобно получению наименований валют.
Строка 1: "Иванов Иван Иванович, Иванова Ивана Ивановича, Иванову Ивану Ивановичу".
Строка 2: "директор, директора, директору".
Строка3 : "заместитель директора по общим вопросам, заместителя директора по общим вопросам, заместителю директора по общим вопросам";
// Получение Должности для текста, подписи
// ПолучитьДолжностьСписок(ктоЭто_,Падеж=0,тип=0)
// Параметры:
// КтоЭто_ : - строка : "директор, директора, директору"
// Падеж : - 1-Именительный,2- родительный,3- дательный.
// Тип : - 0- первая буква БОЛЬШАЯ ВРЕГ : "Директор", 1 - маленькая НРЕГ : "директор"
//
&НаСервере
Функция ПолучитьДолжностьСписок(ктоЭто_,Падеж=0,тип=0)
Если Падеж=0 тогда Падеж=1;конецесли;
Должность="";
Если значениезаполнено(ктоЭто_) тогда
// страховка
ктоэто__=стрЗаменить(ктоэто_," ",""); ктоэто=стрЗаменить(ктоэто__," ","");
Если СтрЧислоВхождений(ктоЭто,",") >0 тогда // три варианта по падежам - обязательно
// Именительный
Где=Найти(КтоЭто,",");
Первый=Лев(КтоЭто,где-1) ; остаток2=сред(КтоЭто,где+1,стрдлина(ктоЭто)) ;
// родительный
Где=Найти(остаток2,",");
второй=Лев(остаток2,где-1) ;остаток3=сред(остаток2,где+1,стрдлина(остаток2));
// дательный
третий= остаток3;
Если Падеж=1 тогда
Должность=Первый ;
иначеЕсли Падеж=2 тогда
Должность=второй ;
иначе
Должность=третий ;
конецесли;
Если тип=0 тогда
Должность=Врег(сред(Должность,1,1)) +Нрег(сред(Должность,2,стрдлина(Должность)-1)) ;
иначе
Должность=нрег(сред(Должность,1,1)) +Нрег(сред(Должность,2,стрдлина(Должность)-1)) ;
конецесли;
конецесли;
конецесли;
возврат Должность;
Конецфункции
// Получение фамилии для текста, подписи
// ПолучитьФИОСписок(ктоЭто_,Падеж=0,тип=0)
// Параметры:
// КтоЭто_ : - строка : "Иванов Иван Иванович, Иванова Ивана Ивановича, Иванову Ивану Ивановичу"
// Падеж : - 1-Именительный,2- родительный,3- дательный.
// Тип : - 0- кратко : "Иванов И.И.", 1 - полно : "Иванов Иван Иванович"
//
&НаСервере
Функция ПолучитьФИОСписок(ктоЭто_,Падеж=0,тип=0)
Если Падеж=0 тогда Падеж=1;конецесли;
Подписант="";
Если значениезаполнено(ктоЭто_) тогда
// страховка
ктоэто__=стрЗаменить(ктоэто_," "," "); ктоэто = стрЗаменить(ктоэто_," "," ");
Если СтрЧислоВхождений(ктоЭто,",") >0 тогда // три варианта по падежам - обязательно
// найдем свой падеж
// 1 Именительный
Где=Найти(КтоЭто,",");
Первый=Лев(КтоЭто,где-1) ;
остаток2=сред(КтоЭто,где+1,стрдлина(ктоЭто)) ;
// 2 родительный
Где=Найти(остаток2,",");
второй=Лев(остаток2,где-1) ;
остаток3=сред(остаток2,где+1,стрдлина(остаток2)) ;
// 3 дательный
третий= остаток3;
Если Падеж=1 тогда
Подписант=Первый ;
иначеЕсли Падеж=2 тогда
Подписант=второй ;
иначе
Подписант=третий ;
конецесли;
// по умолчанию : Иванов Иван Иванович
Где=Найти(Подписант," ");
Фамилия=Лев(Подписант,где-1) ;
остаток2=сред(Подписант,где+1,стрдлина(Подписант)) ;
Где=Найти(остаток2," ");
Имя=Лев(остаток2,где-1) ;
Остаток3=сред(остаток2,где+1,стрдлина(остаток2)) ;
Отчество= остаток3;
Если тип = 0 тогда // Если нужно кратко Иванов И. И.
Подписант= Фамилия+" "+ Врег(лев(Имя,1))+"."+вРег(Лев(Отчество,1))+".";
конецесли;
конецесли;
конецесли;
возврат Подписант;
Конецфункции
Фрагмент программного кода :
.....................................
// Это основной вариант, берем данные из справочников
ФиоКлиент=Ссылка.клиент.ДиректорОрганизации ;
ФиоБрокер=Ссылка.Организация.Директор ;
// Это замена подписанта и где надо по тексту документа
Если Значениезаполнено(ссылка.ФиоКлиент) тогда
ФиоКлиент = ПолучитьФИОСписок(ссылка.ФиоКлиент,2,1) ;
конецЕсли;
Если Значениезаполнено(ссылка.ФиоБрокер) тогда
ФиоБрокер = ПолучитьФИОСписок(ссылка.ФиоБрокер,2,1) ;
конецЕсли;
...................................
На картинке показан документ с вкладкой "Подписи(замена)". Если значения полей заполнены - идет подмена должности, фамилии, полученных из соответствующих справочников конфигурации.