Текущее время: Чт, июн 19 2025, 08:19

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Падеж
СообщениеДобавлено: Ср, июн 22 2005, 10:11 
Гость
Господа, подскажите!
Нет ли какого-нибудь ФМ приводящего строку к нужному падежу


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:   Тема решена
СообщениеДобавлено: Ср, июн 22 2005, 10:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Мы пользуемся вот этой функцией (кто-то откуда-то принес). Мы прикинули, что в основном будут склоняться имена-фамилии и должности (например, в приказах). Для должностей грубо добавили таблицу в расчете на то, что склоняемых должностей будет не очень много (пока прогноз оправдывается). Для таблицы сделали диалог ведения и открыли ее в продуктиве, чтобы ответственный специалист по мере необходимости добавлял туда записи. Функция работает в системе 4.7 без Unicode, на Unicode не проверялась.

Code:
FUNCTION zhr_padej.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(GENDER) LIKE  P0002-GESCH
*"     VALUE(NACHN_IN) LIKE  P0002-NACHN OPTIONAL
*"     VALUE(VORNA_IN) LIKE  P0002-VORNA OPTIONAL
*"     VALUE(MIDNM_IN) LIKE  P0002-MIDNM OPTIONAL
*"     VALUE(OTHER_IN) OPTIONAL
*"     VALUE(PADEJ) TYPE  C
*"  EXPORTING
*"     VALUE(NACHN_OUT) LIKE  P0002-NACHN
*"     VALUE(VORNA_OUT) LIKE  P0002-VORNA
*"     VALUE(MIDNM_OUT) LIKE  P0002-MIDNM
*"     VALUE(OTHER_OUT)
*"  EXCEPTIONS
*"      NOT_FOUND
*"----------------------------------------------------------------------
  DATA: word_case TYPE ztru_word_case,
        l_length  TYPE i,
        l_length2 TYPE i,
        l_ok      TYPE i.

*  data:

  nachn_out = nachn_in.
  vorna_out = vorna_in.
  midnm_out = midnm_in.

  other_out = other_in.
  IF NOT other_out IS INITIAL
  AND padej CA 'РВД'.
    SELECT SINGLE * FROM  ztru_word_case
           INTO   word_case
           WHERE  word        = other_out.

    IF sy-subrc = 0.
      CASE padej.
        WHEN 'Р'. other_out = word_case-genitive.
        WHEN 'В'. other_out = word_case-accusative.
        WHEN 'Д'. other_out = word_case-dative.
      ENDCASE.
    ELSE.
      MESSAGE s083(zhr_pa)
        WITH padej other_out 'ZTRU_WORD_CASE'
        RAISING not_found.
    ENDIF.
  ENDIF.

  CASE gender.
    WHEN 2.

*фамилия
      IF NOT nachn_out IS INITIAL.

        l_length = STRLEN( nachn_out ) - 1.
        l_length2 = STRLEN( nachn_out ) - 2.

        DO 1 TIMES.

          CHECK nachn_out+l_length2(2) NE 'их'
          AND   nachn_out+l_length2(2) NE 'ИХ'
          AND   nachn_out+l_length(1) NE 'о'
          AND   nachn_out+l_length(1) NE 'О'.

          CASE padej.
            WHEN 'Д'.
              CASE nachn_out+l_length(1).
                WHEN 'а'. nachn_out+l_length(2) = 'ой'.
                WHEN 'А'. nachn_out+l_length(2) = 'ОЙ'.
              ENDCASE.

            WHEN 'Р'.
              CASE nachn_out+l_length(1).
                WHEN 'а'. nachn_out+l_length(2) = 'ой'.
                WHEN 'А'. nachn_out+l_length(2) = 'ОЙ'.
              ENDCASE.

          ENDCASE.
        ENDDO.
      ENDIF.

*Имя
      IF NOT vorna_out IS INITIAL.

        l_length = STRLEN( vorna_out ) - 1.

        CASE padej.
          WHEN 'Д'.
            CASE vorna_out+l_length(1).
              WHEN 'а'. vorna_out+l_length(1) = 'е'.
              WHEN 'я'. vorna_out+l_length(1) = 'и'.
              WHEN 'А'. vorna_out+l_length(1) = 'Е'.
              WHEN 'Я'. vorna_out+l_length(1) = 'И'.
            ENDCASE.

          WHEN 'Р'.
            CASE vorna_out+l_length(1).
              WHEN 'а'. vorna_out+l_length(1) = 'ы'.
              WHEN 'А'. vorna_out+l_length(1) = 'Ы'.
              WHEN 'я'. vorna_out+l_length(1) = 'и'.
              WHEN 'Я'. vorna_out+l_length(1) = 'И'.
            ENDCASE.

        ENDCASE.
      ENDIF.

*отчество
      IF NOT midnm_out IS INITIAL.

        l_length = STRLEN( midnm_out ) - 1.

        CASE padej.
          WHEN 'Д'.
            CASE midnm_out+l_length(1).
              WHEN 'а'. midnm_out+l_length(1) = 'е'.
              WHEN 'А'. midnm_out+l_length(1) = 'Е'.
            ENDCASE.

          WHEN 'Р'.
            CASE midnm_out+l_length(1).
              WHEN 'а'. midnm_out+l_length(1) = 'ы'.
              WHEN 'А'. midnm_out+l_length(1) = 'Ы'.
            ENDCASE.

        ENDCASE.
      ENDIF.

    WHEN 1.

