Полезные функции. Склонение (должность и фамилия подписантов). Любой язык
Уехал директор в командировку, отпуск… , оставил доверенность на хозяйственные операции на другого сотрудника.
Все договора и другие документы в обмороке — "подписант" теперь другой, по тексту тоже много правок…
Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" .
У меня всего-то крутится пять фигурантов … Нет простого, наглядного и всепогодного варианта без языкового барьера.
Всем процессом управляет пользователь.
- Описание
- Подробнее
Описание
Три падежа : именительный, родительный, дательный.
Сделано подобно получению наименований валют.
Строка 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) ;
конецЕсли;
……………………………..
На картинке показан документ с вкладкой «Подписи(замена)». Если значения полей заполнены — идет подмена должности, фамилии, полученных из соответствующих справочников конфигурации.
