Текущее время: Ср, июн 18 2025, 12:59

Часовой пояс: 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 часа


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

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


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

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