SAP 成本中心-成本要素 实际值推送中间库

要求

中间表结构

基于成本中心的组织维护

*&---------------------------------------------------------------------*
*& REPORT  ZRPT_PP_CSSC
*&
*&---------------------------------------------------------------------*
*&DATE:20220228
*&AUTHOR:gavin
*&TITLE:上传成本中心及其描述信息
*&---------------------------------------------------------------------*

REPORT ZRPT_PP_CSSC.
TABLES:ZPPCOSTMDATA,SSCRFIELDS.
*
*定义内表类型
*
TYPES: W_ITAB like ZPPCOSTMDATA.

FIELD-SYMBOLS: <FS>.

DATA:
      FILETAB TYPE FILETABLE WITH HEADER LINE,
      RC TYPE I,
      G_FILE TYPE RLGRAP-FILENAME,
      ITAB TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: WTAB TYPE TABLE OF W_ITAB WITH HEADER LINE.
Data: count type i.
DATA:STDATUM LIKE SY-DATUM,
      STUZEIT LIKE SY-UZEIT.
DATA:L_FILENAME TYPE STRING,L_MUBAN TYPE STRING.
DATA:GV_FULLPATH TYPE STRING,GV_PATH TYPE STRING,GV_NAME TYPE STRING.

*&---------------------------------------------------------------------*
*& 选择界面
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1 .

SELECT-OPTIONS:S_KOSTL FOR ZPPCOSTMDATA-KOSTL,"工厂
               S_ZDEPT1 FOR ZPPCOSTMDATA-ZDEPT1,"一级部门
               S_ZDEPT2 FOR ZPPCOSTMDATA-ZDEPT2,"一级部门
               S_ZDEPT3 FOR ZPPCOSTMDATA-ZDEPT3,"一级部门
               S_ZDEPT4 FOR ZPPCOSTMDATA-ZDEPT4,"一级部门
               S_ZDEPT5 FOR ZPPCOSTMDATA-ZDEPT5."一级部门

PARAMETER: P_FILE  TYPE STRING.
PARAMETER:DELFLG AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 5(60) but1 USER-COMMAND bt1.
SELECTION-SCREEN PUSHBUTTON 70(20) but2 USER-COMMAND bt2.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  TXT1 = '请输入条件'.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = ICON_BW_REF_STRUCTURE_SAP
      TEXT                  = 'SM30维护 视图 ZPPCOSTMDATA'
      INFO                  = 'SM30维护 视图 ZPPCOSTMDATA'
    IMPORTING
      result                = but1
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = ICON_BW_REF_STRUCTURE_SAP
      TEXT                  = '下载维护模板'
      INFO                  = '下载维护模板'
    IMPORTING
      result                = but2
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

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

AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'BT1'.
      PERFORM CALLSM30.
    WHEN 'BT2'.
      PERFORM DOWNLOAD_DATA.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      DEFAULT_FILENAME = P_FILE
    CHANGING
      RC               = RC
      FILE_TABLE       = FILETAB[].

  READ TABLE  FILETAB INDEX  1.
  IF SY-SUBRC EQ 0.
    P_FILE = FILETAB-FILENAME.
  ENDIF.

START-OF-SELECTION.

  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.


  if p_file <> ''.
    PERFORM GETEXCEL."EXCEL数据获取
  else.
    perform getdata."获取版本描述表中数据
  endif.

  PERFORM WRITERPTRUNRECORD.
  PERFORM DISPLAY."数据ALV输出

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.

  get time.
  CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
    EXPORTING
      TCODE     = SY-TCODE
      PROGRAMM  = SY-CPROG
      DATUMRST  = STDATUM
      UZEITRST  = STUZEIT
      BATCH     = SY-BATCH
      DATUMREND = SY-datum
      UZEITREND = sy-UZEIT
      DATUMC    = '20220228'
      RUNNER    = SY-UNAME
      RPTSRC    = '邱海云'.

ENDFORM.                    "WRITERPTRUNRECORD

