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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Пт, фев 06 2009, 19:42 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Сабж. Давно хотел опубликовать, да откладывал - хотел хепл сначала написать, да кой-чего доработать. Чувствую, руки никогда не дойдут.
Условия использования: копирайтик мой не затирайте . Доработки приветствуются, но копирайт не трогайте (можете свой рядом дописать, если очень хочется).
Юзаю инклуд уже несколько лет.
Code:
*----------------------------------------------------------------------*
*& Подпрограммы для пакетного ввода.
*& Автор: Амосов В.А.
*& (С) Amosoff Victor, OOO "A111", 2004-2008 гг.
*& http://www.a111-group.com/
*----------------------------------------------------------------------*
DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
        g_bdc_mode .

*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM bdc_transaction USING p_tcode.
  DATA: l_bdc_mode(1) .

  IF sy-batch EQ 'X'.
    l_bdc_mode = 'N'.
  ELSEIF NOT g_bdc_mode IS INITIAL.
    l_bdc_mode = g_bdc_mode .
  ELSE.
    l_bdc_mode = 'E'.
  ENDIF.

  REFRESH messtab.
  CALL TRANSACTION p_tcode USING bdcdata
                   MODE   l_bdc_mode
                   UPDATE 'S'
                   MESSAGES INTO messtab.
  REFRESH bdcdata.
ENDFORM.                    "BDC_TRANSACTION

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  DATA: l_len TYPE i .

  CLEAR bdcdata.
  bdcdata-fnam = fnam.

  DESCRIBE FIELD fval OUTPUT-LENGTH l_len .
*  WRITE fval TO bdcdata-fval .
  IF l_len < 133 AND fnam NE 'BDC_OKCODE' .
    MOVE fval TO bdcdata-fval(l_len) .
  ELSE.
    bdcdata-fval = fval .
  ENDIF.

  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  show_bfc_messages
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_bdc_messages .
  DATA: ltp_messages TYPE TABLE OF bapiret2 WITH HEADER LINE .
  LOOP AT messtab .
    ltp_messages-log_msg_no = sy-tabix .
    ltp_messages-type   = messtab-msgtyp .
    ltp_messages-id     = messtab-msgid  .
    ltp_messages-number = messtab-msgnr  .
    ltp_messages-message_v1    = messtab-msgv1 .
    ltp_messages-message_v2    = messtab-msgv2 .
    ltp_messages-message_v3    = messtab-msgv3 .
    ltp_messages-message_v4    = messtab-msgv4 .
    APPEND ltp_messages .
  ENDLOOP .

  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = ltp_messages.
  REFRESH messtab .
ENDFORM.                    " show_bdc_messages

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Сб, фев 07 2009, 08:06 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
Полезное дело....
Так, глядишь, и я свои сканеры выложу...
Вообще, наверно, пора отдельный раздел создавать... SAP Open Source Community....

уже штук 5 наработок тут опубликовано...

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Пн, фев 09 2009, 03:47 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Подобные штуки наверно у многих есть, я например такой конструкцией пользуюсь
Code:
FORM BDC_INS USING DYNBEGIN FNAM FVAL.
  CLEAR BDC.
  IF DYNBEGIN EQ SPACE.
    BDC-FNAM = FNAM.
    WRITE FVAL TO BDC-FVAL LEFT-JUSTIFIED. " это позволяет обойти всякие Input/Output преобразования
  ELSE.
    BDC-PROGRAM = FNAM.
    BDC-DYNBEGIN = DYNBEGIN.
    BDC-DYNPRO = FVAL.
  ENDIF.
  APPEND BDC.
ENDFORM.

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Вт, окт 05 2010, 11:53 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Версия 2010 года.
Убраны завязки с ZALV_UTILS.
Дополнена готовыми пакетниками для дрилл-даунов в наиболее популярные транзакции (MB03, MB51, MIR4, VF03, ME23N, VA03, AS03, IW23, IW33).

