Vous êtes sur la page 1sur 9

Bapi for extending material for plant and storage

type-pools : slis.
tables : vbap.

TYPES : BEGIN OF T1,
  VBELN TYPE VBAP-VBELN,
  WERKS TYPE VBAP-WERKS,
  END OF T1.

TYPES : BEGIN OF T2,
  WERKS TYPE T001L-WERKS,
  LGORT TYPE T001L-LGORT,
END OF T2.

types : BEGIN OF ty_popup,
  CHECKBOX(1),
  WERKS type T001L-werks,
  LGORT type T001L-lgort,
  END OF ty_popup.

DATA : IT_T1 TYPE TABLE OF T1,
      WA_T1 LIKE LINE OF IT_T1.

DATA : IT_T2 TYPE TABLE OF T2,
      WA_T2 LIKE LINE OF IT_T2.

DATA : IT_T3 TYPE TABLE OF mard,
      WA_T3 LIKE LINE OF IT_T3.

data : it_pop type TABLE OF ty_popup,
      wa_pop type ty_popup.

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
      WA_FCAT LIKE LINE OF IT_FCAT.

DATA : IT_BOM TYPE TABLE OF YBOM1,
      WA_BOM LIKE LINE OF IT_BOM.
DATA : IT_BOM1 TYPE TABLE OF YBOM1,
      WA_BOM1 LIKE LINE OF IT_BOM.

data : it_VBAP type TABLE OF vbap,
      wa_VBAP like line of it_VBAP.

*****************************declearation for bapi

DATA: v_vbeln            LIKE vbak-vbeln.

DATA : HEADDATA             LIKE BAPIMATHEAD,
      CLIENTDATA            LIKE BAPI_MARA,
      CLIENTDATAX           LIKE BAPI_MARAX,
      PLANTDATA             LIKE BAPI_MARC,
      PLANTDATAX            LIKE BAPI_MARCX,
      STORAGELOCATIONDATA   LIKE BAPI_MARD,
      STORAGELOCATIONDATAX  LIKE BAPI_MARDX.
DATA:  WA_RETURN            TYPE  BAPIRET2,
      IT_RETURN            TYPE TABLE OF BAPIRET2.
DATA:  WA_message            TYPE  BAPIRET2,
      IT_message            TYPE TABLE OF BAPIRET2,
        ls_fieldcatlog TYPE slis_fieldcat_alv,
    lt_fieldcatlog TYPE slis_t_fieldcat_alv.
*******************************************************

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS : p_vbeln type vbap-vbeln.
SELECTION-SCREEN END OF BLOCK B1.

AT SELECTION-SCREEN OUTPUT.
  set PF-STATUS 'ZSTATE'.

AT SELECTION-SCREEN .
  PERFORM GET_DATA.

FORM GET_DATA .
  CASE SY-UCOMM.
    WHEN 'POPUP'.
      SELECT VBELN WERKS FROM VBAP INTO CORRESPONDING FIELDS OF TABLE IT_T1
        WHERE VBELN = P_VBELN.
      IF IT_T1 IS NOT INITIAL.
        SELECT WERKS LGORT FROM T001L INTO CORRESPONDING FIELDS OF TABLE IT_T2
          FOR ALL ENTRIES IN IT_T1
          WHERE WERKS = IT_T1-WERKS.
      ENDIF.
      SELECT  matnr FROM YBOM1 INTO CORRESPONDING FIELDS OF TABLE
        it_bom WHERE vbeln = p_vbeln.

      if it_t2 is not INITIAL.
        select * from mard into CORRESPONDING FIELDS OF table it_t3 FOR ALL ENTRIES IN it_t2 w
here lgort = it_t2-lgort and werks = it_t2-werks.
      endif.
      loop at it_t2 into wa_t2.
        WA_POP-WERKS = WA_T2-WERKS.
        WA_POP-LGORT = WA_T2-LGORT.
        APPEND WA_POP TO IT_POP.
      ENDLOOP.

      perform display_popup.
      PERFORM GET_BAPI.

  ENDCASE.
