Joined: 30 Jun 2014 Posts: 4 Location: Санкт-Петербург
Posted: Thu Jul 03, 2014 10:34 am Post subject: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38 и др.)
Маски в SAP (языки ABAP и OpenSQL, транзакция SE38 и др.) В масках используется символ «*», а есть ещё «+» и другие (языки ABAP и OpenSQL)
Чтобы из внутренней таблицы выбрать все записи, у которых в некотором поле стоит значение, начинающееся с буквы M и состоящее ровно из 4 символов, можно использовать оператор сравнения like 'M+++'. Т.е. для обозначения одного любого символа в языке ABAP используется маскирующий символ '+'. Для обозначения же любого количества любых символов — '*'.
Для выборок из таблиц базы данных используются соответственно маскирующие символы '_' и '%', в соответствии с языком Open SQL. Показывающая это программа с листингом ниже.
Code:
*---------------------------------------------------------------------*
* Report ZMASK
*---------------------------------------------------------------------*
* ------------------------T------------------T----------T------¬
* ¦ Что? ¦ Файловая система ¦ Open SQL ¦ ABAP ¦
* +-----------------------+------------------+----------+------+
* ¦ Любое кол-во символов ¦ * ¦ % ¦ * ¦
* ¦ Один любой символ ¦ ? ¦ _ ¦ + ¦
* L-----------------------+------------------+----------+-------
* Смотри документацию к оператору like в выражении Select ... where A like B.
* Цитата:
* «The use of the wildcard characters "_" and "%" corresponds to the standard
* of SQL. In the rest of ABAP, the wildcard characters "+" and "*" are used in
* similar logical expressions, in particular when selection tables are used».
*---------------------------------------------------------------------*
Report ZMASK.
Parameters: p_mask1 type dd02l-tabname default 'MAR_',
p_mask2 type dd02l-tabname default 'MAR*',
p_mask3 type dd02l-tabname default 'M+++'.
Types:
begin of ty_s_data,
tabname type dd02l-tabname,
end of ty_s_data,
ty_t_data type standard table of ty_s_data.
Data: gs_data type ty_s_data, gt_data type ty_t_data.
Select tabname from dd02l into corresponding fields of table gt_data
where tabname like p_mask1.
Write / 'Все таблицы MAR* (максимум — от MAR1 до MARVCD):'.
New-line.
Loop at gt_data into gs_data where tabname cp p_mask2.
Write gs_data.
Add 1 to sy-index.
Endloop.
Write: / 'Итого таких таблиц —', sy-index, 'шт.'.
Clear sy-index.
Write / 'Только те таблицы M*, у которых в названии 4 символа, не больше:'.
New-line.
Loop at gt_data into gs_data where tabname cp p_mask3.
Write gs_data.
Add 1 to sy-index.
Endloop.
Write: / 'Итого таких таблиц —', sy-index, 'шт.'.
Для параметров | MAR_ | MAR* | M+++ | результат такой:
Code:
Все таблицы MAR* (максимум — от MAR1 до MARVCD):
MAR1 MARA MARC
MARD MARE MARI
MARM MARU MARV
Итого таких таблиц — 9 шт.
Только те таблицы M*, у которых в названии 4 символа, не больше:
MAR1 MARA MARC
MARD MARE MARI
MARM MARU MARV
Итого таких таблиц — 9 шт.[/quote]
Для параметров | MAR% | MAR* | M+++ | же результат такой:[quote]Все таблицы MAR* (максимум — от MAR1 до MARVCD):
MAR1 MARA MARA1
MARAEXT MARAP MARASUBSCR
MARAV MARA_B MARA_C
MARA_MATNR MARA_TMP MARA_UEB
MARA_VRKME MARC MARCE
MARCH MARCHO1 MARCO1
MARCP MARCU MARCV
MARCW MARC_DISP MARC_NFMAT
MARC_TMP MARC_UEB MARC_VRBMT
MARC_WERK MARD MARDE
MARDH MARDHO1 MARDO1
MARDP MARDU MARD_EXT
MARD_F4HELP MARD_KEY MARD_LGORT
MARD_TMP MARD_UEB MARE
MAREC MARI MARKDOWN
MARKVINTF MARM MARM_TMP
MARM_UEB MARTSTATUS MART_RANGE
MARU MARV MARVCD
Итого таких таблиц — 54 шт.
Только те таблицы M*, у которых в названии 4 символа, не больше:
MAR1 MARA MARC
MARD MARE MARI
MARM MARU MARV
Итого таких таблиц — 9 шт.
Чем это полезно (транзакция SE38 и др.)?
При поиске чего-нибудь по названию можно ставить «+» вместо «*», получая более точные результаты.
Например, так в транзакции SE38 можно найти все программы, начинающиеся на «BC» и заканчивающиеся на «GRID_xx», где «xx» — это ровно два символа.
! Маска «+» при поиске программы в SE38.PNG
Description:
Маска «+» при поиске программы в SE38 (по клавише F4 с первого экрана)
Joined: 30 Jun 2014 Posts: 4 Location: Санкт-Петербург
Posted: Fri Jul 04, 2014 9:43 am Post subject: Опросы
Если вы про вопрос о спойлерах и если кратко — то да, во всех.
Я провожу опрос для обратной связи с читателями (вижу, например, что тема о масках почти бесполезна). Вопрос о спойлерах ставлю для того, чтобы понять, нужны они или народу всё равно. Были бы спойлеры реализованы, вопроса бы не было, тихо-мирно поставил бы их и радовался. А так собираю мнение, чтобы при выявленной необходимости посетителей сайта в них обратить внимание администрации сайта на этот недостающий функционал.
Может, вы сообщите позицию администрации по спойлерам?
Я пока собираюсь ставить вопрос "нужны спойлеры" в каждом посте, где они бы смотрелись — там, где есть большие куски кода. Считаю такие посты полезными для индексирования поисковиками: вот раньше я не мог найти описание формата TDEDIF в интернете, а сейчас могу.
Может, вы сообщите позицию администрации по спойлерам?
Позицию администрации сообщить не могу, т.к. не отношусь к ней
Про спойлеры - лично я стараюсь не выкладывать простыни кода.
Общее направление и ссылки - это безусловно полезно. Приводить целиком весь код интересно только для новичков.
Если хотите выкладывать код - для этого можете использовать жж или другие соцсети. _________________ С уважением,
Удав.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.