AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2006, 16:29   #1  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от OmenSore
Честной народ, кто встречался с отчётностью в которой склоняются ФИО, авось кто видел подобные вещи и концептуальное решение подобных задач, поделись
буду благодарен.
Ну а если серьёзно, интересуют подходы любой из систем (не только Dynamics) ...
Спасибо заранее.
В инфо-предприятии со склонением ФИО борьба идет с переменным успехом не один год, пара примеров:
Цитата:
Сегодня наткнулась на смешную ошибку.
В справке для получения ссуды в сбербанке при склонении имени "ЛЕВ" ИП выдает текст: "...Выдана Демину Леву Николаевичу...".
Цитата:
ЧАЙКА ВЕРА ИВАНОВНА-фамилия интересно склоняется -туда же
Точного правила сейчас сказать не могу, но женские фамилии подобного вида не склоняются.
Цитата:
-А фамилия ЗОЗО тоже склоняется?Это нет три тысячи тридцатый )
-Хм... Ты еще ИТОГО просклоняй!
Цитата:
А если его зовут Атал Вихари Ваджпаи ? ))
ИМХО: лучше не париться
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 05.09.2006, 16:43   #2  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Библиотека, автор по моему - Пукин А.:
Код:
ФУНКЦИЯ  ТИП_СТРОКА: Склонение ( ПЕРЕМ ТИП_СТРОКА : Фамилия,Имя,Отчество,Пол,Падеж) 
Склонение=Фамилия+" "+Имя+" "+Отчество
       п=Пол
       имя=ЗАГЛ(Имя)                                                 
        L[1]="Б";
        L[2]="В";
        L[3]="Г";
        L[4]="Д";
        L[5]="Ж";
        L[6]="З";
        L[7]="К";
        L[8]="Л";
        L[9]="М";
        L[10]="Н";
        L[11]="П";
        L[12]="Р";
        L[13]="С";
        L[14]="Т";
        L[15]="Ф";
        L[16]="Х";
        L[17]="Ц";
        L[18]="Ч";
        L[19]="Ш";
        L[20]="Щ";
        //Гласные
        L[21]="А";
        L[22]="Е";
        L[23]="И";
        L[24]="Й";
        L[25]="О";
        L[26]="У";
        L[27]="Ы";
        L[28]="Э";
        L[29]="Ю";
        L[30]="Я";        
        L[31]="Ь";
        L[32]="Ъ";
      /////////////

      Фамилия=ЗАГЛ(Фамилия)
      Последняя=ПОДСТР(Фамилия,ДЛИНА(Фамилия),1)
      ДвеПоследних=ПОДСТР(Фамилия,ДЛИНА(Фамилия)-1,2)
      ТриПоследних=ПОДСТР(Фамилия,ДЛИНА(Фамилия)-2,3)

      Флаг=0;
       ЦИКЛ ДЛЯ(и=1,32)
       ЕСЛИ L[и]=Последняя ТО
       СТОП
       КОНЕЦ_ЕСЛИ;
       КОНЕЦ_ЦИКЛА
       ЕСЛИ и<=20 ТО
       ТипБуквы=1;//согласная
       ИНАЧЕ
       ТипБуквы=2;//гласная
       КОНЕЦ_ЕСЛИ
