abap中物料主数据导入程序(基本视图、公司代码视图、采购视图、银行视图)

该ABAP程序主要用于从Excel文件中导入业务伙伴的基本视图、采购视图、公司视图和银行信息。它首先定义了各种内部表类型,然后处理选择屏幕以获取用户选择的文件路径,接着读取Excel文件并转换数据。程序通过调用BAPI进行数据维护,分别对不同视图进行数据上传,并显示导入结果。

 

REPORT zmmb_003  LINE-SIZE 400
                 MESSAGE-ID zmm
                 NO STANDARD PAGE HEADING.

*--------------------------------------------------------------------
*  tables(聲明使用到的數據庫表)
*--------------------------------------------------------------------
TABLES: sscrfields.
*----------------------------------------------------------------------*
*  type-pools define(定義使用到的類型池)
*----------------------------------------------------------------------*
TYPE-POOLS:
icon.

*----------------------------------------------------------------------*
* ALV 相關
*----------------------------------------------------------------------*
DATA w_layout TYPE lvc_s_layo.
DATA it_fieldcat_lvc TYPE lvc_t_fcat.
DATA w_fieldcat TYPE lvc_s_fcat.
DATA: gs_fcode TYPE char10.
DATA: gv_error TYPE c.
DATA: gs_functxt  TYPE smp_dyntxt.
*--------------------------------------------------------------------
*  define internal table(定義類型結構)
*--------------------------------------------------------------------
TYPES: BEGIN OF typ_return,
         flagf    TYPE char4,
         msg(255),
       END OF typ_return.

*基本視圖
TYPES: BEGIN OF   typ_upload_basic,
         partner     TYPE  but100-partner  , "  業務夥伴編號編碼
         bu_role     TYPE  bu_role_screen , "  "BP 角色"
         name_org1   TYPE  but000-name_org1  , "  供應商名稱
         name_org2   TYPE  but000-name_org2  , "  組織名稱 2
         name_org3   TYPE  but000-name_org3  , "  組織名稱 3
         name_org4   TYPE  but000-name_org4  , "  組織名稱 4
         bu_sort1    TYPE  but000-bu_sort1 , "  搜索詞1
         bu_sort2    TYPE  but000-bu_sort2 , "  搜索詞2
         street      TYPE adrc-street, "街道地址1
         str_suppl1  TYPE adrc-str_suppl1, "街道地址2
         country     TYPE  adrc-country  , "  國家代碼
         city1       TYPE  adrc-city1  , "  城市
         region      TYPE  addr1_data-region , "  地區
         post_code1  TYPE  adrc-post_code1 , "  城市郵遞區號
         house_num1  TYPE  adrc-house_num1 , "  門牌號
         langu       TYPE   char2 , "  語言代碼
         tel_number  TYPE  adrc-tel_number , "  送貨聯繫電話
         tel_number2 TYPE  adrc-tel_number  , "  送貨聯繫電話2
         telf2       TYPE  kna1-telf2  , "  行動電話
         fax_number  TYPE  adrc-fax_number , "  傳真號
         smtp_addr   TYPE  adr6-smtp_addr  , "  電子郵件
         smtp_addr2  TYPE  adr6-smtp_addr  , "  電子郵件2
         taxtype     TYPE  dfkkbptaxnum-taxtype  , "  稅碼類別
         taxnumxl    LIKE dfkkbptaxnum-taxnumxl, "  統一編號(稅號)
       END OF  typ_upload_basic.

TYPES: BEGIN OF typ_basic_result.
         INCLUDE TYPE typ_upload_basic.
         INCLUDE TYPE  typ_return.
TYPES: END OF typ_basic_result.