Code:
*----------------------------------------------------------------------*
*   Подпрограммы для пакетного ввода.
*   Автор: Амосов В.А.
*   Компания "А111", Москва, 2006 г.
*----------------------------------------------------------------------*
DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
        g_bdc_mode ,
        gt_errors     TYPE TABLE OF zsbe_bdc_errors WITH HEADER LINE ,
        gt_herrors    TYPE REF TO data ,
        gwa_herrors   TYPE REF TO data ,
        g_hstructname TYPE dd02l-tabname,
        g_callback_bdcdetail(30),
        g_keyname(20) .

FIELD-SYMBOLS: <gt_herrors> TYPE table .
*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM bdc_transaction USING p_tcode.
  DATA: l_bdc_mode(1) .

  IF sy-batch EQ 'X'.
    l_bdc_mode = 'N'.
  ELSEIF NOT g_bdc_mode IS INITIAL.
    l_bdc_mode = g_bdc_mode .
  ELSE.
    l_bdc_mode = 'E'.
  ENDIF.

  REFRESH messtab.
  CALL TRANSACTION p_tcode USING bdcdata
                   MODE   l_bdc_mode
                   UPDATE 'S'
                   MESSAGES INTO messtab.
  REFRESH bdcdata.
ENDFORM.                    "BDC_TRANSACTION

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  DATA: l_len TYPE i .

  CLEAR bdcdata.
  bdcdata-fnam = fnam.

  DESCRIBE FIELD fval OUTPUT-LENGTH l_len .
*  WRITE fval TO bdcdata-fval .
  IF l_len < 133 AND l_len > 0 AND fnam NE 'BDC_OKCODE' .
    MOVE fval TO bdcdata-fval(l_len) .
  ELSE.
    bdcdata-fval = fval .
  ENDIF.

  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  show_bfc_messages
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_bdc_messages .
  DATA: ltp_messages TYPE TABLE OF bapiret2 WITH HEADER LINE .
  LOOP AT messtab .
    ltp_messages-log_msg_no = sy-tabix .
    ltp_messages-type   = messtab-msgtyp .
    ltp_messages-id     = messtab-msgid  .
    ltp_messages-number = messtab-msgnr  .
    ltp_messages-message_v1    = messtab-msgv1 .
    ltp_messages-message_v2    = messtab-msgv2 .
    ltp_messages-message_v3    = messtab-msgv3 .
    ltp_messages-message_v4    = messtab-msgv4 .
    APPEND ltp_messages .
  ENDLOOP .

  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = ltp_messages.
  REFRESH messtab .
ENDFORM.                    " show_bdc_messages
*&---------------------------------------------------------------------*
*&      Form  INI_COLLECT_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ini_collect_header USING ps_template
                              p_strucname .
  CREATE DATA: gwa_herrors LIKE           ps_template,
               gt_herrors  LIKE TABLE OF  ps_template .
  g_hstructname = p_strucname .
  ASSIGN gt_herrors->* TO <gt_herrors> .
ENDFORM.                    " INI_COLLECT_HEADER
*&---------------------------------------------------------------------*
*&      Form  COLLECT_ERRORS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM collect_errors USING ps_header.
  CHECK NOT g_keyname IS INITIAL .

  FIELD-SYMBOLS: <ls_header>,
                 <l_key> .
  DATA: l_messnr TYPE i .
  ASSIGN gwa_herrors->* TO <ls_header> .

  MOVE-CORRESPONDING ps_header TO <ls_header> .
  APPEND <ls_header> TO <gt_herrors> .

  LOOP AT messtab.
    ADD 1 TO l_messnr .
    gt_errors-messnr = l_messnr .
    MESSAGE ID messtab-msgid TYPE messtab-msgtyp NUMBER messtab-msgnr
       WITH messtab-msgv1 messtab-msgv2 messtab-msgv3 messtab-msgv4
       INTO gt_errors-messtxt .
    ASSIGN COMPONENT g_keyname OF STRUCTURE <ls_header> TO <l_key> .
    CHECK sy-subrc = 0 .
    gt_errors-pkey = <l_key> .
    APPEND gt_errors .
  ENDLOOP .
  REFRESH messtab .
