SAP MM Use ZBAPI_PO_CRATE to load open PO document

dicksonjyl560101發表於2016-10-13

SAP MM Use ZBAPI_PO_CRATE to load open PO document

 

Pls check if this code.  I used this to upload po.

*&---------------------------------------------------------------------*

*& Report  ZBAPI_PO_CRATE

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

 

REPORT  ZBAPI_PO_CRATE.

 

data : PO_HEADER like BAPIEKKOC.

data : PO_HEADER_ADD_DATA like BAPIEKKOA.

data : PO_ITEMS like BAPIEKPOC occurs 0 with header

line.

data : PO_ITEM_SCHEDULES like BAPIEKET occurs 0 with

header line.

data : RETURN like BAPIRETURN occurs 0 with header

line.

DATA : BEGIN OF TAB OCCURS 0,

       PO_NUMBER like BAPIEKKOC-PO_NUMBER,

       DOC_DATE(10),

       DOC_TYPE like BAPIEKKOC-DOC_TYPE,

       CO_CODE like BAPIEKKOC-CO_CODE,

       PURCH_ORG like BAPIEKKOC-PURCH_ORG,

       PUR_GROUP like BAPIEKKOC-PUR_GROUP,

       VENDOR like BAPIEKKOC-VENDOR,

       PMNTTRMS like BAPIEKKOA-PMNTTRMS,

       INCOTERMS1 like BAPIEKKOA-INCOTERMS1,

       INCOTERMS2 like BAPIEKKOA-INCOTERMS2,

       PO_ITEM like  BAPIEKPOC-PO_ITEM,

       MATERIAL like BAPIEKPOC-MATERIAL,

       PUR_MAT like BAPIEKPOC-PUR_MAT,

       ITEM_CAT like BAPIEKPOC-ITEM_CAT,

       PLANT like BAPIEKPOC-PLANT,

       NET_PRICE like BAPIEKPOC-NET_PRICE,

       TAX_CODE like BAPIEKPOC-TAX_CODE,

       DELIV_DATE(10),

       QUANTITY like BAPIEKET-QUANTITY,

     end of tab.

 

data: itab1 like alsmex_tabline occurs 0 with header

line.

DATA: gd_currentrow type i.

data : PURCHASEORDER like ekko-ebeln.

Data: tot_rec type i,     "Total Records

     gd_update type i,   "Main Table Increement

Counter

     gd_lines type i,    "Success Table increement

Counter

     w_textout like t100-text. "VARIABLE TO GET ERROR

LOG

 

data : begin of it_success occurs 0,

        PURCHASEORDER LIKE ekko-ebeln,  "PROJECT

      end of it_success.

 

data : begin of it_error occurs 0,

        pono like  ekko-ebeln,

        err_msg(73) TYPE c,    "TO RETREIVE ERROR

MESSAGES

     end of it_error.

data : pono like  ekko-ebeln.

 

selection-screen begin of block b1 with frame.

skip 3.

parameter:p_infile like rlgrap-filename obligatory.

skip 3.

selection-screen end  of block b1.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.

  PERFORM value_help.

 

start-of-selection.

 

  call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'

    EXPORTING

      filename                = p_infile

      i_begin_col             = '1'

      i_begin_row             = '2' "Do not require

headings

      i_end_col               = '22'

      i_end_row               = '10000'

    TABLES

      intern                  = itab1

    EXCEPTIONS

      inconsistent_parameters = 1

      upload_ole              = 2

      others                  = 3.

  if sy-subrc <> 0.

    message e010(zz) with text-001. "Problem uploading

Excel Spreadsheet

  endif.

 

*perform open_group.

 

  sort itab1 by row col.

 

* Get first row retrieved

  read table itab1 index 1.

 

* Set first row retrieved to current row

  gd_currentrow = itab1-row.

 

  loop at itab1.

 

