Каталог решений - Полезные функции. Склонение (должность и фамилия подписантов). Любой язык

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык

В наличии

Уехал директор в командировку, отпуск… , оставил доверенность на хозяйственные операции на другого сотрудника.
Все договора и другие  документы в обмороке — "подписант" теперь другой, по тексту тоже много правок…
Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" .
У меня всего-то крутится  пять фигурантов … Нет простого, наглядного и всепогодного варианта без  языкового барьера.
Всем процессом управляет  пользователь.

Категория:

Описание

Три падежа :  именительный, родительный, дательный.
Сделано подобно получению наименований валют.

Строка 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) ;
    конецЕсли;    
……………………………..



На картинке показан документ с  вкладкой «Подписи(замена)». Если значения полей заполнены — идет подмена должности, фамилии, полученных из соответствующих справочников конфигурации.

has been added to your cart:
Оформление заказа