//////////////// Исключения ////////////////////
       ЕСЛИ ДЛИНА(Фамилия)<=2 ТО
       Родительный=Фамилия;//фамилии типа Ге, Че
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="ИХ") ИЛИ  (ДвеПоследних="ЫХ") ТО
       Родительный=Фамилия;//сибирские фамилии
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ Последняя="О" ИЛИ  Последняя="Ц" ТО
       Родительный=Фамилия;//украинские фамилии       Чубарец
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ ДвеПоследних="УА" ТО
       Родительный=Фамилия;//фамилии типа Стуруа
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ ДвеПоследних="ИА" ТО
       Родительный=Фамилия;//фамилии типа Туташхиа
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="ЖА") И (п="Ж") ТО
       Родительный=Фамилия;// женские фамилии типа Ганжа
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ ТриПоследних="ДЗЕ" ТО
       Родительный=Фамилия;//грузинские фамилии типа Гогадзе
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;            
       ЕСЛИ ТриПоследних="ИЛИ" ТО
       Родительный=Фамилия;//грузинские фамилии типа Габошвили
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="ОЙ") И (п="М") И (ДЛИНА(Фамилия)=3) ТО
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Я";//фам. типа Цой
       Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Ю";
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="ОЙ") И (п="Ж") И (ДЛИНА(Фамилия)=3) ТО
       Родительный=Фамилия; //фам. типа Цой
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;
///////////////////////////////////////////////////////////////////////
       ЕСЛИ (п="М") И (ТипБуквы=1)  И (Последняя<>"Ц") ТО //мужскую склоняем  Чубарец
       Родительный=Фамилия+"А";
       Дательный=Фамилия+"У";
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (п="М") И (ДвеПоследних="ДЬ") ТО //В память о красноярском губернаторе
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Я";//Лебедя
       Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Ю";
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (п="Ж") И (ТипБуквы=1) ТО //женскую не склоняем
       Родительный=Фамилия;
       Дательный=Фамилия;
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (п="Ж") И (Последняя="А") ТО
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"У";
       Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"ОЙ";
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (п="М") И (Последняя="А") ТО //фам. типа Соткилава
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"У";
       Дательный= ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Е";
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="ОЙ") И (п="М") И (ДЛИНА(Фамилия)>3) ТО
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"ГО";
       Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"МУ";
       Флаг=1;    
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ (ДвеПоследних="АЯ") И (п="Ж") И (ДЛИНА(Фамилия)>3) ТО
       Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-2)+"УЮ";
       Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-2)+"ОЙ";
       Флаг=1;
       КОНЕЦ_ЕСЛИ;
       ЕСЛИ Флаг=0 ТО  //если не сработало ни одно условие
       Родительный=Фамилия;
       Дательный=Фамилия;
       КОНЕЦ_ЕСЛИ;

      //////////////
        // Склонение имени
        Последняя=ПОДСТР(имя,ДЛИНА(имя),1);
        ДвеПоследних=ПОДСТР(имя,ДЛИНА(имя)-1,2);
        Флаг=0;
        ЦИКЛ ДЛЯ(и=1,32)
        ЕСЛИ L[и]=Последняя ТО
        СТОП
        КОНЕЦ_ЕСЛИ;
        КОНЕЦ_ЦИКЛА;
        ЕСЛИ и<=20 ТО
        ТипБуквы=1;//согласная
        ИНАЧЕ;
        ТипБуквы=2;//гласная
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="М") И (ТипБуквы=1) ТО ///Иван, Петр и т.д.
        РодительныйИмя=имя+"А";
        ДательныйИмя  =имя+"У";
        Флаг=1;
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="М") И (Последняя="Й") ТО ///Сергей, Дмитрий и т.д.
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Я";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
        Флаг=1;
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="М") И (Последняя="А") ТО ///Фома
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"У";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
        Флаг=1;
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="М") И (Последняя="Я") ТО ///Илья
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
        Флаг=1;
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="М") И (Последняя="Ь") ТО ///Игорь
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Я";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
        Флаг=1;    
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="Ж") И (Последняя="А") ТО ///Татьяна, Людмила и т.д.
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"У";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
        Флаг=1;    
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="Ж") И (Последняя="Я") ТО ///Зоя, Наталья и т.д.
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
        Флаг=1;    
        КОНЕЦ_ЕСЛИ;
        ЕСЛИ (п="Ж") И (ДвеПоследних="ИЯ") ТО ///Наталия,Виктория и т.д.
        РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
        ДательныйИмя  =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"И";
        Флаг=1; 
        КОНЕЦ_ЕСЛИ;
       ЕСЛИ Флаг=0 ТО
        РодительныйИмя=имя;
       ДательныйИмя  =имя;
        КОНЕЦ_ЕСЛИ;
/////////склонение отчества///////
    отчество=ЗАГЛ(Отчество)
    ЕСЛИ (п="М") ТО
    РодительныйОтчество=отчество+"А";
    ДательныйОтчество  =отчество+"У";
    КОНЕЦ_ЕСЛИ;    
    ЕСЛИ (п="Ж") ТО 
    РодительныйОтчество=ПОДСТР(отчество,1,ДЛИНА(отчество)-1)+"У";
    ДательныйОтчество  =ПОДСТР(отчество,1,ДЛИНА(отчество)-1)+"Е";
    КОНЕЦ_ЕСЛИ;                
    ЕСЛИ Падеж="Р" ТО Склонение=Родительный+" "+РодительныйИмя+" "+РодительныйОтчество КОНЕЦ_ЕСЛИ
    ЕСЛИ Падеж="Д" ТО Склонение=Дательный+" "+ДательныйИмя+" "+ДательныйОтчество КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Теги
hrm, падежи, расчеты с персоналом, склонение, управление персоналом, фио

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как программно поюзать все формы Daido DAX: Программирование 3 02.08.2007 13:39
Крякозябры в Аксапте! Все уже перепробовал((( StoneRoller DAX: Администрирование 28 22.09.2003 16:30
Первое знакомство. Демо версия. Как посмотреть все документы в одном журнале? AleAndrea DAX: Функционал 5 01.09.2003 14:03
Как же все-таки организованиы Query и QueryRun? VIS DAX: Программирование 4 03.07.2003 15:22
И все же снова о репликации Избранный DAX: Администрирование 3 11.06.2003 10:34

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:25.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.