* Reset values for next row

    if itab1-row ne gd_currentrow.

      append tab .

      clear tab.

      gd_currentrow = itab1-row.

    endif.

 

    case itab1-col.

 

      when '0001'. "PGNAM

        TAB-PO_NUMBER = itab1-value.

      when '0002'. "RONAM

        TAB-DOC_DATE = itab1-value.

      when '0003'. "JVLEVEL

        TAB-DOC_TYPE = itab1-value.

      when '0004'. "FTTYPE

        TAB-CO_CODE = itab1-value.

      when '0005'. "LANG

        TAB-PURCH_ORG =  itab1-value.

      when '0006'. "LTEXT

        TAB-PUR_GROUP = itab1-value.

      when '0007'. "LTEXT

        TAB-VENDOR = itab1-value.

      when '0008'. "LTEXT

        TAB-PMNTTRMS = itab1-value.

      when '0009'. "LTEXT

        TAB-INCOTERMS1 = itab1-value.

      when '0010'. "FTTYPE

        TAB-INCOTERMS2 = itab1-value.

      when '0011'. "FTTYPE

        TAB-PO_ITEM = itab1-value.

      when '0012'. "FTTYPE

        TAB-MATERIAL = itab1-value.

      when '0013'. "FTTYPE

        TAB-PUR_MAT = itab1-value.

      when '0014'. "FTTYPE

        TAB-ITEM_CAT = itab1-value.

      when '0015'. "FTTYPE

        shift itab1-value left deleting leading space.

        TAB-PLANT = itab1-value.

      when '0016'. "FTTYPE

        TAB-NET_PRICE = itab1-value.

      when '0017'. "FTTYPE

        TAB-TAX_CODE = itab1-value.

      when '0018'. "FTTYPE

        TAB-DELIV_DATE = itab1-value.

      when '0019'. "FTTYPE

        TAB-QUANTITY = itab1-value.

    endcase.

  endloop.

  append tab.

  clear tab.

 

  sort tab by PO_NUMBER.

  DELETE TAB WHERE PO_NUMBER = SPACE.

  loop at tab.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

      EXPORTING

        INPUT  = tab-material

      IMPORTING

        OUTPUT = tab-material.

 

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

      EXPORTING

        INPUT  = tab-PUR_MAT

      IMPORTING

        OUTPUT = tab-PUR_MAT.

 

 

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

      EXPORTING

        INPUT  = tab-vendor

      IMPORTING

        OUTPUT = tab-vendor.

 

 

    concatenate tab-doc_DATE+4(4) tab-doc_DATE+2(2)

tab-doc_DATE+0(2)

into tab-doc_DATE.

    concatenate tab-DELIV_DATE+4(4)

tab-DELIV_DATE+2(2)

tab-DELIV_DATE+0(2) into tab-DELIV_DATE.

 

    pono = tab-PO_NUMBER.

    if tab-po_number = pono.

      PO_HEADER-DOC_DATE = tab-DOC_DATE.

      PO_HEADER-DOC_TYPE = tab-DOC_TYPE.

      PO_HEADER-CO_CODE  = tab-CO_CODE.

      PO_HEADER-PURCH_ORG = tab-PURCH_ORG.

      PO_HEADER-PUR_GROUP = tab-PUR_GROUP.

      PO_HEADER-VENDOR = tab-VENDOR.

      PO_HEADER-PO_NUMBER = tab-PO_NUMBER.

 

      PO_HEADER_ADD_DATA-PMNTTRMS = tab-PMNTTRMS.

      PO_HEADER_ADD_DATA-INCOTERMS1 = tab-INCOTERMS1.

      PO_HEADER_ADD_DATA-INCOTERMS2 = tab-INCOTERMS2.

 

      PO_ITEMS-PO_ITEM = tab-PO_ITEM.

      PO_ITEMS-MATERIAL = tab-MATERIAL.

      PO_ITEMS-PUR_MAT = tab-PUR_MAT.

      PO_ITEMS-ITEM_CAT = tab-ITEM_CAT.

      PO_ITEMS-PLANT = tab-PLANT.

      PO_ITEMS-NET_PRICE = tab-NET_PRICE.

      PO_ITEMS-TAX_CODE = tab-TAX_CODE.

      append po_items.

 

      PO_ITEM_SCHEDULES-PO_ITEM = tab-PO_ITEM.

      PO_ITEM_SCHEDULES-DELIV_DATE = tab-DELIV_DATE.

      PO_ITEM_SCHEDULES-QUANTITY =  tab-QUANTITY.

      append PO_ITEM_SCHEDULES.

    endif.

    at end of PO_NUMBER.

      CALL FUNCTION 'BAPI_PO_CREATE'

        EXPORTING

          PO_HEADER                        = PO_HEADER

         PO_HEADER_ADD_DATA               =

PO_HEADER_ADD_DATA

*           HEADER_ADD_DATA_RELEVANT         =

*           PO_ADDRESS                       =

*           SKIP_ITEMS_WITH_ERROR            = 'X'

*           ITEM_ADD_DATA_RELEVANT           =

*           HEADER_TECH_FIELDS               =

       IMPORTING

         PURCHASEORDER                    =

PURCHASEORDER

        TABLES

          PO_ITEMS                         = PO_ITEMS

*           PO_ITEM_ADD_DATA                 =

          PO_ITEM_SCHEDULES                =

