Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Октябрь 23, 2008, 11:10:21 am
-
В общем отдельно поскладываю тут ФМ, относящие к обработки строк в SAP R/3. Для начала ссылочка на то что уже как бы относится к этому разделу и уже было описано.
C147_REPLACE - Замена по маске, можно воспользоваться оператором REPLACE, ну а можно вызвать ФМ, как описано в этим разделе http://sapforum.biz/index.php/topic,88.0.html
-
RKD_WORD_WRAP - Функция разбивает длинную строку по словам на строки заданной длины. При этом можно или вернуть просто 3 строки, ну если мы знаем что суммарная строка при разбивке будет не слишком длинной или же возвращается внутренняя таблица со строками заданной длины.
Пример вызова:
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 символов
TEST LINE
STRING
OFF STOP
GET ABAP
Из особенностей если к примеру одно из слов будет длиннее чем 10 символов например TEST_ABAP_STRING, то функция разобъет такую строку на две, не зависимо от заданного разделителя в переменной delimiter.
TEST_ABAP_
STRING
Таким образом гарантируется, что ничего не потеряется, и что длина строки результата не привысит заданный размер.
-
TERM_CONTROL_EDIT - Функциональный модуль позволяющий добавить в программу вызов текстового редактора. Опять же можно нарисовать и свой экран с соответствующими экранными элементами, но уже есть готовое решение.
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 - Таблица содержащая введенный текст, кстати если таблица заполнить перед вызовом модуля, то текст выведется в редакторе.
В общем везде где надо быстро запросить у пользователя текстовую заметку, можно применять.
-
POPUP_TO_GET_VALUE - Запрос значения параметра у пользователя. Удобный ФМ, если нужно запросить у пользователя например код завода или какую-то строку данных. Функциональный модуль даже проводит некоторую проверку введенных значений на тип, т.е. если например поле ввода типа NUMC, то модуль ожидает ввода только цифр. На входе передаем имя таблицы и ссылочное поле, а так же можно значение по умолчанию и получаем окошко как в примере:
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. Что хорошо заголовок и подпись к полю система вытаскивает сама из домена.
-
POPUP_TO_GET_ONE_VALUE - Еще одна вариация на тему запроса строки от пользователя, тут все проще строка может быть длинной не более 30 символов, а так же можно задать три строки описания по требованиям к вводимому тексту, типа что мы ждем от пользователя на вводе.
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.
-
CLOI_PUT_SIGN_IN_FRONT - Функция из раздела, а чтобы было... короче находит положение минуса в числе и выводит этот самый минус перед числом. В общем-то все просто как пять копеек ;)
DATA: ln_num TYPE d VALUE '100-'.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = ln_num.
WRITE: / ln_num.
Короче результат на рисунке ниже... хотя конечно операторами WRITE, сейчас редко кто формирует или вообще умеет формировать отчеты, а на экранах и маской можно выдать положение числа ::)
-
тут коллега по работе наткнулся, по моему ничего так подборка….
http://help.sap.com/saphelp_erp60_sp/helpdata/EN/d6/0db8bb494511d182b70000e829fbfe/frameset.htm (http://help.sap.com/saphelp_erp60_sp/helpdata/EN/d6/0db8bb494511d182b70000e829fbfe/frameset.htm)
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.
-
Искали как привести в верхний регистр .... куча функций .....
А реально вызывается одна конструкция
TRANSLATE i_input TO UPPER CASE.
-
Видимо я ошибся.
Лучше использовать специализированный модуль, например AIPC_CONVERT_TO_UPPERCASE, либо получать текущую локаль (см. AIPC_CONVERT_TO_UPPERCASE)....
Вообщем посмотрел код функции и понял что все таки надо использовать нормальные функции, ниже с моими заключениями
* 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 то испольузуется текущая локаль..
Дима/Уукрул я прав?
-
Вообщем как я понял, если вызывать TRANSLATE i_input TO UPPER CASE то испольузуется текущая локаль..
Да текущая локаль вроде как... из SY-LANGU
-
тут коллега по работе наткнулся, по моему ничего так подборка….
Только пользы от него... вот если бы ты это дело оформил нормально по вызовам, а так друг я тебе подскажу как это получить. SE37 а дальше ввести *TEXT* и там еще даже больше может будет, но толку то...
-
Я тоже добавлю, нашел как-то - мне в некоторых случаях оказалась нужной:
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 ).
или параметры отдельно
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
-
ISHMED_SPLIT_STRING - Разбивает длинную строку на подстроки заданной длины с заданным разделителем.
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'
-
MESSAGE_TEXT_BUILD - Позволяет на основании класса сообщения, номера и параметров, сформировать текстовую строку сообщения для вывода например пользователю. Вызов довольно простой, передаем класс и номер сообщения с параметрами. На выходе получаем message_text_output в виде сформированной строки для вывода пользователям. Функция довольно простая, можно и самому написать, оператор REPLACE никто не отменял, но если уже есть... то почему бы и нет.
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.
-
Вот простой способ разделить строку на подстроки по разделителю
пример с ";"
DATA:a TYPE string,
itab TYPE TABLE OF string.
a = '111;2222;33333;444444;555555;6666666'.
split a AT ';' INTO TABLE itab.
Результат во вложении:
-
CATSXT_SIMPLE_TEXT_EDITOR - Вывод редактора ввода длинных текстов в диалоговом окне, а так же отображение уже введенных текстов в режиме просмотра. В общем-то фактически аналог описанного модуля из этой ссылки: http://sapforum.biz/index.php/topic,343.msg1727.html#msg1727 .Отличия, это немного меньше по размеру и позволяет задать позицию вывода окна редактора. По праметрам все достаточно просто:
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.
Пример вывода окна на рисунке ниже:
(http://sapforum.biz/index.php?action=dlattach;topic=343.0;attach=4286;image)