ENDFORM.                    " GET_DATA

FORM DISPLAY_POPUP.
*  CLEAR : WA_FCAT.
*  WA_FCAT-COL_POS = '1'.
*  WA_FCAT-FIELDNAME = 'CHECKBOX'.
**WA_FCAT-TABNAME   = 'IT_POP'.
*  WA_FCAT-SELTEXT_M = 'CHECKBOX'.
*  APPEND WA_FCAT TO IT_FCAT.

  CLEAR : WA_FCAT.
  WA_FCAT-COL_POS = '2'.
  WA_FCAT-FIELDNAME = 'WERKS'.
*WA_FCAT-TABNAME   = 'IT_POP'.
  WA_FCAT-SELTEXT_M = 'PLANT NO'.
  APPEND WA_FCAT TO IT_FCAT.

  CLEAR : WA_FCAT.
  WA_FCAT-COL_POS = '1'.
  WA_FCAT-FIELDNAME = 'LGORT'.
*WA_FCAT-TABNAME   = 'IT_POP'.
  WA_FCAT-SELTEXT_M = 'STORAGE LOCATION'.
  APPEND WA_FCAT TO IT_FCAT.

  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
*     I_TITLE              =
*     I_SELECTION          = 'X'
*     I_ALLOW_NO_SELECTION =
      I_ZEBRA              = 'X'
*     I_SCREEN_START_COLUMN         = 0
*     I_SCREEN_START_LINE  = 0
*     I_SCREEN_END_COLUMN  = 0
*     I_SCREEN_END_LINE    = 0
      I_CHECKBOX_FIELDNAME = 'CHECKBOX'
*     I_LINEMARK_FIELDNAME =
*     I_SCROLL_TO_SEL_LINE = 'X'
      I_TABNAME            = 'IT_POP'
      IT_FIELDCAT          = IT_FCAT
    TABLES
      T_OUTTAB             = IT_POP.

  REFRESH IT_FCAT.

ENDFORM.                    " DISPLAY_POPUP

* Sales document type
FORM GET_BAPI.

    LOOP AT IT_POP INTO WA_POP WHERE CHECKBOX = 'X'.
      PLANTDATA-PLANT                      = Wa_pop-werks.
      PLANTDATAX-PLANT                     = wa_pop-werks.

      Storagelocationdata-plant            = Wa_pop-werks.
      StoragelocationdataX-plant           = Wa_pop-werks.

      Storagelocationdata-STGE_LOC         = WA_POP-LGORT.
      STORAGELOCATIONDATAX-STGE_LOC        = wa_pop-lgort.
    ENDLOOP.

      LOOP AT IT_T3 INTO WA_T3 where matnr is NOT INITIAL and werks = wa_pop-werks and lgort 
= wa_pop-lgort.
        READ TABLE IT_BOM INTO WA_BOM WITH KEY MATNR = WA_T3-MATNR.
        if sy-subrc eq 0.
          WA_BOM1-MATNR = WA_BOM-MATNR.
          APPEND WA_BOM1 TO IT_BOM1.
          clear wa_bom.
        endif.
      ENDLOOP.

  loop at it_bom1 into wa_bom1 where matnr is NOT INITIAL.
    clear wa_return.
    Headdata-MATERIAL = wa_bom1-matnr.
    CLEAR wa_bom1.
    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        HEADDATA             = HEADDATA
*       CLIENTDATA           = CLIENTDATA
*       CLIENTDATAX          = CLIENTDATAX
        PLANTDATA            = PLANTDATA
        PLANTDATAX           = PLANTDATAX
*       FORECASTPARAMETERS   =
*       FORECASTPARAMETERSX  =
*       PLANNINGDATA         =
*       PLANNINGDATAX        =
        STORAGELOCATIONDATA  = STORAGELOCATIONDATA
        STORAGELOCATIONDATAX = STORAGELOCATIONDATAX