PO_ITEM_SCHEDULES

*           PO_ITEM_ACCOUNT_ASSIGNMENT       =

*           PO_ITEM_TEXT                     =

         RETURN                            = RETURN

*           PO_LIMITS                        =

*           PO_CONTRACT_LIMITS               =

*           PO_SERVICES                      =

*           PO_SRV_ACCASS_VALUES             =

*           PO_SERVICES_TEXT                 =

*           PO_BUSINESS_PARTNER              =

*           EXTENSIONIN                      =

*           POADDRDELIVERY                   =

                .

 

      if PURCHASEORDER <> space.

.

        commit work.

        ADD 1 TO gd_update.

        it_success-PURCHASEORDER = PURCHASEORDER.

        append it_success.

       

clear:PO_HEADER,PO_HEADER_ADD_DATA,PURCHASEORDER.

        refresh : PO_ITEMS,PO_ITEM_SCHEDULES,RETURN.

      ELSE.

        loop at return.

          it_error-pono = tab-PO_NUMBER.

          it_error-err_msg = return-MESSAGE .

          Append it_error.

        ENDLOOP.

       

clear:PO_HEADER,PO_HEADER_ADD_DATA,PURCHASEORDER.

        refresh : PO_ITEMS,PO_ITEM_SCHEDULES,RETURN.

      endif.

    endat.

  endloop.

  DESCRIBE TABLE it_success LINES gd_lines.

  IF gd_lines GT 0.

*     Display result report column headings

    PERFORM display_column_headings.

*     Display result report

    PERFORM DISPLAY_SUCESS.

  ENDIF.

 

* IF SUCESS FAILS Display Error Report

  DESCRIBE TABLE it_error LINES gd_lines.

  IF gd_lines GT 0.

    PERFORM errorheadings.

    PERFORM errorreport.

  ENDIF.

*&---------------------------------------------------------------------*

*&      Form  display_column_headings

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM display_column_headings.

  WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.

  SKIP.

  WRITE:2 'The following records inserted

successfully:'(013).

  WRITE:/ sy-uline(15).

 

  FORMAT COLOR COL_HEADING.

  WRITE:/      sy-vline,

           (10) 'Purchase order'(004), sy-vline.

 

  WRITE:/ sy-uline(15).

ENDFORM.                    "display_column_headings

*Subroutine to display SUCESS REPORT

FORM DISPLAY_SUCESS.

  FORMAT COLOR COL_NORMAL.

  LOOP AT it_success.

    WRITE:/      sy-vline,

        (10)  it_success-PURCHASEORDER, sy-vline.

 

    CLEAR it_success.

  ENDLOOP.

  WRITE:/ sy-uline(15).

  REFRESH: it_success.

  FORMAT COLOR COL_BACKGROUND.

ENDFORM.                               "

DISPLAY_REPORT

*&---------------------------------------------------------------------*

*&      Form  errorreport

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM errorreport.

  LOOP AT it_error.

    WRITE:/      sy-vline,

            (10) it_error-pono, sy-vline,

             (40) it_error-err_msg, sy-vline.

 

  ENDLOOP.

  WRITE:/ sy-uline(104).

  REFRESH: it_error.

 

endform.                    "errorreport

 

*&---------------------------------------------------------------------*

*&      Form  ERRORHEADINGS

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM ERRORHEADINGS.

  SKIP.

  WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.

  SKIP.

  WRITE:2 'The following records failed during

update:'(008).

  WRITE:/ sy-uline(104).

  FORMAT COLOR COL_HEADING.

  WRITE:/      sy-vline,

          (10) 'ERROR.'(009), sy-vline.

 

  WRITE:/ sy-uline(104).

  FORMAT COLOR COL_NORMAL.

ENDFORM.                    "ERRORHEADINGS

**&---------------------------------------------------------------------

**

**&      Form  value_help

**&---------------------------------------------------------------------

**

**       text

**----------------------------------------------------------------------

**

**  -->  p1        text

**  <--  p2        text

**----------------------------------------------------------------------

**

FORM value_help .

  CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'

    EXPORTING

      DEF_FILENAME     = ' '

      DEF_PATH         = ' '

      MASK             = ',*.*,*.*.'

      MODE             = 'O'

      TITLE            = ' '

    IMPORTING

      FILENAME         = p_infile

    EXCEPTIONS

      INV_WINSYS       = 1

      NO_BATCH         = 2

      SELECTION_CANCEL = 3

      SELECTION_ERROR  = 4

      OTHERS           = 5.

  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.                    "value_help

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2126212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章