*&---------------------------------------------------------------------*
*&      FORM  DISPLAY
*&---------------------------------------------------------------------*
*       TEXT 数据展示
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DISPLAY .
  DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
        IS_VARIANT LIKE DISVARIANT,
        IT_EVENTS   TYPE SLIS_T_EVENT,
        IS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
        TITLE       TYPE LVC_TITLE,
        I_CALLBACK_PROGRAM TYPE SY-REPID,
        IT_SORT     TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE
        .
  PERFORM FIELDCAT_INIT USING IT_FIELDCAT.
  PERFORM LAYOUT_INIT USING IS_LAYOUT.
  I_CALLBACK_PROGRAM = SY-REPID.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = I_CALLBACK_PROGRAM
      I_GRID_TITLE             = TITLE
      IS_LAYOUT                = IS_LAYOUT
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IT_FIELDCAT              = IT_FIELDCAT
      IT_EVENTS                = IT_EVENTS
    TABLES
      T_OUTTAB                 = WTAB[]
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    " DISPLAY

*&--------------------------------------------------------------------- *
*&      Form  g_status_form 调用自定义屏幕
*&---------------------------------------------------------------------
FORM SET_PF_STATUS  USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM.                    "SET_PF_STATUS

*&---------------------------------------------------------------------*
*&      FORM  FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       TEXT 定义输出项
*----------------------------------------------------------------------*
*      -->P_IT_FIELDCAT  TEXT
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT  USING  IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DATA:LOC_REPID LIKE SY-REPID.
  LOC_REPID = SY-REPID.

  LS_FIELDCAT-FIELDNAME = 'KOSTL'.
  LS_FIELDCAT-REPTEXT_DDIC  = '成本中心代码'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'KOSTLT'.
  LS_FIELDCAT-REPTEXT_DDIC  = '成本中心描述'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'ZDEPT5'.
  LS_FIELDCAT-REPTEXT_DDIC  = '五级部门'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'ZDEPT4'.
  LS_FIELDCAT-REPTEXT_DDIC  = '四级部门'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'ZDEPT3'.
  LS_FIELDCAT-REPTEXT_DDIC  = '三级部门'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'ZDEPT2'.
  LS_FIELDCAT-REPTEXT_DDIC  = '二级部门'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'ZDEPT1'.
  LS_FIELDCAT-REPTEXT_DDIC  = '一级部门'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

ENDFORM.                    "FIELDCAT_INIT
" FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      FORM  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       TEXT  LAYOUT属性设置,双击响应字段设置
*----------------------------------------------------------------------*
*      -->P_IS_LAYOUT  TEXT
*----------------------------------------------------------------------*
FORM LAYOUT_INIT  USING    IS_LAYOUT TYPE SLIS_LAYOUT_ALV.
  IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ENDFORM.                    " LAYOUT_INIT
**&--------------------------------------------------------------------*
**&      FORM  USER_COMMAND
**&--------------------------------------------------------------------*
**       TEXT
**---------------------------------------------------------------------*
**      -->RF_UCOMM   TEXT
**      -->RS_SELFIELDTEXT
**---------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
                       RS_SELFIELD TYPE SLIS_SELFIELD.      "#EC CALLED

  CASE RF_UCOMM.
    WHEN '&PRT'.
*****插入数据
      IF DELFLG = 'X'.
        DELETE FROM ZPPCOSTMDATA.
        INSERT ZPPCOSTMDATA FROM TABLE WTAB.
      ELSE.
        INSERT ZPPCOSTMDATA FROM TABLE WTAB  ACCEPTING DUPLICATE KEYS.
      ENDIF.
      DESCRIBE TABLE WTAB LINES COUNT.
      MESSAGE S001(00) WITH  '成功上传' COUNT '条'.
  ENDCASE.
ENDFORM.                   "USER_COMMAND
*&---------------------------------------------------------------------*
*&      FORM  GETEXCEL
*&---------------------------------------------------------------------*
*       TEXT 获取上传EXCEL文件内相关数据
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GETEXCEL .
  G_FILE = P_FILE.  "注意两个文件用于不同的函数,所以类型不同

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME    = G_FILE
      I_BEGIN_COL = 1
      I_BEGIN_ROW = 1
      I_END_COL   = 10
      I_END_ROW   = 5000
    TABLES
      INTERN      = ITAB[].

  DELETE ITAB WHERE ROW = 1.  "删除字段名行

  LOOP AT ITAB.
    ON CHANGE OF ITAB-ROW.
      IF SY-TABIX NE 1.
        APPEND WTAB.
        CLEAR WTAB.
      ENDIF.
    ENDON.
    ASSIGN COMPONENT ITAB-COL OF STRUCTURE WTAB TO <FS>.         "动态方法将值传到相应的内表
    <FS> = ITAB-VALUE.
  ENDLOOP.
  APPEND WTAB.   "这句不要忘记,要把最后一条APPEND到内表中
  sort wtab by KOSTL.