TYPES: BEGIN OF typ_upload_pur,
         partner   TYPE  but100-partner  , "  供應商編碼
         name_org1 TYPE  but000-name_org1  , "  供應商名稱
         ekorg     TYPE  lfm1-ekorg  , "  採購組織
         waers     TYPE  lfm1-waers  , "  採購訂單貨幣
         zterm     TYPE  lfm1-zterm  , "  付款條件
         inco1     TYPE  lfm1-inco1  , "  貿易條款
         inco2     TYPE  lfm1-inco2  , "  貿易條款地點1
         vsbed     TYPE  lfm1-vsbed  , "  裝運條件
         webre     TYPE  lfm1-webre  , "  發票驗證
         verkf     TYPE lfm1-verkf, "業務人員
       END OF   typ_upload_pur.

TYPES: BEGIN OF typ_pur_result.
         INCLUDE TYPE typ_upload_pur.
         INCLUDE TYPE  typ_return.
TYPES: END OF typ_pur_result.

TYPES: BEGIN OF   typ_upload_company,
         partner   TYPE  but100-partner  , "  供應商編碼
         name_org1 TYPE  but000-name_org1  , "  供應商名稱
         bukrs     TYPE  lfb1-bukrs  , "  "公司代碼
         akont     TYPE  lfb1-akont  , "  "總帳的統馭科目
         zterm     TYPE  lfb1-zterm  , "  付款條件
         zwels     TYPE  lfb1-zwels  , "  付款方式
         hbkid     TYPE  lfb1-hbkid  , "  往來銀行
       END OF   typ_upload_company.

TYPES: BEGIN OF typ_company_result.
         INCLUDE TYPE typ_upload_company.
         INCLUDE TYPE  typ_return.
TYPES: END OF typ_company_result.

TYPES: BEGIN OF   typ_upload_bank,
         partner TYPE but000-partner, "供應商名稱
         banks   TYPE knbk-banks, "银行国家代码參考國家頁籤
         bkdsc   TYPE  knbk-ebpp_accname, "銀行名稱
         bankl   TYPE knbk-bankl, "银行代碼
         koinh   TYPE knbk-koinh, "帳戶持有的公司名稱
         bankn   TYPE knbk-bankn, "銀行帳號
       END OF   typ_upload_bank.

TYPES: BEGIN OF typ_bank_result.
         INCLUDE TYPE typ_upload_bank.
         INCLUDE TYPE  typ_return.
TYPES: END OF typ_bank_result.


DATA: it_upload_basic   TYPE TABLE OF typ_upload_basic,
      it_upload_pur     TYPE TABLE OF typ_upload_pur,
      it_upload_company TYPE TABLE OF typ_upload_company,
      it_upload_bank    TYPE TABLE OF typ_upload_bank,
      it_basic_result   TYPE TABLE OF typ_basic_result,
      it_pur_result     TYPE TABLE OF typ_pur_result,
      it_company_result TYPE TABLE OF typ_company_result,
      it_bank_result    TYPE TABLE OF typ_bank_result.

*CONSTANTS : c_parvw1 TYPE parvw VALUE 'PI',
*            c_parvw2 TYPE parvw VALUE 'OA',
*            c_parvw3 TYPE parvw VALUE 'VN'.


*-------------------------------------------------------------------
*  selection-screen(定義選擇螢幕)
*-------------------------------------------------------------------
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-000.
  SELECTION-SCREEN FUNCTION KEY 1.
  PARAMETERS:
    p_basic RADIOBUTTON  GROUP g1 DEFAULT 'X' USER-COMMAND com1,
    p_pur   RADIOBUTTON  GROUP g1,
    p_comp  RADIOBUTTON  GROUP g1,
    p_bank  RADIOBUTTON  GROUP g1.
SELECTION-SCREEN: END OF BLOCK b1.

SELECTION-SCREEN: BEGIN OF BLOCK b5 WITH FRAME TITLE TEXT-002.
  PARAMETERS: p_path LIKE rlgrap-filename .
SELECTION-SCREEN: END OF BLOCK b5.

