четверг, 17 ноября 2022 г.

Як почистити SAP ALV Buffer?

Іноді ви зробили зміни ALV у своїй програмі, але ці зміни не видно. Для цього вам потрібно очистити буфер ALV. 

Для цього існує декілька програм: 

 - BALVBUFDEL; 
 - BCALV_BUFFER_DELETE; 
- BCALV_BUFFER_DEL_SHARED; 

 або виконати наступні команди: 

 /$TAB -> reset table buffer; 
 /$SYNC -> reset all buffers.

пятница, 25 декабря 2015 г.

Доступ к таблице или переменной из другой программы

В данной статье рассмотрим, как получить доступ к переменной или таблице другой программы.

1) Объявление переменной FIELD-SYMBOLS нужного  типа. 
Например:

если это таблица, то код будет выглядеть так - 
FIELD-SYMBOLS:  <ITAB> TYPE TABLE. 

если это переменная, например Балансовая Единица (BUKRS), то код будет выглядеть так - 
FIELD-SYMBOLS:  <BUKRS> TYPE BUKRS. 
  
2)  Переменная в другой программе выглядит следующему образом:

(<PROGRAM NAME>)<VARIABLE>, где
PROGRAM NAME - имя главной программы,
VARIABLE - переменная или таблица.

3)  Чтение переменной через FIELD-SYMBOLS , для БЕ, выглядит следующим образом:

FIELD-SYMBOLS:  <BUKRS> TYPE BUKRS. 
ASSIGN ('(PROGRAM NAME)BUKRS'TO <BUKRS>,
  
для внутренней таблице:

ASSIGN '(PROGRAM NAME)ITAB[]' TO <ITAB>.

среда, 3 июня 2015 г.

Список SAP таблиц и ракурсов в словаре БД

Список полезных, стандартных таблиц БД SAP. Все таблицы SAP можно проверить с помощью словаря данных, используя  транзакцию SE11.

DBCON - Описание соединений базы данных.

DD02V - Ракурс: заголовок таблицы с кратким текстом.

DD03L - Поля таблиц.

DD07T - Тексты к пост.значениям доменов (завис.от яз.).

DOKIL - Индекс к таблице документации DOKHL.
SAP Object documentation link details. Required by function module DOCU_READ to retieve SAP documentation for specific repository object (FM, Prog, Tcode etc). 

E070, E070A, E070AS, E071 - Система переносов: заголовки запросов/задач.

ENHOBJCONTRACT - table of enhancement points.

RFCDES - Таблица адресов для Remote Function Call.

T100 - Таблица сообщений (классы и № классов). 

TACT - Доступные виды операций в вашей системе SAP.

TADIR - Каталог объектов репозитария.

TBRG - Группы полномочий.

TBRGT - Обозначения групп полномочий.

TFDIR - Таблица функциональных модулей.

TFTIT - Краткий текст функционального модуля.

TNRO - Определение объектов диапазона номеров.
This table stores SAP Number ranges, which are created via SNRO transaction 

NRIV  -Интервалы диапазонов номеров.
Number ranges interval table, also created via tcode SNRO 

TOBJ - Объекты полномочий.

TRDIR - Системная таблица SAP програм.

TRMAC  -Таблица мaкросов в ABAP/IV-программах.

TSTC - SAP-коды транзакций.

TPARA - Каталог идентификаторов памяти (временн.)

DEVACCESS - Таблица для пользователя разработки.
Table of development users including registered Developer access key 

USR02 - ДаннРегистр (использование ядром!!!)
Logon data 

USR04 - Основная запись пользователя: полномочия.

UST04 - Основные записи пользователей.

USR10 - Основная запись пользователя: профили полномочий.

UST10C - Основная запись пользователя: групповые профили.

UST10S - Основная запись пользователя: простые профили. 

USR11 - Основная запись пользователя: тексты к профилям (USR10).


USR12 - Основная запись пользователя: значения полномочий.

USR13 - Краткие тексты к полномочиям.

USR40 - Таблица для запрещённых паролей.

OBJT - Описание объектов типа T (собственная транзакция).

пятница, 29 мая 2015 г.

Закладки на стандартном экране выбора

   Если вы хотите в своей программе создать несколько закладок на экране выбора, но рисовать экраны нет особого желания, то в SAPе есть альтернативное решение данной задчи.

Report ZTEST.
DATA flag(1) TYPE c.
* SUBSCREEN 1
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: Field1(20) TYPE c,
            Field2(20) TYPE c,
            Field3(20) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.
* SUBSCREEN 2
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS: q1(20) TYPE c ,
            q2(20) TYPE c ,
            q3(20) TYPE c .
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.
* STANDARD SELECTION SCREEN
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
                  TAB (20) button1 USER-COMMAND push1,
                  TAB (20) button2 USER-COMMAND push2,
                  END OF BLOCK mytab.
INITIALIZATION.
  button1 = 'TAB1'.
  button2 = 'TAB2'.
  mytab-prog = sy-repid.
  mytab-dynnr = 100.
  mytab-activetab = 'BUTTON1'.
AT SELECTION-SCREEN.
  CASE sy-dynnr.
    WHEN 1000.
      CASE sy-ucomm.
        WHEN 'PUSH1'.
          mytab-dynnr = 100.
          mytab-activetab = 'BUTTON1'.
        WHEN 'PUSH2'.
          mytab-dynnr = 200.
          mytab-activetab = 'BUTTON2'.
      ENDCASE.
    WHEN 100.
      MESSAGE s888(sabapdocu) WITH text-040 sy-dynnr.
    WHEN 200.
      MESSAGE s888(sabapdocu) WITH text-050 sy-dynnr.
  ENDCASE.
MODULE init_0100 OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'MOD'.
      CASE flag.
        WHEN 'X'.
          screen-input = '1'.
        WHEN ' '.
          screen-input = '0'.
      ENDCASE.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDMODULE.
MODULE user_command_0100 INPUT.
  MESSAGE s888(sabapdocu) WITH text-050 sy-dynnr.
  CASE sy-ucomm.
    WHEN 'TOGGLE'.
      IF flag = ' '.
        flag = 'X'.
      ELSEIF flag = 'X'.
        flag = ' '.
      ENDIF.
  ENDCASE.
ENDMODULE.
START-OF-SELECTION.
  WRITE: / 'Field1:', Field1,'Q1:', q1,
         / 'Field2:', Field2,'Q2:', q2,
         / 'Field3:', Field3,'Q3:', q3.

Результат:
TAB1


TAB2


четверг, 28 мая 2015 г.

Средство поиска текста С-должности на дату

Постоянно сталкиваюсь с построением средства поиска к какой-либо таблице с данными. 

В программе :

SELECT-OPTIONSpa_objid FOR hrp1000-objid NO INTERVALS.

*** Средство поиска  ***
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_objid-low.
  PERFORM get_objid.


FORM get_objid.
  REFRESH dt_tabs.

  CALL FUNCTION 'ZHR_READ_C_PLANS'
    TABLES
      p_objid pa_objid.

  IF pa_objid[] IS NOT INITIAL.
    READ TABLE pa_objid INDEX 1.
  ENDIF.
ENDFORM
.           


ФМ для поиска и формирования данных:

FUNCTION zhr_read_c_plans.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  TABLES
*"      P_OBJID
*"----------------------------------------------------------------------

  TYPES:
        BEGIN OF stab,
          plvar LIKE hrp1000-plvar,
          otype LIKE hrp1000-otype,
          objid LIKE hrp1000-objid,
          priox LIKE hrp1001-priox" приоритет  для сортировки должностей
          sobid LIKE hrp1001-sobid,
          short LIKE p1000-short" Код КП
         END OF stab.

  DATA:
        BEGIN OF ftab OCCURS 0,
          objid LIKE hrp1000-objid,
          short LIKE p1000-short" Код КП
          stext TYPE zhr_char255" Название должности
         END OF ftab.


  DATAdt_tabs TYPE stab OCCURS WITH HEADER LINE.
  DATAit_return LIKE ddshretval OCCURS WITH HEADER LINE.


  DATAwa_fields LIKE sval,
         li_fields TYPE STANDARD TABLE OF sval WITH HEADER LINE.

RANGESpa_objid FOR hrp1000-objid.

**********************************************************************
  MOVE 'Q1005' TO wa_fields-tabname.
  MOVE 'INDDA' TO wa_fields-fieldname.
  APPEND wa_fields TO li_fields.

  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
*   NO_VALUE_CHECK        = ' '
      popup_title           'Выберите дату'
     start_column          '5'
     start_row             '5'
* IMPORTING
*   RETURNCODE            =
    TABLES
      fields                =  li_fields
   EXCEPTIONS
     error_in_fields       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.

  CHECK  li_fields IS NOT INITIAL.
  READ TABLE li_fields INDEX 1.
  sdate li_fields-value.

  SELECT plvar priox sobid FROM hrp1001
      INTO CORRESPONDING FIELDS OF TABLE dt_tabs
            WHERE otype 'CZ'
              AND plvar '01'
              AND begda <= sdate
              AND endda >= sdate.

  LOOP AT dt_tabs.
    SELECT SINGLE objid otype short stext FROM hrp1000 INTO
          (dt_tabs-objiddt_tabs-otypedt_tabs-shortdt_tabs-stext)
            WHERE otype 'C'
              AND plvar '01'
              AND objid dt_tabs-sobid
              AND begda <= sdate
              AND endda >= sdate.

    PERFORM search_ltext USING '70' dt_tabs-objid CHANGING dt_tabs-stext_70.

    MODIFY dt_tabs ."index sy-tabix.
    CLEAR dt_tabs.

  ENDLOOP.

  SORT dt_tabs BY priox objid.

  LOOP AT dt_tabs.
    MOVE-CORRESPONDING dt_tabs TO ftab.
    APPEND ftab.
    CLEAR ftab.
  ENDLOOP.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        'OBJID'
      value_org       'S'
      multiple_choice 'X'
    TABLES
      value_tab       ftab
      return_tab      it_return
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  IF it_return[] IS NOT INITIAL.
    REFRESHpa_objid.
  LOOP AT it_return.
    pa_objid-sign 'I'.
    pa_objid-option 'EQ'.
    pa_objid-low it_return-FIELDVAL.
    APPEND pa_objid.
  ENDLOOP.
  p_objid[] pa_objid[].
  ENDIF.

ENDFUNCTION.

ФМ для поиска полных лет

Данный ФМ возвращает количество полных лет между 2-мя датами.
Данные на выходе представлены в текстовом формате. Длина 3 символа.

FUNCTION ZRH_SEARCH_FULL_YEAR.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(I_BEGDA) TYPE  DATUM
*"     VALUE(I_ENDDA) TYPE  DATUM
*"  EXPORTING
*"     VALUE(E_AGE) TYPE  CHAR3
*"----------------------------------------------------------------------

data:
      t_years type int2.

check   I_ENDDA >= I_BEGDA.
*** разница в годах
t_years I_ENDDA(4I_BEGDA(4).

*** проверяем, был ли ДР в этом году или нет, если нет то -1 год
if I_ENDDA+4(2< I_BEGDA+4(2).
  t_years t_years 1.
elseif I_ENDDA+4(2I_BEGDA+4(2).
  if I_ENDDA+6(2< I_BEGDA+6(2).
     t_years t_years 1.
  endif.
endif.

E_AGE t_years.
SHIFT E_AGE LEFT DELETING LEADING space.

ENDFUNCTION.


среда, 1 апреля 2015 г.

Создание тестовых данных для таблиц: SFLIGHT, SPFLI, SCARR.

   Сегодня понадобилось создать пример на основе таблиц: SFLIGHT, SPFLI, SCARR, но к сожалению в нашей системе они пустые. Погуглив нашел следующее решение данной проблеммы.

   Необходимо запустить программу-генератор данных SXIDEMO_DATA_GENERATOR_XI.


Выбираем "Да" и "Полные данные рейса" и нажимаем "Выполнить". Проверяем таблицы :)