ENDFORM.                    " GETEXCEL
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GETDATA .

  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE WTAB
  FROM  ZPPCOSTMDATA
  WHERE KOSTL IN S_KOSTL AND
        ZDEPT1 IN S_ZDEPT1 AND
        ZDEPT2 IN S_ZDEPT2 AND
        ZDEPT3 IN S_ZDEPT3 AND
        ZDEPT4 IN S_ZDEPT4 AND
        ZDEPT5 IN S_ZDEPT5.
  SORT WTAB BY KOSTL.

ENDFORM.                    " GETDATA
*&---------------------------------------------------------------------*
*&      Form  CALLSM30
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALLSM30 .
  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'U'          " S = Display U = Change T = Transport
      view_name                    = 'ZPPCOSTMDATA'     "读取的表
      no_warning_for_clientindep   = 'X'
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      OTHERS                       = 14.
ENDFORM.                    " CALLSM30
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA .
l_filename = 'ZKSSC.xlsx'.
l_muban = 'ZKSSC'.
*&---下载模板
PERFORM frm_get_fullpath CHANGING gv_fullpath gv_path gv_name.
*&---路径为空则退出
IF gv_fullpath IS INITIAL.
  MESSAGE '用户取消操作' TYPE 'S'.
  RETURN.
ENDIF.
PERFORM frm_down USING gv_fullpath.
ENDFORM.                    " DOWNLOAD_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GV_FULLPATH  text
*      <--P_GV_PATH  text
*      <--P_GV_NAME  text
*----------------------------------------------------------------------*
FORM frm_get_fullpath   CHANGING pv_fullpath TYPE string
  pv_path     TYPE string
  pv_name     TYPE string.

  DATA: lv_init_path  TYPE string,
        lv_init_fname TYPE string,
        lv_path       TYPE string,
        lv_filename   TYPE string,
        lv_fullpath   TYPE string.

*&---初始名称(输出的文件名称)
*  concatenate 'Material_Doc_' SY-DATUM '.xslx' into L_INIT_FNAME.
  lv_init_fname = l_filename.

* 获取桌面路径
  CALL METHOD cl_gui_frontend_services=>get_desktop_directory
  CHANGING
    desktop_directory    = lv_init_path
  EXCEPTIONS
    cntl_error           = 1
    error_no_gui         = 2
    not_supported_by_gui = 3
    OTHERS               = 4.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

*&---用户选择名称、路径
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
  EXPORTING
*     window_title         = '指定保存文件名'
*     default_extension    = 'DOC'
    default_file_name    = lv_init_fname
*     FILE_FILTER          = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*     FILE_FILTER          = CL_GUI_FRONTEND_SERVICES=>FILETYPE_WORD
    initial_directory    = lv_init_path
    prompt_on_overwrite  = 'X'
  CHANGING
    filename             = lv_filename
    path                 = lv_path
    fullpath             = lv_fullpath
*     USER_ACTION          =
*     FILE_ENCODING        =
  EXCEPTIONS
    cntl_error           = 1
    error_no_gui         = 2
    not_supported_by_gui = 3
    OTHERS               = 4.
  IF sy-subrc = 0.
    pv_fullpath = lv_fullpath.
    pv_path     = lv_path.
  ENDIF.
ENDFORM.                    " FRM_GET_FULLPATH