*       VALUATIONDATA        =
*       VALUATIONDATAX       =
*       WAREHOUSENUMBERDATA  =
*       WAREHOUSENUMBERDATAX =
*       SALESDATA            =
*       SALESDATAX           =
*       STORAGETYPEDATA      =
*       STORAGETYPEDATAX     =
*       FLAG_ONLINE          = ' '
*       FLAG_CAD_CALL        = ' '
*       NO_DEQUEUE           = ' '
*       NO_ROLLBACK_WORK     = ' '
*       AFS_HEADDATA         =
*       AFS_CLIENTDATA       =
*       AFS_CLIENTDATAX      =
*       AFS_PLANTDATA        =
*       AFS_PLANTDATAX       =
*       AFS_SALESDATA        =
*       AFS_SALESDATAX       =
      IMPORTING
        RETURN               = WA_return
*   TABLES
*       MATERIALDESCRIPTION  =
*       UNITSOFMEASURE       =
*       UNITSOFMEASUREX      =
*       INTERNATIONALARTNOS  =
*       MATERIALLONGTEXT     =
*       TAXCLASSIFICATIONS   =
*       RETURNMESSAGES       =
*       PRTDATA              =
*       PRTDATAX             =
*       EXTENSIONIN          =
*       EXTENSIONINX         =
*       SKU_UNITSOFMEASURE   =
*       SKU_INTERNATIONALARTNOS        =
*       SKU_PLANTDATA_MRP    =
*       SKU_PLANTDATA_VALUATION        =
*       SKU_PALLETIZATION_WM =
*       SKU_STRATEGIES_WM    =
*       SKU_CAPUSAGE_WM      =
*       SKU_STORAGETYPEDATA  =
*       AFS_SEASONDATA       =
*       SKU_SALESDATA        =
*       AFS_QUOTACATEGORIES  =
*       SKU_COMM_CODES       =
*       AFS_RETAIL_DATA      =
*       SKU_GROUP_PROD_VERSIONS        =
*       SKU_PLANTDATA_VALUATIONX       =
*       SKU_PLANTDATA_MRPX   =
*       SKU_PALLETIZATION_WMX          =
*       SKU_STRATEGIES_WMX   =
*       SKU_CAPUSAGE_WMX     =
*       SKU_STORAGETYPEDATAX =
*       SKU_SALESDATAX       =
*       SKU_COMM_CODESX      =
*       SKU_UNITSOFMEASUREX  =
      .
        APPEND WA_RETURN TO IT_RETURN.
        loop at it_return into wa_return WHERE type = 'E'.
        move wa_return to wa_message..
        CONCATENATE Headdata-MATERIAL wa_message-message into wa_message-message SEPAR
ATED BY '/'.
        APPEND wa_message to it_message.
        ENDLOOP.

  ENDLOOP.
  if it_message is INITIAL .
      MESSAGE 'MATERIAL created' TYPE 'I'.
   else.

  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '1'.
  ls_fieldcatlog-fieldname = 'TYPE'.
    ls_fieldcatlog-OUTPUTLEN = 15.
*  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Message Type'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.

  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '2'.
  ls_fieldcatlog-OUTPUTLEN = 80.
  ls_fieldcatlog-fieldname = 'MESSAGE'.
*  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Message'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
    I_CALLBACK_PROGRAM                = sy-repid
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
    I_GRID_TITLE                      = 'Result'
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
    IT_FIELDCAT                       = lt_fieldcatlog
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
   I_SCREEN_START_COLUMN             = 10
   I_SCREEN_START_LINE               = 20
   I_SCREEN_END_COLUMN               = 100
   I_SCREEN_END_LINE                 = 40
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    T_OUTTAB                          = it_message
 EXCEPTIONS
   PROGRAM_ERROR                     = 1
   OTHERS                            = 2
          .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

    ENDIF.

*ELSE.
*  MESSAGE 'PLEASE SELECT ATLEAST ONE RECORD' TYPE 'I'.
*ENDIF.
*  endif.

refresh it_fcat.
ENDFORM.

Vous aimerez peut-être aussi