Автор Тема: Пример программы оформление пакетного ввода CALL TRANSACTION  (Прочитано 5380 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Структуры данных:
Код: You are not allowed to view links. Register or Login
* Структура для CALL TRANSACTION.
DATA: BEGIN OF gt_bdcdata OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATA: END OF gt_bdcdata.

DATA BEGIN OF gt_itab OCCURS 10.
        INCLUDE STRUCTURE bdcmsgcoll.
DATA END OF gt_itab.


DATA: p_mode TYPE CTU_MODE VALUE  'N'.

Пример вызова внутри программы:
Код: You are not allowed to view links. Register or Login
  DATA: lt_error TYPE bapiret2_tab.

* Сформувати сеанс пакетного вводу
  CLEAR: gt_itab[], gt_bdcdata[], lt_error[].

  PERFORM dynpro USING:
   'X' 'SAPMF02K'        '0101',
   ' ' 'RF02K-LIFNR'     ps_lifnr-lifnr,
   ' ' 'RF02K-BUKRS'     space,
   ' ' 'RF02K-EKORG'     space,
   ' ' 'RF02K-D0110'     abap_true,
   ' ' 'RF02K-D0120'     abap_false,
   ' ' 'RF02K-D0130'     abap_false,
   ' ' 'WRF02K-D0380'    abap_false,
   ' ' 'RF02K-D0210'     abap_false,
   ' ' 'RF02K-D0215'     abap_false,
   ' ' 'RF02K-D0220'     abap_false,
   ' ' 'RF02K-D0610'     abap_false,
   ' ' 'RF02K-D0310'     abap_false,
   ' ' 'WRF02K-D0320'    abap_false,
   ' ' 'BDC_OKCODE'      '/00',

   'X' 'SAPMF02K'           '0111',
   ' ' 'ADDR1_DATA-SORT2'   ps_lifnr-sort2,
   ' ' 'BDC_OKCODE'         '=UPDA'.

  PERFORM call_transaction TABLES gt_bdcdata gt_itab
                           USING 'XK02' p_tabix
                           CHANGING lt_error[].
  APPEND LINES OF lt_error TO pt_bapiret2.

Вспомогательные подпрограммы:
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*       Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
FORM dynpro USING p_dynbegin
                  p_name
                  p_value.
  DATA: l_type(1)  TYPE c,
        l_dcpfm(1) TYPE c.

  CLEAR gt_bdcdata.
  IF p_dynbegin = abap_true.
*   Экран транзакции
    MOVE: p_name    TO gt_bdcdata-program,
          p_value   TO gt_bdcdata-dynpro,
          abap_true TO gt_bdcdata-dynbegin.
  ELSE.
*   Поле на экране транзакции
    MOVE: p_name TO gt_bdcdata-fnam.
    IF NOT p_value IS INITIAL.
      DESCRIBE FIELD p_value TYPE l_type.
      CASE l_type.
        WHEN 'I' OR 'N' OR 'P'.
          WRITE p_value TO gt_bdcdata-fval LEFT-JUSTIFIED.
          SELECT SINGLE dcpfm INTO (l_dcpfm) FROM usr01 WHERE bname = sy-uname.
          CASE l_dcpfm.
            WHEN abap_false. TRANSLATE gt_bdcdata-fval USING '. '.
            WHEN abap_true.  TRANSLATE gt_bdcdata-fval USING ', '.
          ENDCASE.
          CONDENSE gt_bdcdata-fval NO-GAPS.
        WHEN 'D'.
          WRITE p_value TO gt_bdcdata-fval DD/MM/YYYY.
        WHEN OTHERS.
          MOVE p_value TO gt_bdcdata-fval.
      ENDCASE.
    ENDIF.
  ENDIF.
  APPEND gt_bdcdata.
ENDFORM.                    "dynpro

*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION
*&---------------------------------------------------------------------*
*       Виклик тарзакції пакетного вводу
*----------------------------------------------------------------------*
*      -->P_CODE     - Код транзакції
*      -->P_TABIX    - Номер позиції до якої виконується обробка
*      -->PT_BDCDATA - Пакетний інтерфейс
*      <--PT_ITAB    - Перелік помилок/повідомлень роботи пакетного вводу
*      <--PT_ERROR   - Помилки обробки формат BAPIRET2
*----------------------------------------------------------------------*
FORM call_transaction TABLES   pt_bdcdata STRUCTURE gt_bdcdata
                               pt_itab STRUCTURE gt_itab
                      USING    p_code
                               p_tabix
                      CHANGING pt_error TYPE bapiret2_tab.
  DATA  ls_opt         TYPE ctu_params.

  ls_opt-dismode = p_mode.       "Режим обробки для CALL TRANSACTION USING...
  ls_opt-updmode = 'S'.           "Режим оновлення для CALL TRANSACTION USING...
  ls_opt-cattmode = space.       "Режим CATT для CALL TRANSACTION USING...
  ls_opt-defsize  = abap_false.  "Усталений розмір екрана для CALL TRANSACTION USING...
  ls_opt-racommit = abap_false.  "не завершується COMMIT
  ls_opt-nobinpt  = abap_true.   "SY-BINPT=SPACE для CALL TRANSACTION USING...
  ls_opt-nobiend  = abap_true.   "SY-BINPT=SPACE після зав.даних для CALL TRANSACTION USING...
  CALL TRANSACTION p_code WITHOUT AUTHORITY-CHECK
                          USING pt_bdcdata
                          OPTIONS FROM ls_opt
                          MESSAGES INTO pt_itab.
* Сформувати перелік тільки критичних помилок
  CLEAR: pt_error[].
  IF NOT pt_itab[] IS INITIAL.
    CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
      TABLES
        imt_bdcmsgcoll = pt_itab
        ext_return     = pt_error.

    DELETE pt_error WHERE type = 'S' OR type = 'I' OR type = 'W'.
    LOOP AT pt_error INTO DATA(ls_error) WHERE type = 'E' OR type = 'A'.
      ls_error-row = p_tabix.
      MODIFY pt_error FROM ls_error.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " CALL_TRANSACTION

Sapforum.Biz