*--------------------------------------------------------------------*
*       下载文件
*--------------------------------------------------------------------*
FORM frm_down  USING pr_filename.
  DATA: lv_objdata     LIKE wwwdatatab,
        lv_mime        LIKE w3mime,
        lv_destination LIKE rlgrap-filename,
        lv_objnam      TYPE string,
        lv_rc          LIKE sy-subrc,
        lv_errtxt      TYPE string.

  DATA: lv_filename TYPE string,
        lv_result,
        lv_subrc    TYPE sy-subrc.

  DATA: lv_objid TYPE wwwdatatab-objid .


  lv_objid = l_muban.  "上传的模版名称

*&---查找文件是否存在。
  SELECT SINGLE relid objid
  FROM wwwdata
  INTO CORRESPONDING FIELDS OF lv_objdata
  WHERE srtf2    = 0
  AND   relid    = 'MI'
  AND   objid    = lv_objid.

*&---判断模版不存在则报错
  IF sy-subrc NE 0 OR lv_objdata-objid EQ space.
    CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
    INTO lv_errtxt.
    MESSAGE lv_errtxt TYPE 'E'.
  ENDIF.

  lv_filename = pr_filename.

  "判断本地地址是否已经存在此文件。
  CALL METHOD cl_gui_frontend_services=>file_exist
  EXPORTING
    file                 = lv_filename
    RECEIVING
    result               = lv_result
  EXCEPTIONS
    cntl_error           = 1
    error_no_gui         = 2
    wrong_parameter      = 3
    not_supported_by_gui = 4
    OTHERS               = 5.
  IF sy-subrc <> 0.
    CASE sy-subrc.
    WHEN 1.
    WHEN 2.
    WHEN OTHERS.
    ENDCASE.
  ENDIF.

  IF lv_result EQ 'X'.  "如果存在则删除原始文件,重新覆盖
    CALL METHOD cl_gui_frontend_services=>file_delete
    EXPORTING
      filename             = lv_filename
    CHANGING
      rc                   = lv_subrc
    EXCEPTIONS
      file_delete_failed   = 1
      cntl_error           = 2
      error_no_gui         = 3
      file_not_found       = 4
      access_denied        = 5
      unknown_error        = 6
      not_supported_by_gui = 7
      wrong_parameter      = 8
      OTHERS               = 9.

    IF sy-subrc <> 0.
      CASE sy-subrc.
      WHEN 1.
      WHEN 2.
      WHEN OTHERS.
      ENDCASE.
    ENDIF.

    IF lv_subrc <> 0. "如果删除失败,则报错。
      CONCATENATE '同名EXCEL文件已打开' '请关闭该EXCEL后重试。'
      INTO lv_errtxt.
      MESSAGE lv_errtxt TYPE 'E'.
    ENDIF.
  ENDIF.

  lv_destination   = pr_filename.

*&---下载模版。
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
  EXPORTING
    KEY         = lv_objdata
    destination = lv_destination
  IMPORTING
    rc          = lv_rc.
  IF lv_rc NE 0.
    CONCATENATE '模板文件' '下载失败' INTO lv_errtxt.
    MESSAGE lv_errtxt TYPE 'E'.
  ENDIF.
ENDFORM.                    "frm_down

 

实际推送中间库

 

 

*&---------------------------------------------------------------------*
*& Report  ZDBCO_SD_DATA2TMPDB
*&
*&---------------------------------------------------------------------*
*& 生产成本中心实际成本到209                                        *
*& DATE:20220228                                                     *
*& AUTHOR: gavin
*& Tcode:ZPPCOREL
*&---------------------------------------------------------------------*

REPORT ZDBCO_PP_COSTREL2TMPDB.
TABLES:ZPPCOSTMDATA,COSS,BKPF,CSKU.

*----------------------------------------------------------------------*
* 数据声明 - 开始
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DESC:定义内表结构
*----------------------------------------------------------------------*
TYPES:BEGIN OF W_ITAB,
    GJAHR LIKE BKPF-GJAHR,"组代码
    PMONTH LIKE BKPF-MONAT,"客户代码
    KSTAR LIKE COSS-KSTAR,"成本要素
    KOSTL LIKE ZPPCOSTMDATA-KOSTL,
    MCOD1 LIKE CSKT-KTEXT,"成本中心描述
    MCTXT LIKE CSKU-LTEXT,"成本要素描述
    COSTR LIKE COSS-WKG007,"值
    DEPT1 LIKE ZPPCOSTMDATA-ZDEPT1,"部门1
    DEPT2 LIKE ZPPCOSTMDATA-ZDEPT2,"部门2
    DEPT3 LIKE ZPPCOSTMDATA-ZDEPT3,"部门3
    DEPT4 LIKE ZPPCOSTMDATA-ZDEPT4,"部门4
    DEPT5 LIKE ZPPCOSTMDATA-ZDEPT5,"部门5
  END OF W_ITAB.

*----------------------------------------------------------------------*
* DESC:定义所需要的内表
*----------------------------------------------------------------------*
DATA: ITAB TYPE TABLE OF W_ITAB WITH HEADER LINE." WITH  KEY KUNNR BUKRS.
DATA: COUNT TYPE I.

DATA:STDATUM LIKE SY-DATUM,
      STUZEIT LIKE SY-UZEIT,
      GT_FIELDCAT TYPE LVC_T_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT,
      GS_LAYOUT   TYPE LVC_S_LAYO.

*----------------------------------------------------------------------*
* 数据定义结束
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DESC:定义选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN  BEGIN  OF  BLOCK  B1 WITH  FRAME TITLE TXT1.           "客户号
PARAMETERS:PGJAHR LIKE BKPF-GJAHR DEFAULT SY-DATUM+0(4)."年度
PARAMETERS:PMONAT LIKE BKPF-MONAT DEFAULT SY-DATUM+4(2)."月度
SELECT-OPTIONS:S_KOSTL FOR ZPPCOSTMDATA-KOSTL,"工厂
S_ZDEPT1 FOR ZPPCOSTMDATA-ZDEPT1,"一级部门
S_ZDEPT2 FOR ZPPCOSTMDATA-ZDEPT2,"二级部门
S_ZDEPT3 FOR ZPPCOSTMDATA-ZDEPT3,"三级部门
S_ZDEPT4 FOR ZPPCOSTMDATA-ZDEPT4,"四级部门
S_ZDEPT5 FOR ZPPCOSTMDATA-ZDEPT5."五级部门.
SELECT-OPTIONS:S_KSTAR FOR COSS-KSTAR.

SELECTION-SCREEN  END  OF  BLOCK  B1  .

SELECTION-SCREEN  BEGIN  OF  BLOCK  B2 WITH  FRAME TITLE TXT2.

PARAMETERS: PCONME1 LIKE DBCON-CON_NAME DEFAULT 'ORA_209MES'.

SELECTION-SCREEN  END  OF  BLOCK  B2  .

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8)  TEXT-001.
SELECTION-SCREEN END OF LINE.

*----------------------------------------------------------------------*
* DESC:INITIALIZATION事件
*----------------------------------------------------------------------*
INITIALIZATION.
  TXT1 = '请输入选择条件'.
  TXT2 = '目标数据库'.

  S_KSTAR-SIGN = 'I'.
  S_KSTAR-option = 'EQ'.
  S_KSTAR-LOW = '0041050500'. "制造费用-机物料-直接费用
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050501'. "制造费用-机物料-柴油费
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050503'. "制造费用-机物料-油漆费
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050504'."制造费用-机物料-维修费用
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050505'."制造费用-机物料-投资费用
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050506'."制造费用-机物料-间接费用
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050804'."制造费用-办公费-环保排污费
  APPEND S_KSTAR.
  S_KSTAR-LOW = '0041050805'."制造费用-办公费-安全费
  APPEND S_KSTAR.

AT SELECTION-SCREEN.

*----------------------------------------------------------------------*
* DESC:START-OF-SELECTION事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.
* 获取数据
  PERFORM GETDATA.
*  数据条数
  DESCRIBE TABLE ITAB LINES COUNT.

  PERFORM WRITERPTRUNRECORD.

  IF PCONME1 IS NOT INITIAL AND PCONME1 <> SPACE.
    PERFORM UPLOAD2DEST USING PCONME1 COUNT.
  ELSE.
    "ALV展示
    PERFORM display.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  UPLOAD2DEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_DBNAME   text
*      -->CNT        text
*----------------------------------------------------------------------*
form UPLOAD2DEST USING P_DBNAME LIKE DBCON-CON_NAME CNT TYPE I.
  DATA:lcnt TYPE I .
  DATA: lcx_error TYPE REF TO cx_root.
  DATA: err_text TYPE C LENGTH 1000.
  TRY.
      PERFORM GETCON USING P_DBNAME.
      lcnt = 0.
      LOOP AT ITAB.
        lcnt = lcnt + 1.
        EXEC SQL.
          DELETE FROM SAP_FICO_REALCOST_3611_KOSTL
           WHERE GJAHR = :ITAB-gjahr AND PMONTH = :itab-pmonth AND KSTAR = :itab-kstar AND kostl = :itab-KOSTL

        ENDEXEC.
        EXEC SQL.
          INSERT INTO SAP_FICO_REALCOST_3611_KOSTL
          (GJAHR,PMONTH,KSTAR,KOSTL,MCOD1,MCTXT,COSTR,DEPT1,DEPT2,DEPT3,DEPT4,DEPT5)
          VALUES
          (:ITAB-gjahr,:ITAB-pmonth,:ITAB-kstar,:ITAB-kostl,:ITAB-MCOD1,
          :ITAB-MCTXT,:ITAB-COSTR,:ITAB-DEPT1,:ITAB-DEPT2,:ITAB-DEPT3,:ITAB-DEPT4,
          :ITAB-DEPT5)
        ENDEXEC.
      ENDLOOP.

      PERFORM CLOSECON USING P_DBNAME.
    CATCH cx_sy_open_sql_db CX_SY_NATIVE_SQL_ERROR INTO lcx_error.
      err_text = lcx_error->get_text( ). "得到错误信息
      WRITE:/ SY-VLINE, '上传数据到',P_DBNAME,'失败,原因:',err_text , SY-VLINE.
  ENDTRY.
  WRITE:/ SY-VLINE, '上传数据',lcnt,'/',CNT,'到',P_DBNAME,'成功', SY-VLINE.
  WRITE:/ SY-ULINE.

ENDFORM.                    "UPLOAD2DEST

*&---------------------------------------------------------------------*
*&      Form  display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DISPLAY.
  PERFORM BUILD_FIELDCAT USING 'GJAHR' '' '' '' '' '' '' '年度' 'X'.
  PERFORM BUILD_FIELDCAT USING 'PMONTH' '' '' '' '' '' '' '月份' 'X'.
  PERFORM BUILD_FIELDCAT USING 'KSTAR' '' '' '' '' '' '' '成本要素' 'X'.
  PERFORM BUILD_FIELDCAT USING 'KOSTL' '' '' '' '' '' '' '成本中心' 'X'.
  PERFORM BUILD_FIELDCAT USING 'MCOD1' '' '' '' '' '' '' '成本中心描述' ''.
  PERFORM BUILD_FIELDCAT USING 'MCTXT' '' '' '' '' '' '' '成本要素描述' 'X'.
  PERFORM BUILD_FIELDCAT USING 'COSTR' '' '' '' '' '' '' '实际成本' 'X'.
  PERFORM BUILD_FIELDCAT USING 'DEPT1' '' '' '' '' '' '' '一级部门' ''.
  PERFORM BUILD_FIELDCAT USING 'DEPT1' '' '' '' '' '' '' '二级部门' ''.
  PERFORM BUILD_FIELDCAT USING 'DEPT1' '' '' '' '' '' '' '三级部门' ''.
  PERFORM BUILD_FIELDCAT USING 'DEPT1' '' '' '' '' '' '' '四级部门' ''.
  PERFORM BUILD_FIELDCAT USING 'DEPT1' '' '' '' '' '' '' '五级部门' ''.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
                                    "      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND_ALV'
      IT_FIELDCAT_LVC         = GT_FIELDCAT
      IS_LAYOUT_LVC           = GS_LAYOUT
      I_DEFAULT               = 'X'
      I_SAVE                  = 'A'
    TABLES
      T_OUTTAB                = ITAB
    EXCEPTIONS
      OTHERS                  = 1.
ENDFORM.                    "display


*&---------------------------------------------------------------------*
*&      FORM  GETCON
*&---------------------------------------------------------------------*
*       TEXT 调用外部数据库
*----------------------------------------------------------------------*
FORM GETCON USING P_DBNAME LIKE DBCON-CON_NAME.
  EXEC SQL.
    CONNECT TO :P_DBNAME
  ENDEXEC.
  IF SY-SUBRC NE 0.
    WRITE:/ '连接数据库失败'.
  ENDIF.
  EXEC SQL.
    SET CONNECTION :P_DBNAME
  ENDEXEC.
ENDFORM.                    "GETCON

*&---------------------------------------------------------------------*
*&      FORM  CLOSECON
*&---------------------------------------------------------------------*
*       TEXT  关闭外部数据库
*----------------------------------------------------------------------*

FORM CLOSECON USING P_DBNAME LIKE DBCON-CON_NAME.
  COMMIT CONNECTION (P_DBNAME).
  EXEC SQL.
    DISCONNECT :P_DBNAME
  ENDEXEC.
ENDFORM.                    "CLOSECON

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT USING P_FIELDNAME   TYPE FIELDNAME
      P_QFIELDNAME  TYPE LVC_QFNAME
      P_CFIELDNAME  TYPE LVC_CFNAME
      P_REF_TABLE   TYPE LVC_RTNAME
      P_REF_FIELD   TYPE LVC_RFNAME
      P_CONVEXIT    TYPE CONVEXIT
      P_EMPHASIZE   TYPE LVC_EMPHSZ
      P_SCRTEXT_L   TYPE SCRTEXT_L
      P_NO_ZERO     TYPE XFLAG.
  GS_FIELDCAT-FIELDNAME     = P_FIELDNAME.
  GS_FIELDCAT-QFIELDNAME    = P_QFIELDNAME.
  GS_FIELDCAT-CFIELDNAME    = P_CFIELDNAME.
  GS_FIELDCAT-REF_TABLE     = P_REF_TABLE.
  GS_FIELDCAT-REF_FIELD     = P_REF_FIELD.
  GS_FIELDCAT-CONVEXIT      = P_CONVEXIT.
  GS_FIELDCAT-EMPHASIZE     = P_EMPHASIZE.
  GS_FIELDCAT-SCRTEXT_L     = P_SCRTEXT_L.
  GS_FIELDCAT-NO_ZERO   = P_NO_ZERO.
  GS_FIELDCAT-COLDDICTXT    = 'L'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.
  CLEAR: GS_FIELDCAT.
ENDFORM.                    "BUILD_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GETDATA.
  "1先获取组织
  "2再获取成本要素
  "2成本中心 X 成本要素  + 3611实际
  data:lorg like ZPPCOSTMDATA OCCURS 0 WITH HEADER LINE.

  SELECT * FROM ZPPCOSTMDATA  INTO TABLE LORG
  WHERE KOSTL IN S_KOSTL AND
    ZDEPT1 IN S_ZDEPT1 AND
    ZDEPT2 IN S_ZDEPT2 AND
    ZDEPT3 IN S_ZDEPT3 AND
    ZDEPT4 IN S_ZDEPT4 AND
    ZDEPT5 IN S_ZDEPT5.

  data:lcsku like csku OCCURS 0 WITH HEADER LINE.

  SELECT * FROM CSKU INTO TABLE LCSKU
    WHERE  KSTAR IN S_KSTAR AND  SPRAS = 1 AND KTOPL = 'T001'.

  LOOP AT LCSKU.
    LOOP AT LORG.
      ITAB-GJAHR = PGJAHR.
      ITAB-PMONTH = PMONAT.
      ITAB-KOSTL = LORG-KOSTL.
      ITAB-MCOD1 = LORG-KOSTLT.
      ITAB-KSTAR = LCSKU-KSTAR.
      ITAB-MCTXT = LCSKU-MCTXT.
      ITAB-DEPT1 = LORG-ZDEPT1.
      ITAB-DEPT2 = LORG-ZDEPT2.
      ITAB-DEPT3 = LORG-ZDEPT3.
      ITAB-DEPT4 = LORG-ZDEPT4.
      ITAB-DEPT5 = LORG-ZDEPT5.
      PERFORM GETREALCOSTREF3611 USING  ITAB-KSTAR ITAB-KOSTL ITAB-GJAHR ITAB-PMONTH CHANGING ITAB-COSTR.
      APPEND ITAB.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "GETDATA

*&---------------------------------------------------------------------*
*&      Form  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.
  DATA:l_werks LIKE t001 OCCURS 0 WITH HEADER LINE.
  GET TIME.
  CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
    EXPORTING
      TCODE     = SY-TCODE
      PROGRAMM  = SY-CPROG
*     bukrs     = l_werks-bukrs
                                                                      "werks  = werks
      DATUMRST  = STDATUM
      UZEITRST  = STUZEIT
      BATCH     = SY-BATCH
      DATUMREND = SY-datum
      UZEITREND = sy-UZEIT
      DATUMC    = '20220228'
      RUNNER    = SY-UNAME
      RPTSRC    = 'PPCO'.
ENDFORM.                    "WRITERPTRUNRECORD

*&---------------------------------------------------------------------*
*&      Form  getrealcostref3611
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->KSTAR      text
*      -->PKOSTL     text
*      -->PGJAHR     text
*      -->PMONTH     text
*      -->P2         text
*----------------------------------------------------------------------*
FORM getrealcostref3611 USING KSTAR LIKE cOSP-KSTAR pKOSTL LIKE ONRKS-KOSTL pgjahr like bkpf-gjahr pmonth like bkpf-monat
CHANGING p2 LIKE cosp-WTG001.
  DATA:pobjnr LIKE ONRKS OCCURS 0 WITH HEADER LINE.
  DATA:pcosp2 LIKE cosp OCCURS 0 WITH HEADER LINE.
  DATA:CNT TYPE I.

  "第一步 依据成本中心获取成本对象号
  SELECT OBJNR INTO POBJNR-OBJNR FROM ONRKS
  WHERE KOSTL  =  pKOSTL.
    APPEND POBJNR.
  ENDSELECT.

  SELECT OBJNR INTO POBJNR-OBJNR FROM ONRKL
  WHERE KOSTL  =  pKOSTL.
    APPEND POBJNR.
  ENDSELECT.

  LOOP AT POBJNR.
    "COSP 取数实际 按月 案期间的
    SELECT WTG001 WTG002 WTG003 WTG004 WTG005 WTG006 WTG007 WTG008 WTG009 WTG010 WTG011 WTG012
    INTO (PCOSP2-WTG001,PCOSP2-WTG002,PCOSP2-WTG003,PCOSP2-WTG004,PCOSP2-WTG005,PCOSP2-WTG006,
    PCOSP2-WTG007,PCOSP2-WTG008,PCOSP2-WTG009,PCOSP2-WTG010,PCOSP2-WTG011,PCOSP2-WTG012 )
    FROM COSP WHERE
    GJAHR  =  pgjahr  AND
    OBJNR = POBJNR-OBJNR AND
    KSTAR EQ KSTAR AND
    WRTTP = '04' AND
    VERSN  =  '000' AND LEDNR = '00'.
      COLLECT PCOSP2.
    ENDSELECT.
  ENDLOOP.

  DESCRIBE TABLE PCOSP2 LINES CNT.
  IF CNT > 0.
    READ TABLE PCOSP2 INTO PCOSP2 INDEX 1.
    CASE pmonth.
      WHEN  '01'.
        p2 = PCOSP2-WTG001.
      WHEN  '02'.
        p2 = PCOSP2-WTG002.
      WHEN  '03'.
        p2 = PCOSP2-WTG003.
      WHEN  '04'.
        p2 = PCOSP2-WTG004.
      WHEN  '05'.
        p2 = PCOSP2-WTG005.
      WHEN  '06'.
        p2 = PCOSP2-WTG006.
      WHEN  '07'.
        p2 = PCOSP2-WTG007.
      WHEN  '08'.
        p2 = PCOSP2-WTG008.
      WHEN  '09'.
        p2 = PCOSP2-WTG009.
      WHEN  '10'.
        p2 = PCOSP2-WTG010.
      WHEN  '11'.
        p2 = PCOSP2-WTG011.
      WHEN  '12'.
        p2 = PCOSP2-WTG012.
    ENDCASE.
  ENDIF.
ENDFORM.                    "getrealcostref3611

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值