*фамилия
      IF NOT nachn_out IS INITIAL.

        l_length = STRLEN( nachn_out ) - 1.
        l_length2 = STRLEN( nachn_out ) - 2.

        DO 1 TIMES.

          CHECK nachn_out+l_length2(2) NE 'их'
          AND   nachn_out+l_length2(2) NE 'ИХ'
          AND   nachn_out+l_length(1) NE 'о'
          AND   nachn_out+l_length(1) NE 'О'.

          CASE padej.
            WHEN 'Д'.
              CASE nachn_out+l_length2(2).
                WHEN 'ий'. nachn_out+l_length2(3) = 'ому'. EXIT.
                WHEN 'ИЙ'. nachn_out+l_length2(3) = 'ОМУ'. EXIT.
              ENDCASE.

              CASE nachn_out+l_length(1).
                WHEN 'ь'. nachn_out+l_length(1) = 'ю'. EXIT.
                WHEN 'Ь'. nachn_out+l_length(1) = 'Ю'. EXIT.
              ENDCASE.

              l_length = l_length + 1.
              nachn_out+l_length(1) = 'у'.

            WHEN 'Р'.
              CASE nachn_out+l_length2(2).
                WHEN 'ий'. nachn_out+l_length2(3) = 'ого'. EXIT.
                WHEN 'ИЙ'. nachn_out+l_length2(3) = 'ОГО'. EXIT.
              ENDCASE.

              CASE nachn_out+l_length(1).
                WHEN 'ь'. nachn_out+l_length(1) = 'я'. EXIT.
                WHEN 'Ь'. nachn_out+l_length(1) = 'Я'. EXIT.
              ENDCASE.

              l_length = l_length + 1.
              nachn_out+l_length(1) = 'а'.

          ENDCASE.
        ENDDO.
      ENDIF.

*Имя
      IF NOT vorna_out IS INITIAL.

        l_length = STRLEN( vorna_out ) - 1.

        CASE padej.
          WHEN 'Д'.
            CASE vorna_out+l_length(1).
              WHEN 'й'. vorna_out+l_length(1) = 'ю'. l_ok = 1.
              WHEN 'Й'. vorna_out+l_length(1) = 'Ю'. l_ok = 1.
              WHEN 'ь'. vorna_out+l_length(1) = 'ю'. l_ok = 1.
              WHEN 'Ь'. vorna_out+l_length(1) = 'Ю'. l_ok = 1.
            ENDCASE.

            IF l_ok NE 1.
              l_length = l_length + 1.
              vorna_out+l_length(1) = 'у'.
            ENDIF.

          WHEN 'Р'.
            CASE vorna_out+l_length(1).
              WHEN 'й'. vorna_out+l_length(1) = 'я'. l_ok = 1.
              WHEN 'Й'. vorna_out+l_length(1) = 'Я'. l_ok = 1.
              WHEN 'ь'. vorna_out+l_length(1) = 'я'. l_ok = 1.
              WHEN 'Ь'. vorna_out+l_length(1) = 'Я'. l_ok = 1.
            ENDCASE.

            IF l_ok NE 1.
              l_length = l_length + 1.
              vorna_out+l_length(1) = 'а'.
            ENDIF.

        ENDCASE.
      ENDIF.

*отчество
      IF NOT midnm_out IS INITIAL.

        l_length = STRLEN( midnm_out ) - 1.

        CASE padej.
          WHEN 'Д'.
            CASE midnm_out+l_length(1).
              WHEN 'ч'. midnm_out+l_length(2) = 'чу'.
              WHEN 'Ч'. midnm_out+l_length(2) = 'ЧУ'.
            ENDCASE.

          WHEN 'Р'.
            CASE midnm_out+l_length(1).
              WHEN 'ч'. midnm_out+l_length(2) = 'ча'.
              WHEN 'Ч'. midnm_out+l_length(2) = 'ЧА'.
            ENDCASE.

        ENDCASE.
      ENDIF.
  ENDCASE.

ENDFUNCTION.

Таблица ZTRU_WORD_CASE:
Code:
WORD   CHAR   100   0   Слово в именительном падеже
GENITIVE   CHAR   100   0   Слово в родительном падеже
ACCUSATIVE   CHAR   100   0   Слово в винительном падеже
DATIVE   CHAR   100   0   Слово в дательном падеже

_________________
С уважением, Сергей Королев


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 03 2005, 06:30 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, май 14 2005, 09:55
Сообщения: 73
Пол: Мужской
Тоже возникла необходимость склонения фамилии в приказе. Попробую приведенный выше функциональный модуль. Спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 03 2005, 08:51 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
JoHnY написал:
Тоже возникла необходимость склонения фамилии в приказе. Попробую приведенный выше функциональный модуль. Спасибо.

Проблема в том, что не все фамилии склоняются. :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 03 2005, 10:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
По-моему, проще, воспользовавшись богатством русского языка, изменить формулировку в приказе, чтобы ФИО ставилось всегда в именительном падеже. :roll:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, авг 08 2005, 15:36 
Гость
директору ООО "SAP-Узбекистан" г-ну Исрафил Бюль-Бюль Оглы ... :D

м.б. банально завести небольшую табличку (обычно ответственных руководителей вместе с их замами не так уж и много), где хранить ФИО и должность в трёх падежах (кто? кому? и т.п.), и флажком "активный руководитель" (т.е. чтобы во всех печатных формах автоматом вылазил один и тотже зам, на период отсутствия основного руководителя - пущай канцелярия транзакцией ведения галочку "активный руководитель", "активный главбух" и т.п. проставляет) ?


Пометить тему как нерешенную
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB