Автор Тема: Функции работы со строками  (Прочитано 38060 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Функции работы со строками
« : Октябрь 23, 2008, 11:10:21 am »
В общем отдельно поскладываю тут ФМ, относящие к обработки строк в SAP R/3. Для начала ссылочка на то что уже как бы относится к этому разделу и уже было описано.

C147_REPLACE - Замена по маске, можно воспользоваться оператором REPLACE, ну а можно вызвать ФМ, как описано в этим разделе You are not allowed to view links. Register or Login
« Последнее редактирование: Октябрь 23, 2008, 11:19:46 am от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками
« Ответ #1 : Октябрь 23, 2008, 11:16:44 am »
RKD_WORD_WRAP - Функция разбивает длинную строку по словам на строки заданной длины. При этом можно или вернуть просто 3 строки, ну если мы знаем что суммарная строка при разбивке будет не слишком длинной или же возвращается внутренняя таблица со строками заданной длины.

Пример вызова:
Код: You are not allowed to view links. Register or Login
DATA: l_line(1000) TYPE c VALUE 'TEST LINE STRING OFF STOP GET ABAP'.
DATA: BEGIN OF lt_lines OCCURS 10,
  line(10) TYPE c,
END OF lt_lines.

CALL FUNCTION 'RKD_WORD_WRAP'
  EXPORTING
    textline                  = l_line
    delimiter                 = ' '
    outputlen                 = 10
* IMPORTING
*   OUT_LINE1                 =
*   OUT_LINE2                 =
*   OUT_LINE3                 =
  TABLES
    out_lines                 = lt_lines
 EXCEPTIONS
   outputlen_too_large       = 1
   OTHERS                    = 2.
В общем на выходе в таблице lt_line будет содержаться 4 строки не длиннее 10 символов
Код: You are not allowed to view links. Register or Login
TEST LINE           
STRING             
OFF STOP               
GET ABAP
Из особенностей если к примеру одно из слов будет длиннее чем 10 символов например TEST_ABAP_STRING, то функция разобъет такую строку на две, не зависимо от заданного разделителя в переменной delimiter.
Код: You are not allowed to view links. Register or Login
TEST_ABAP_
STRING
Таким образом гарантируется, что ничего не потеряется, и что длина строки результата не привысит заданный размер.
« Последнее редактирование: Октябрь 23, 2008, 11:19:58 am от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками - TERM_CONTROL_EDIT
« Ответ #2 : Октябрь 23, 2008, 02:52:46 pm »
TERM_CONTROL_EDIT - Функциональный модуль позволяющий добавить в программу вызов текстового редактора. Опять же можно нарисовать и свой экран с соответствующими экранными элементами, но уже есть готовое решение.
Код: You are not allowed to view links. Register or Login
DATA: BEGIN OF lt_textlines OCCURS 10,
        lines(100) TYPE c,
END OF lt_textlines.

CALL FUNCTION 'TERM_CONTROL_EDIT'
     EXPORTING
          titel          = 'Небольшая заметка'
          langu          = space
     TABLES
          textlines      = lt_textlines
     EXCEPTIONS
          user_cancelled = 1
          OTHERS         = 2.
titel - Заголовок окна с редактором
langu - Вообще-то типа код языка, но если язык не задавать тогда будет редактор в модальном окне как на рисунке STERM_CONTROLS_1.png, а вот если задать код языка, тога будет выведен редактор форматного текста как на рисунке STERM_CONTROLS_2.png. Идентификатор текста GLOSSAR.
lt_textlines - Таблица содержащая введенный текст, кстати если таблица заполнить перед вызовом модуля, то текст выведется в редакторе.

В общем везде где надо быстро запросить у пользователя текстовую заметку, можно применять.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками (POPUP_TO_GET_VALUE)
« Ответ #3 : Март 11, 2009, 04:31:04 pm »
POPUP_TO_GET_VALUE - Запрос значения параметра у пользователя. Удобный ФМ, если нужно запросить у пользователя например код завода или какую-то строку данных. Функциональный модуль даже проводит некоторую проверку введенных значений на тип, т.е. если например поле ввода типа NUMC, то модуль ожидает ввода только цифр. На входе передаем имя таблицы и ссылочное поле, а так же можно значение по умолчанию и получаем окошко как в примере:
Код: You are not allowed to view links. Register or Login
DATA: l_werks LIKE mseg-werks,
      l_answer(1) TYPE c.

l_werks = '2000'.
CALL FUNCTION 'POPUP_TO_GET_VALUE'
     EXPORTING
          fieldname           = 'WERKS'
          tabname             = 'MSEG'
          titel               = 'Ввод значения'
          valuein             = l_werks
     IMPORTING
          answer              = l_answer
          valueout            = l_werks
     EXCEPTIONS
          fieldname_not_found = 1
          OTHERS              = 2.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
WRITE: / l_werks.
Если нажать кнопку "Отменить", тогда в параметре l_answer = 'C' иначе будет SPACE. Что хорошо заголовок и подпись к полю система вытаскивает сама из домена.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками (POPUP_TO_GET_ONE_VALUE)
« Ответ #4 : Март 11, 2009, 04:40:41 pm »
POPUP_TO_GET_ONE_VALUE - Еще одна вариация на тему запроса строки от пользователя, тут все проще строка может быть  длинной не более 30 символов, а так же можно задать три строки описания по требованиям к вводимому тексту, типа что мы ждем от пользователя на вводе.
Код: You are not allowed to view links. Register or Login
DATA: l_answer(1) TYPE c,
      l_value1 LIKE spop-varvalue1.

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'
     EXPORTING
          textline1      = 'Первая строка описания'
          textline2      = 'Вторая строка описания'
          textline3      = 'Третья строка описания'
          titel          = 'Ввод значения'
          valuelength    = 20
     IMPORTING
          answer         = l_answer
          value1         = l_value1
     EXCEPTIONS
          titel_too_long = 1
          OTHERS         = 2.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
WRITE: / l_value1, l_answer.
На выходе l_answer = 'A', значит пользователь отменил ввод, и строка l_value1 будет пустой. Если же пользователь подтвердил ввод тогда l_answer = 'J', а введенной значение находится в l_value1.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками (CLOI_PUT_SIGN_IN_FRONT)
« Ответ #5 : Июнь 02, 2009, 11:19:21 am »
CLOI_PUT_SIGN_IN_FRONT - Функция из раздела, а чтобы было... короче находит положение минуса в числе и выводит этот самый минус перед числом. В общем-то все просто как пять копеек  ;)
Код: You are not allowed to view links. Register or Login
DATA: ln_num TYPE d VALUE '100-'.

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
     CHANGING
          value = ln_num.