ENDFORM.                    " COLLECT_ERRORS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_COLLECTED_ERRORS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_collected_errors .
  DATA: ls_keyinfo  TYPE slis_keyinfo_alv,
        lt_hfieldcat TYPE slis_t_fieldcat_alv,
        lt_pfieldcat TYPE slis_t_fieldcat_alv,
        lwa_fieldcat TYPE slis_fieldcat_alv .

  ls_keyinfo-header01 = g_keyname.
  ls_keyinfo-item01   = 'PKEY'.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
   EXPORTING
*     I_PROGRAM_NAME               =
      i_internal_tabname           = 'HEADERTAB'
      i_structure_name             = g_hstructname
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME                   =
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
    CHANGING
      ct_fieldcat                  = lt_hfieldcat
   EXCEPTIONS
     inconsistent_interface       = 1
     program_error                = 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.

  LOOP AT lt_hfieldcat INTO lwa_fieldcat
                      WHERE key EQ 'X' AND
                            fieldname NE g_keyname .
    CLEAR lwa_fieldcat-key .
    MODIFY lt_hfieldcat FROM lwa_fieldcat .
  ENDLOOP .

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
   EXPORTING
*     I_PROGRAM_NAME               =
      i_internal_tabname           = 'ITEMTAB'
      i_structure_name             = 'ZSBE_BDC_ERRORS'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME                   =
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
    CHANGING
      ct_fieldcat                  = lt_pfieldcat
   EXCEPTIONS
     inconsistent_interface       = 1
     program_error                = 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.

  LOOP AT lt_pfieldcat INTO lwa_fieldcat .
    APPEND lwa_fieldcat TO lt_hfieldcat .
  ENDLOOP .

  DATA: l_repid TYPE sy-repid VALUE sy-repid,
        lsp_layout TYPE slis_layout_alv .

  IF NOT g_callback_bdcdetail IS INITIAL .
    lsp_layout-f2code = 'DETAIL' .
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
*    I_INTERFACE_CHECK              = ' '
     i_callback_program             = l_repid
*    I_CALLBACK_PF_STATUS_SET       = ' '
     i_callback_user_command        = 'BDC_ERROR_USER_COMMAND'
     is_layout                      = lsp_layout
     it_fieldcat                    = lt_hfieldcat
*    IT_EXCLUDING                   =
*    IT_SPECIAL_GROUPS              =
*    IT_SORT                        =
*    IT_FILTER                      =
*    IS_SEL_HIDE                    =
*    I_SCREEN_START_COLUMN          = 0
*    I_SCREEN_START_LINE            = 0
*    I_SCREEN_END_COLUMN            = 0
*    I_SCREEN_END_LINE              = 0
*    I_DEFAULT                      = 'X'
     i_save                         = 'X'
*    IS_VARIANT                     =
*    IT_EVENTS                      =
*    IT_EVENT_EXIT                  =
      i_tabname_header               = 'HEADERTAB'
      i_tabname_item                 = 'ITEMTAB'
*      i_structure_name_header        = g_hstructname
*     i_structure_name_item          = 'ZSBE_BDC_ERRORS'
     is_keyinfo                     = ls_keyinfo
*    IS_PRINT                       =
*    IS_REPREP_ID                   =
*    I_BYPASSING_BUFFER             =
*    I_BUFFER_ACTIVE                =
*    IR_SALV_HIERSEQ_ADAPTER        =
*    IT_EXCEPT_QINFO                =
*    I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
*  IMPORTING
*    E_EXIT_CAUSED_BY_CALLER        =
*    ES_EXIT_CAUSED_BY_USER         =
    TABLES
      t_outtab_header                = <gt_herrors>
      t_outtab_item                  = gt_errors
   EXCEPTIONS
     program_error                  = 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.

ENDFORM.                    " DISPLAY_COLLECTED_ERRORS