*SELECTION-SCREEN FUNCTION KEY 2.
*--------------------------------------------------------------------
*  initialization(螢幕的初始化)
*--------------------------------------------------------------------
INITIALIZATION.
  PERFORM f_init_scr.

*------------------------------------------------------------------
*  at selection-screen(處理用於在選擇螢幕上的操作)
*------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
  PERFORM f_get_filepath USING p_path.

AT SELECTION-SCREEN.
  PERFORM f_auth_check.
* 螢幕處理 範本下載
  PERFORM frm_at_sle_scr.
*--------------------------------------------------------------------
*  start-of-selection(調用perform)
*--------------------------------------------------------------------
START-OF-SELECTION.
  PERFORM frm_check_filepath.
  "* set function code
  PERFORM f_set_fcode.
  "* upload data from file
  PERFORM f_upload_data.
* 導入數據
  PERFORM f_maintain_data.
*--------------------------------------------------------------------
*  end-of-selection(調用perform)
*--------------------------------------------------------------------
END-OF-SELECTION.


*********************************************************************
*  subroutines(子例程)
*********************************************************************
*&------------------------------------------------------------------*
*&      Form  f_get_filepath
*&------------------------------------------------------------------*
*       get the file to be updated
*-------------------------------------------------------------------*
FORM f_get_filepath USING    pr_path.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mask             =
                         ',All Files,*.*,Excel(*.XLSX;*.XLS),*.XLSX,*.XLS.'
      mode             = 'O'
    IMPORTING
      filename         = pr_path
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
ENDFORM.                    " f_get_filepath

*&------------------------------------------------------------------*
*&      Form  f_set_fcode
*&------------------------------------------------------------------*
FORM f_set_fcode .
  CASE 'X'.
    WHEN p_basic.
      gs_fcode = 'V_BASIC'.

    WHEN p_pur.
      gs_fcode = 'V_PUR'.

    WHEN p_comp.
      gs_fcode = 'V_COMPANY'.

    WHEN p_bank.
      gs_fcode = 'V_BANK'.

  ENDCASE.
  IF gs_fcode IS INITIAL.
    MESSAGE i208(00) WITH 'Please run prgram via TCode!'.
    STOP.
  ENDIF.
ENDFORM.
*&-------------------------------------------------------------------*
*&      Form  f_upload_data
*&-------------------------------------------------------------------*
*       Upload data for maitain material
*-------------------------------------------------------------------*
FORM f_upload_data .

  CASE gs_fcode.
    WHEN 'V_BASIC'.
      PERFORM f_upl_data TABLES it_upload_basic.
      LOOP AT it_upload_basic ASSIGNING FIELD-SYMBOL(<fs_basic>).
*        PERFORM frm_matnr_input USING <fs_basic>-matnr CHANGING <fs_basic>-matnr.
        <fs_basic>-partner =  |{ <fs_basic>-partner ALPHA = IN }|. ."
      ENDLOOP.

    WHEN 'V_PUR'.
      PERFORM f_upl_data TABLES it_upload_pur.
      LOOP AT it_upload_pur ASSIGNING FIELD-SYMBOL(<fs_pur>).
*        PERFORM frm_matnr_input USING <fs_PUR>-matnr CHANGING <fs_PUR>-matnr.
        <fs_pur>-partner =  |{ <fs_pur>-partner ALPHA = IN }|. "
      ENDLOOP.

    WHEN 'V_COMPANY'.
      PERFORM f_upl_data TABLES it_upload_company.
      LOOP AT it_upload_company ASSIGNING FIELD-SYMBOL(<fs_company>).
*        PERFORM frm_matnr_input USING <fs_company>-matnr CHANGING <fs_company>-matnr.
        <fs_company>-partner =  |{ <fs_company>-partner ALPHA = IN }|. "
        <fs_company>-akont =  | { <fs_company>-akont ALPHA = IN }|. "
      ENDLOO
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值