WRITE: / ln_num.
Короче результат на рисунке ниже... хотя конечно операторами WRITE, сейчас редко кто формирует или вообще умеет формировать отчеты, а на экранах и маской можно выдать положение числа  ::)

Оффлайн Паганель

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
SAP HELP - Функции работы со строками
« Ответ #6 : Июль 07, 2009, 05:53:57 pm »
тут коллега по работе наткнулся, по моему ничего так подборка….
You are not allowed to view links. Register or Login

Database   
READ_TEXT    Reads a text module and passes it to the specified work areas.
READ_TEXT_INLINE    Like READ_TEXT. In addition, it passes the first few text lines to a second lines table.
READ_REFERENCE_LINES    Reads the text lines of a reference text and passes them to the specified lines table.
SAVE_TEXT    Saves a text.
DELETE_TEXT    Deletes a text.
COPY_TEXTS    Copies a text.
SELECT_TEXT    Finds the texts for an application object.
   
Administration   
REFER_TEXT    Creates a reference to another text.
RENAME_TEXT    Renames the text in the text memory.
COMMIT_TEXT    Creates for all texts in the text memory the call of an appropriate update module.
INIT_TEXT    Initializes the internal work areas for a text.
   
Editor call   
EDIT_TEXT    Calls the text editor.
EDIT_TEXT_INLINE    Merges the inline lines with the other text lines and calls the text editor.
   
Consistency check   
CHECK_TEXT_AUTHORITY    Checks the authorization for standard texts.
CHECK_TEXT_ID    Checks whether the specified text ID is valid.
CHECK_TEXT_LANGUAGE    Checks whether the specified text language is valid.
CHECK_TEXT_OBJECT    Checks whether the specified text object is valid.
CHECK_TEXT_NAME    Checks whether the specified text name is valid.
   
Editing functions   
TEXT_SYMBOL_COLLECT    Finds the variable symbols that occur in a text.
TEXT_SYMBOL_PARSE    Checks whether a character string is a SAPscript symbol.
TEXT_SYMBOL_REPLACE    Replaces symbols in a text with their values.
TEXT_SYMBOL_SETVALUE    Defines the value of a text symbol.
TEXT_CONTROL_REPLACE    Replaces control statements in a text (IF, CASE...).
TEXT_INCLUDE_REPLACE    Replaces INCLUDE control statements by the text lines of the corresponding text.
   
Print   
PRINT_TEXT    Formats a text for output.
PRINT_TEXT_ITF    Prints a text in the internal ITF format.
   