*&---------------------------------------------------------------------*
*&      Form  BDC_ERROR_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bdc_error_user_command USING p_okcode
                                  p_selfield TYPE slis_selfield .
  CASE p_okcode.
    WHEN 'DETAIL' .
      PERFORM (g_callback_bdcdetail)
              IN PROGRAM (sy-repid)
           IF FOUND
           USING p_selfield-tabname
                 p_selfield-tabindex .
  ENDCASE .
ENDFORM.                    " BDC_ERROR_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  CALL_AS03
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_as03 USING p_anln1
                     p_anln2 .

  PERFORM bdc_dynpro      USING 'SAPLAIST' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=JWER'.
  PERFORM bdc_field       USING 'ANLA-ANLN1'
                                p_anln1 .
  PERFORM bdc_field       USING 'ANLA-ANLN2'
                                p_anln2 .
  PERFORM bdc_field       USING 'ANLA-BUKRS'
                                p_bukrs .

  PERFORM bdc_dynpro      USING 'SAPLAIST' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=BACK'.

  PERFORM bdc_transaction USING 'AS03'.
ENDFORM.                                                    " CALL_AS03

*&---------------------------------------------------------------------*
*&      Form  CALL_MB03
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_mb03 USING p_mblnr
                     p_mjahr .
  PERFORM bdc_dynpro      USING 'SAPMM07M' '0460'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RM07M-MBLNR'
                                p_mblnr.
  PERFORM bdc_field       USING 'RM07M-MJAHR'
                                p_mjahr.
  PERFORM bdc_field       USING 'XFULL'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPMM07M' '0460'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/EBCK'.

  PERFORM bdc_transaction USING 'MB03'.
ENDFORM.                                                    " CALL_MB03
*&---------------------------------------------------------------------*
*&      Form  CALL_MIR4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_mir4 USING p_belnr
                     p_pos
                     p_gjahr .
  PERFORM bdc_dynpro      USING 'SAPLMR1M' '6150'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RBKP-BELNR'
                                p_belnr .
  PERFORM bdc_field       USING 'RBKP-GJAHR'
                                p_gjahr .

  IF NOT p_pos IS INITIAL AND
     NOT p_pos CO '0' .
    PERFORM bdc_dynpro      USING 'SAPLMR1M' '6000'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=POS'.
    PERFORM bdc_field       USING 'RM08M-SKIP_TO'
                                  p_pos .
  ENDIF.

  PERFORM bdc_transaction USING 'MIR4'.
ENDFORM.                                                    " CALL_MIR4
*&---------------------------------------------------------------------*
*&      Form  CALL_VF03
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_vf03 USING p_vbeln .
  PERFORM bdc_dynpro      USING 'SAPMV60A' '0101'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'VBRK-VBELN'
                                p_vbeln.

  PERFORM bdc_transaction USING 'VF03'.
ENDFORM.                                                    " CALL_VF03
*&---------------------------------------------------------------------*
*&      Form  CALL_ME23N
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_me23n USING p_ebeln .
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=MECHOB'.

  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0002'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=MEOK'.
  PERFORM bdc_field       USING 'MEPO_SELECT-EBELN'
                                p_ebeln.
  PERFORM bdc_field       USING 'MEPO_SELECT-BSTYP_F'
                                'X'.

  PERFORM bdc_transaction USING 'ME23N'.
ENDFORM.                    " CALL_ME23N
*&---------------------------------------------------------------------*
*&      Form  CALL_VA03
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_va03 USING p_vbeln
                     p_posnr .
  PERFORM bdc_dynpro      USING 'SAPMV45A' '0102'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'VBAK-VBELN'
                                p_vbeln .

  IF NOT p_posnr IS INITIAL AND
     NOT p_posnr CO '0' .
    PERFORM bdc_dynpro      USING 'SAPMV45A' '4001'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=POPO'.
    PERFORM bdc_dynpro      USING 'SAPMV45A' '0251'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=POSI'.
    PERFORM bdc_field       USING 'RV45A-POSNR'
                                  p_posnr .
  ENDIF.

  PERFORM bdc_transaction USING 'VA03'.
