Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: Igor Garanichev от Май 07, 2010, 08:31:54 am

Название: SAP Query - определить query по программе
Отправлено: Igor Garanichev от Май 07, 2010, 08:31:54 am
Доброе время суток.

Еcть программа, довольно старая. Генерировалась по sap query. В имени этой программы вроде и виден тот созданный запрос в sq01. Вроде и получается выйти на инфо-набор. Но при генерации получается программа немного с другим именем. И содержимое запроса отличается. Имя прежней программы aqcsxxxxxx=====yyyyy== - где xxxxxx - имя группы пользователей, а yyyyy - имя запроса, А новой - aqzzxxxxxx=====yyyyy==. Что означает aqsc и aqzz, непонятно, или это случайным образом формируется или программы с aqcs* - генерируются каким-то другим инструментом.

Прошу помочь разобраться с этой ситуацией.
Название: Re: SAP Query - определить query по программе
Отправлено: Uukrul от Май 11, 2010, 02:57:00 pm
Ну типа для группы функций кажется вот эта ФМ формирует имя программы для SAP Query, в общем там по немецки, но если очень надо можно расшифровать все...
Код: You are not allowed to view links. Register or Login
function rsbq_report_name.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(USERGROUP)
*"             VALUE(QUERY)
*"       EXPORTING
*"             VALUE(REPORTNAME)
*"----------------------------------------------------------------------

* Namenskonventionen
*
* AQbbxxqq: bb - Benutzergruppe
*           qq - Query
*           xx - 00..99 Mandant 000 bis 099 im Standardbereich
*                A0..YZ Mandant 100 bis 999 im Standardbereich
*                ZZ     im globalen Standardbereich

data: report(8),
      mand type i,
      q    type i,
      r    type i.

field-symbols <fc>.

  report      = 'AQ'.                  " fester Anfang
  report+2(2) = usergroup.             " Benutzergruppe
  report+6(2) = query.                 " Query
  mand = sy-mandt.
  if mand < 100.                       " Mandanten bis 99 so belassen
    unpack mand to report+4(2).
  else.
    mand = mand - 100.                 " normieren
    q = 10 + ( mand div 36 ).          " 1. Stelle
    r = mand mod 36.                   " 2. Stelle
    assign ziffbuch+q(1) to <fc>.
    report+4(1) = <fc>.
    assign ziffbuch+r(1) to <fc>.
    report+5(1) = <fc>.
  endif.
  reportname = report.

endfunction.
Название: Re: SAP Query - определить query по программе
Отправлено: Uukrul от Май 11, 2010, 06:01:55 pm
Ну если еще дожать то aqzz - это имя группы функций которая типа генерит программу для Query, с версии 4.6 именно групп функций aqzz отмечена как устаревшая. Новая функция которая генерирует имя для Query:
Код: You are not allowed to view links. Register or Login
FUNCTION RSAQ_REPORT_NAME.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(WORKSPACE) LIKE  AQADEF-WSID
*"             VALUE(USERGROUP) LIKE  AQADEF-BGNAME
*"             VALUE(QUERY) LIKE  AQADEF-QUNAME
*"       EXPORTING
*"             VALUE(REPORTNAME) LIKE  AQADEF-PGNAME
*"----------------------------------------------------------------------

* Namenskonventionen
*
* AQwwbbbbbbbbbbbbqqqqqqqqqqqqqq:
*
*   ww             - 00..99 Mandant 000 bis 099 im Standardbereich
*                    A0..YZ Mandant 100 bis 999 im Standardbereich
*                    ZZ     im globalen Standardbereich
*   bbbbbbbbbbbb   - Benutzergruppe
*   qqqqqqqqqqqqqq - Query
*
* in den ersten 30 Stellen werden Leerzeichen durch = ersetzt

DATA: REP  TYPE PGNAMS,
      MAND TYPE I,
      Q    TYPE I,
      R    TYPE I.

FIELD-SYMBOLS <FC>.

  REP        = 'AQ'.                   " fester Anfang
  REP+4(12)  = USERGROUP.              " Benutzergruppe
  REP+16(14) = QUERY.                  " Query
  IF WORKSPACE = WS_STANDARD.          " Standardbereich
    MAND = SY-MANDT.
    IF MAND < 100.                     " Mandanten bis 99 so belassen
      UNPACK MAND TO REP+2(2).
    ELSE.
      MAND = MAND - 100.               " normieren
      Q = 10 + ( MAND DIV 36 ).        " 1. Stelle
      R = MAND MOD 36.                 " 2. Stelle
      ASSIGN ZIFFBUCH+Q(1) TO <FC>.
      REP+2(1) = <FC>.
      ASSIGN ZIFFBUCH+R(1) TO <FC>.
      REP+3(1) = <FC>.
    ENDIF.
  ELSE.                                " globale Bereiche
    REP+2(2) = 'ZZ'.
  ENDIF.
  TRANSLATE REP USING ' ='.
  REPORTNAME = REP.

ENDFUNCTION.

PS: Кстати функция RSBQ_DECODE_REPORT_NAME для старой версии и RSAQ_DECODE_REPORT_NAME для новой, вроде как декодирует имя программы назад на составляющие.

В общем похоже это просто имя для программы и на суть инфо-набора оно не влияет, т.е. просто будут разные имена программ, хотя возможно, что если покопать не имя, а то как создается программа, то будут отличия для старой и новой версий системы. Копать надо от класса разработок SQUE, там собраны группы функций и всех программ для работы с SAP Query.
Название: Re: SAP Query - определить query по программе
Отправлено: Igor Garanichev от Май 14, 2010, 02:45:17 pm
RSAQ_DECODE_REPORT_NAME этот модуль помог. Удалось узнать что имя программы - для новой версии, и мандант 200. Но, к сожалению исходный запрос всё же не тот. Да и защищен пользователем, создавшим его. Получается, все запросы в SQ01 защищаются от изменений других пользователей?