Form functions   
OPEN_FORM    Opens the form output.
CLOSE_FORM    Ends the form output.
START_FORM    Starts a new form.
WRITE_FORM    Calls a form element.
WRITE_FORM_LINES    Writes text lines into a form.
END_FORM    Ends the current form.
CONTROL_FORM    Sends a control statement to the form.
READ_FORM_ELEMENTS    Finds the elements of a form.
READ_FORM_LINES    Passes the lines of a form elements into an internal lines table.
   
Conversion   
CONVERT_TEXT    Converts texts between different formats.
CONVERT_TEXT_R2    Converts texts between SAPscript and the R/2 format.
CONVERT_OTF_MEMORY    Converts the formatted text (OTF format).
EXCHANGE_ITF    Exchanges the paragraph and character formats of a text with those of another style or form.
   
Transfer   
IMPORT_TEXT    Imports texts.
EXPORT_TEXT    Exports texts.
TRANSFER_TEXT    Uploads/Downloads texts.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Функции работы со строками
« Ответ #7 : Ноябрь 25, 2009, 05:09:37 pm »
Искали как привести в верхний регистр .... куча функций .....
А реально вызывается одна конструкция

Код: You are not allowed to view links. Register or Login
TRANSLATE i_input TO UPPER CASE.
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • http://www.noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Функции работы со строками
« Ответ #8 : Ноябрь 25, 2009, 05:18:20 pm »
Видимо я ошибся.
Лучше использовать специализированный модуль, например AIPC_CONVERT_TO_UPPERCASE, либо получать текущую локаль (см. AIPC_CONVERT_TO_UPPERCASE)....

Вообщем посмотрел код функции и понял что все таки надо использовать нормальные функции, ниже с моими заключениями

Код: You are not allowed to view links. Register or Login
* buffers for current locale setting
  DATA:  l_langu_tmp    TYPE spras,
         l_country_tmp  TYPE land1,
         l_modifier_tmp TYPE cpsublocal.

* get current locale settings
* Сохраняем в временную переменную, текущую локаль
  GET LOCALE LANGUAGE l_langu_tmp
             COUNTRY  l_country_tmp
             MODIFIER l_modifier_tmp.

* set locale for given language (needed for upper-case translation)
* Устанавливаем переданную в функцию локаль
  SET LOCALE LANGUAGE i_langu.

* translate to upper-case
* транслируем :-)
  TRANSLATE i_input TO UPPER CASE.
  e_output = i_input.

* restore old locale settings
" востанавливаем схраненную локаль
  SET LOCALE LANGUAGE l_langu_tmp
             COUNTRY  l_country_tmp
             MODIFIER l_modifier_tmp.

Вообщем как я понял, если вызывать TRANSLATE i_input TO UPPER CASE то испольузуется текущая локаль..

Дима/Уукрул я прав?
---
FYI (особенно это касается рекрутеров)
Я НЕ ЗАНИМАЮСЬ САП, уже более 4х лет!
По вопросам SAP - НЕ БЕСПОКОИТЬ
---
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками
« Ответ #9 : Ноябрь 25, 2009, 09:15:57 pm »
You are not allowed to view links. Register or Login
Вообщем как я понял, если вызывать TRANSLATE i_input TO UPPER CASE то испольузуется текущая локаль..
Да текущая локаль вроде как... из SY-LANGU

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: SAP HELP - Функции работы со строками
« Ответ #10 : Ноябрь 25, 2009, 09:17:41 pm »
You are not allowed to view links. Register or Login
тут коллега по работе наткнулся, по моему ничего так подборка….
Только пользы от него... вот если бы ты это дело оформил нормально по вызовам, а так друг я тебе подскажу как это получить. SE37 а дальше ввести *TEXT* и там еще даже больше может будет, но толку то...

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Функции работы со строками
« Ответ #11 : Июнь 13, 2011, 10:43:55 am »
Я тоже добавлю, нашел как-то - мне в некоторых случаях оказалась нужной:

Код: You are not allowed to view links. Register or Login
DATA:
    ld_xvar1          TYPE string,
    ld_xvar2          TYPE string,
    lv_text            TYPE string.

        lv_text = cl_reca_string_services=>fill_text_with_vars(
          id_text = 'Текст с параметрами: кто = &1; час = &2; минута = &3; сколько лет = &4 '
          id_var1 = sy-uname
          id_var2 = sy-datum
          id_var3 = sy-uzeit
          id_var4 = 28 ).

или параметры отдельно
Код: You are not allowed to view links. Register or Login
    ld_xvar1 = cl_reca_string_services=>write_field( sy-datum ).
    ld_xvar2 = cl_reca_string_services=>write_field( sy-uzeit ).

Результат будет такой:
    lv_text = Текст с параметрами: кто = Sed0Y; час = 13.06.2011; минута = 10:44:15; сколько лет = 28
    ld_xvar1 = 13.06.2011
    ld_xvar2 = 10:44:15