ENDFORM.                                                    " CALL_VA03
*&---------------------------------------------------------------------*
*&      Form  CALL_IW23
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GWA_ALV_QMNUM  text
*----------------------------------------------------------------------*
FORM call_iw23  USING    p_qmnum.
  PERFORM bdc_dynpro      USING 'SAPLIQS0' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RIWO00-QMNUM'
                                p_qmnum .

  PERFORM bdc_transaction USING 'IW23'.
ENDFORM.                                                    " CALL_IW23
*&---------------------------------------------------------------------*
*&      Form  CALL_IW33
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GWA_ALV_AUFNR  text
*----------------------------------------------------------------------*
FORM call_iw33  USING    p_aufnr.
  PERFORM bdc_dynpro      USING 'SAPLCOIH' '0101'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'CAUFVD-AUFNR'
                                p_aufnr .

  PERFORM bdc_transaction USING 'IW33'.
ENDFORM.                                                    " CALL_IW33
*&---------------------------------------------------------------------*
*&      Form  CALL_MB51
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GWA_ALV_MBLNR  text
*      -->P_GWA_ALV_BUDAT(4)  text
*----------------------------------------------------------------------*
FORM call_mb51  USING    p_mblnr
                         p_mjahr.
  DATA: ld_budat TYPE mkpf-budat ,
        lb_budat(10) .

  IF NOT p_mjahr IS INITIAL .
    SELECT SINGLE budat INTO ld_budat
      FROM mkpf
     WHERE
           mblnr EQ p_mblnr
       AND mjahr EQ p_mjahr .

    WRITE ld_budat TO lb_budat .
  ENDIF.

  PERFORM bdc_dynpro      USING 'RM07DOCS' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ONLI'.
  PERFORM bdc_field       USING 'KUNNR-LOW'
                                ' ' .
  PERFORM bdc_field       USING 'AUFNR-LOW'
                                ' ' .
  PERFORM bdc_field       USING 'BUDAT-LOW'
                                lb_budat.
  PERFORM bdc_field       USING 'MBLNR-LOW'
                                p_mblnr.
  PERFORM bdc_field       USING 'DATABASE'
                                'X'.

  PERFORM bdc_dynpro      USING 'RM07DOCS' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/EE'.

  PERFORM bdc_transaction USING 'MB51'.

ENDFORM.                                                    " CALL_MB51


_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Ср, окт 06 2010, 18:49 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
А я некоторые из этих транзакций не через пакетники запускаю, мне так больше нравится (пишу не цельный код, но думаю будет ясно):

Code:
  METHOD call_mir4.

    DATA: lh_belnr   TYPE rbkp-belnr,
          lh_gjahr   TYPE rbkp-gjahr.

    lh_belnr = iv_belnr.
    SELECT SINGLE gjahr
      INTO lh_gjahr
      FROM rseg
      WHERE belnr = lh_belnr.

    SET PARAMETER ID 'RBN' FIELD lh_belnr.
    SET PARAMETER ID 'GJR' FIELD lh_gjahr.
    CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
  ENDMETHOD.

  METHOD call_vf03.

    CHECK iv_vbeln IS NOT INITIAL.

    SET PARAMETER ID 'VF' FIELD iv_vbeln.
    CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
  ENDMETHOD.

  METHOD call_va03.
    DATA: lwa_cobl   TYPE cobl.

    lwa_cobl-kdauf = iv_kdauf.
    CALL FUNCTION 'COBL_SHOW_MASTER_DATA'
      EXPORTING
        FIELD_NAME = 'KDAUF'
        I_COBL     = lwa_cobl
      EXCEPTIONS
        DISPLAY_NOT_POSSIBLE = 1.
  ENDMETHOD.

  METHOD call_mir4.

    DATA: lh_belnr   TYPE rbkp-belnr,
          lh_gjahr   TYPE rbkp-gjahr.

    lh_belnr = iv_belnr.
    SELECT SINGLE gjahr
      INTO lh_gjahr
      FROM rseg
      WHERE belnr = lh_belnr.

    SET PARAMETER ID 'RBN' FIELD lh_belnr.
    SET PARAMETER ID 'GJR' FIELD lh_gjahr.
    CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
  ENDMETHOD.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Ср, окт 06 2010, 23:28 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, фев 02 2009, 10:20
