Текущее время: Вт, июн 17 2025, 20:08

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Я прочитал пост и считаю его...
бесполезным 29%     [ 5 ]
отчасти полезным 12%     [ 2 ]
полезным 41%     [ 7 ]
нуждающимся в спойлерах (которые нужны, чтобы скрывать куски текста) 18%     [ 3 ]
Всего голосов : 17
Автор Сообщение
 Заголовок сообщения: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Чт, июл 03 2014, 09:41 
Начинающий
Начинающий

Зарегистрирован:
Вт, май 20 2014, 15:13
Сообщения: 8
Маски в SAP (языки ABAP и OpenSQL, транзакция SE38 и др.)
Опишу
ArmAnn написал:
знания базового уровня, хорошо описанные в хелпе и которые необходимо знать любому abap-разработчику
(перенесено отсюда).
В масках используется символ «*», а есть ещё «+» и другие (языки ABAP и OpenSQL)
Чтобы из внутренней таблицы выбрать все записи, у которых в некотором поле стоит значение, начинающееся с буквы M и состоящее ровно из 4 символов, можно использовать оператор сравнения like 'M+++'. Т.е. для обозначения одного любого символа в языке ABAP используется маскирующий символ '+'. Для обозначения же любого количества любых символов — '*'.
Для выборок из таблиц базы данных используются соответственно маскирующие символы '_' и '%', в соответствии с языком Open SQL. Показывающая это программа с листингом ниже (код в виде файла тут).
Code:
*---------------------------------------------------------------------*
* Report  ZMASK
*---------------------------------------------------------------------*
*  ┌───────────────────────┬──────────────────┬──────────┬──────┐
*  │ Что?                  │ Файловая система │ Open SQL │ ABAP │
*  ├───────────────────────┼──────────────────┼──────────┼──────┤
*  │ Любое кол-во символов │        *         │     %    │   *  │
*  │ Один любой символ     │        ?         │     _    │   +  │
*  └───────────────────────┴──────────────────┴──────────┴──────┘
* Смотри документацию к оператору 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  шт.


Для параметров | MAR% | MAR* | M+++ | же результат такой:
Code:
Все таблицы 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» — это ровно два символа.
Изображение


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Чт, июл 03 2014, 19:25 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Добавил ссылку в Статьи участников форума

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Чт, июл 03 2014, 22:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Не освещена моя любимая тема!
Что делать, если нужно искать поле по маске, при том что про значение поля известно только то, что оно содержит символ маски?
Т.е. в поле лежит, например "равравролав*ововово", то как найти такое по маске, зная только что вот в поле есть *?

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Пт, июл 04 2014, 00:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Регулярные выражения :idea:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Пт, июл 04 2014, 03:38 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Кодер написал(а):
в поле лежит, например "равравролав*ововово", то как найти такое по маске, зная только что вот в поле есть *?

Помимо регулярок можно ещё написать, например, так:
Code:
IF 'равравролав*ововово' CA '*'.

или так:
Code:
IF 'равравролав*ововово' CS 'ав*ов'.

Но это не совсем маски :)

А как-то вобще это можно сделать при помощи оператора CP?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Пт, июл 04 2014, 07:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
UKY, Удав: речь шла не только о поиске в строке, но и о поиске во внутр.табле, а так же при селекте из таблы БД.
Для внутр таблы и абапа верно вот это
Для Open SQL верно вот это
... Читайте доки, они - рулез (С)
;-)

"Но есть один момент"(С) Ленинград
Очень печально, когда поле из двух символов, а в какой позиции стоит искомая * изначально не известно.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Пт, июл 04 2014, 15:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Кодер написал(а):
UKY, Удав: речь шла не только о поиске в строке, но и о поиске во внутр.табле, а так же при селекте из таблы БД.

не вижу про таблицы :wink:
Кодер написал(а):
Что делать, если нужно искать поле по маске, при том что про значение поля известно только то, что оно содержит символ маски?
Т.е. в поле лежит, например "равравролав*ововово", то как найти такое по маске, зная только что вот в поле есть *?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маски в SAP (языки ABAP и OpenSQL, транзакция SE38)
СообщениеДобавлено: Пт, июл 04 2014, 16:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Удав:
Цитата:
не вижу про таблицы :wink:

в первом сообщении, сделанном ТС

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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