« Последнее редактирование: Июнь 13, 2011, 10:52:01 am от Sed0Y »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками - ISHMED_SPLIT_STRING
« Ответ #12 : Сентябрь 12, 2013, 11:15:22 am »
ISHMED_SPLIT_STRING - Разбивает длинную строку  на подстроки заданной длины с заданным разделителем.
Код: You are not allowed to view links. Register or Login
DATA: lt_substrings LIKE rn1text OCCURS 1 WITH HEADER LINE,
      l_string(1204) TYPE c VALUE 'qwerqwer qwerqwer qwerqwer t sdgsdf sfhdf twe fsdgdfg wertyer gsdfhg wert aasdfgsdfg sasdfgadf 2345 agadsga asdfasdf'.

CALL FUNCTION 'ISHMED_SPLIT_STRING'
  EXPORTING
    string        = l_string
    length        = 72
    delimiter     = ' '
  TABLES
    t_substrings  = lt_substrings
  EXCEPTIONS
    can_not_split = 1
    OTHERS        = 2.

Кстати в эту же копилку ФМ: ISH_N2_SPLIT_TEXTSTRING - разделяет сразу строку на строки по 72 символа.

PS 03.12.2013: Модуль содержит проблемы, почему-то в последней строке добавляет символ @ при обработке. В общем лучше остановится на использовании ранее описанного CALL FUNCTION 'RKD_WORD_WRAP'
« Последнее редактирование: Декабрь 03, 2013, 12:49:51 am от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
MESSAGE_TEXT_BUILD - Позволяет на основании класса сообщения, номера и параметров, сформировать текстовую строку сообщения для вывода например пользователю. Вызов довольно простой, передаем класс и номер сообщения с параметрами. На выходе получаем message_text_output в виде сформированной строки для вывода пользователям. Функция довольно простая, можно и самому написать, оператор REPLACE никто не отменял, но если уже есть... то почему бы и нет.
Код: You are not allowed to view links. Register or Login
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = gs_return-id
        msgnr               = gs_return-number
        msgv1               = gs_return-message_v1
        msgv2               = gs_return-message_v2
        msgv3               = gs_return-message_v3
        msgv4               = gs_return-message_v4
      IMPORTING
        message_text_output = gs_return-message.

Оффлайн Aleksey

  • Newbie
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYears
Re: Функции работы со строками
« Ответ #14 : Декабрь 09, 2016, 08:46:37 am »
Вот простой способ разделить строку на подстроки по разделителю
пример  с ";"
Код: You are not allowed to view links. Register or Login
DATA:a TYPE string,   
     itab TYPE TABLE OF string.
a = '111;2222;33333;444444;555555;6666666'.
split a AT ';' INTO TABLE itab.

Результат во вложении:
« Последнее редактирование: Декабрь 09, 2016, 08:49:06 am от Aleksey »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 727
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функции работы со строками - CATSXT_SIMPLE_TEXT_EDITOR
« Ответ #15 : Январь 27, 2017, 02:45:21 pm »
CATSXT_SIMPLE_TEXT_EDITOR - Вывод редактора ввода длинных текстов в диалоговом окне, а так же отображение уже введенных текстов в режиме просмотра. В общем-то фактически аналог описанного модуля из этой ссылки: You are not allowed to view links. Register or Login .Отличия, это немного меньше по размеру и позволяет задать позицию вывода окна редактора. По праметрам все достаточно просто:

IM_TITLE - Заголовок окна редактора
IM_DISPLAY_MODE = space - режим редактирования, любой другой символ, режим просмотра
IM_START_COLUMN - Колонка вывода окна редактора
IM_START_ROW - Строка вывода окна редактора

Изменяемые параметры

CH_TEXT[] - Таблица выводимого текста или результата обработки текста после закрытия окна.

Из недоработок в данном модуле следует отменить, что вы не получаете никакой информации о том, подтвердил пользователь изменения или вышел без подтверждения по кнопке CANCEL. Вам будет возвращен результат работы пользователя в виде измененного текста, т.е. я что-то поменял, нажал отменить и на выходе получил все изменения в CH_TEXT[], хотя вроде как пользователь вызвал отмену ввода. Поэтому для изменяемого параметра CH_TEXT[] используем локальную копию, а после завершения модуля проверяем системную переменную SY-UCOMM. Если она равноа CX_CANC, значит была нажата кнопка отмены, а если  нажали кнопку ОК, тогда значение переменной будет CX_CONT.

Пример вывода окна на рисунке ниже:


« Последнее редактирование: Сентябрь 10, 2019, 03:38:46 pm от Uukrul »