Сообщения: 89
Пол: Мужской
есть ФМ хороший на эту тему:
RV_CALL_DISPLAY_TRANSACTION

_________________
периодически играю в песочнице :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 08:05 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
raaleksandr написал:
А я некоторые из этих транзакций не через пакетники запускаю, мне так больше нравится (пишу не цельный код, но думаю будет ясно):

Так это традиционный способ.
Можно и так, но некоторые транзакции имеют селекционный экран (и/или другие экраны) и не учитывают, что при дриллдауне, при откате назад, их тоже не надо показывать (а не только при "движении вперед" по экранам).
Например, AS03, MB03, MB51.

Пакетники имеют преимущество. Ставим BACK для первых экранов, которые не нужно показывать при откате, и как только логика доходит до этих экранов, шаги для них подхватываются и срабатывают.

Кроме того, иногда нужно провалиться глубже, чем до второго экрана.
Если посмотрите повнимательнее, то увидите, что для VA03 и MIR4 происходит позиционирование на позиции документа (в случае, если она указана).

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Последний раз редактировалось 111 Чт, окт 07 2010, 12:12, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 09:00 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
SU53 написал:
есть ФМ хороший на эту тему:
RV_CALL_DISPLAY_TRANSACTION

Ни за что не поверю, что какой-либо ФМ может быть удобнее, чем
SHDB -> Новая запись -> ... -> Сгенерировать программу -> Copy/paste .
Для любых приложений.
:D

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 09:16 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
111 написал(а):
SU53 написал:
есть ФМ хороший на эту тему:
RV_CALL_DISPLAY_TRANSACTION

Ни за что не поверю, что какой-либо ФМ может быть удобнее, чем
SHDB -> Новая запись -> ... -> Сгенерировать программу -> Copy/paste .
Для любых приложений.
:D

Ну почему же :) Мне кажется к каждой транзакции нужен свой подход, где то удобнее пакетник, где то нет, например для me23n есть спец ФМ ME_DISPLAY_PURCHASE_DOCUMENT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 09:28 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Пример проваливания в дриллдаун по дабл-клику (используется ZALV_UTILS):
Code:
REPORT zmyreport .
INCLUDE: zmyreport_data ,
               zmyreport_sscr .

START-OF-SELECTION .
    PERFORM select_data .
END-OF-SELECTION .

  CALL SCREEN 1.

**- Каталог экранов и ключевых подпрограмм -**
*&---------------------------------------------------------------------*
  IF 1 = 0 .
    PERFORM: user_command_0001
                   , do_drilldown
                   , setup_alv
                   .
  ENDIF.
*&---------------------------------------------------------------------*

  INCLUDE: zalv_utils ,
                 zbdc_utils .
  INCLUDE: zmyreport _scrn1 .
....
DATA: gr_handle_events TYPE REF TO lcl_handle_events .
*&---------------------------------------------------------------------*
*&      Form  SETUP_ALV
*&---------------------------------------------------------------------*
FORM setup_alv .

  PERFORM: setup_single_alv2 TABLES gtv_alv
                            USING
                                   'ALV'
                                   1
                                   gr_alv
                                   p_var
                            CHANGING
                                   gr_alv_container
                                   gr_selections .

  CREATE OBJECT gr_handle_events
    EXPORTING
      p_suffix = '_0001'
      p_alv    = gr_alv.

  gr_handle_events->set_functions( 'DBL_CLICK' ) .
ENDFORM.                    " SETUP_ALV

*&---------------------------------------------------------------------*
*&  Include           zmyreport _scrn1
*&---------------------------------------------------------------------*
....
*&---------------------------------------------------------------------*
*&      Module  STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_001 OUTPUT.
  SET PF-STATUS '001'.
  SET TITLEBAR  '001'.

  IF g_init_ EQ 'X' .
    PERFORM setup_alv .
    PERFORM refresh_grid .
    CLEAR g_init_ .
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
...
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND_0001
*&---------------------------------------------------------------------*
FORM user_command_0001 .
  CASE g_okcode.
    WHEN 'EXIT' OR 'BACK'.
      CLEAR g_okcode .
      LEAVE TO SCREEN 0 .
...
  ENDCASE.

  CASE sy-ucomm .
    WHEN 'DBL_CLICK' .
      PERFORM do_drilldown .
      CLEAR sy-ucomm .
  ENDCASE.
ENDFORM.                    " USER_COMMAND_0001
...
*&---------------------------------------------------------------------*
*&      Form  DO_DRILLDOWN
*&---------------------------------------------------------------------*
FORM do_drilldown .
  IF g_rowclick > 0.
    READ TABLE gtv_alv INTO gwa_alv
                       INDEX g_rowclick .
    IF sy-subrc > 0 .
      EXIT .
    ENDIF.
  ELSE.
** Для того, чтобы отрабатывала и на строках (под)итогов тоже
    DATA: lb_column TYPE string ,
          lb_value  TYPE string .
    FIELD-SYMBOLS: <l_value> .
    get_dbl_clicked gr_alv lb_column lb_value. " ZALV_UTILS
    IF lb_column IS INITIAL .
      EXIT .
    ELSE.
      CLEAR gwa_alv .
      ASSIGN COMPONENT lb_column OF STRUCTURE gwa_alv TO <l_value> .
      CHECK sy-subrc = 0 .
      <l_value> = lb_value .
      g_colclick = lb_column .
    ENDIF.
  ENDIF.

  CASE g_colclick .
    WHEN 'VBELN' .
      PERFORM call_va03 USING gwa_alv-vbeln ' '.
    WHEN 'MBLNR'.
*      PERFORM call_mb03 USING gwa_alv-mblnr
*                              gwa_alv-budat(4) .
      IF NOT gwa_alv-budat IS INITIAL .
        PERFORM call_mb51 USING gwa_alv-mblnr
                                gwa_alv-budat(4) .
      ELSE.
        PERFORM call_mb51 USING gwa_alv-mblnr
                                ' '.
      ENDIF .
    WHEN 'QMNUM' .
      PERFORM call_iw23 USING gwa_alv-qmnum.
    WHEN 'AUFNR' .
      PERFORM call_iw33 USING gwa_alv-aufnr.
    WHEN 'FBELN' .
      PERFORM call_vf03 USING gwa_alv-fbeln .
  ENDCASE.

ENDFORM.                    " DO_DRILLDOWN

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Последний раз редактировалось 111 Чт, окт 07 2010, 10:08, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 09:32 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Besa написал:
Ну почему же :) Мне кажется к каждой транзакции нужен свой подход, где то удобнее пакетник, где то нет, например для me23n есть спец ФМ ME_DISPLAY_PURCHASE_DOCUMENT.

Ну в общем, да, согласен, погорячился. Не учел Enjoy-транзакции.
Можно в call_me23n заменить на вызов этого ФМ-а, кому как удобнее.
Заказчиков в рамках последних задач вполне устраивал и тот вариант, что сейчас реализован.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дарю народу инклуд ZBDC_UTILS (для работы с пакетниками)
СообщениеДобавлено: Чт, окт 07 2010, 10:33 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
111 написал(а):
Можно в call_me23n заменить на вызов этого ФМ-а, кому как удобнее.
Заказчиков в рамках последних задач вполне устраивал и тот вариант, что сейчас реализован.

Да я особо и не спорю :) Не вижу ничего критичного в реализации Вами проваливания.


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

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


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

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


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

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