• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
^ω^SAp傻X^o^
博客园    首页    新随笔    联系   管理    订阅  订阅
固定资产创建/修改外发
*&---------------------------------------------------------------------*
*& Report ZIDOC_FI_002
*&---------------------------------------------------------------------*
*&*"----------------------------------------------------------------------
*&*& 作者           : xuy
*& 开发日期       :  12.06.2017 15:01:35
*& 申请者         :
*& 描述           :资产创建\修改传小SAP
*& 变更记录
*& ** 修改日期 开发人员  请求号 描述
*&---------------------------------------------------------------------*
REPORT zidoc_fi_002.
TABLES:anla.

TYPE-POOLS:slis.
DATA: w_repid      LIKE sy-repid,
      wa_firldcat  TYPE slis_fieldcat_alv,
      i_fieldcat   TYPE slis_t_fieldcat_alv,
      i_layout     TYPE slis_layout_alv,
      i_lvc_s_glay TYPE lvc_s_glay.
DATA: gtd_fcat TYPE lvc_t_fcat,
      gst_lout TYPE lvc_s_layo,
      gtd_top  TYPE slis_t_listheader.

DATA: gs_key  LIKE bapi1022_key, "公司代码 资产号
      gs_gen  LIKE bapi1022_feglg001,
      gs_genx LIKE bapi1022_feglg001x,
      gs_tim  LIKE bapi1022_feglg003,
      gs_timx LIKE bapi1022_feglg003x.

DATA: gs_allocations  LIKE  bapi1022_feglg004.
DATA: gs_allocationsx LIKE  bapi1022_feglg004x.
DATA: gs_inventory  LIKE  bapi1022_feglg011.
DATA: gs_inventoryx LIKE  bapi1022_feglg011x.
DATA: l_asset LIKE  bapi1022_1-assetmaino.
DATA: gs_return LIKE  bapiret2.
DATA: gs_origin LIKE bapi1022_feglg009.
DATA: gs_originx LIKE bapi1022_feglg009x.

"资产创建
DATA: BEGIN OF wa_data,
        bukrs   LIKE anla-bukrs,
        anlkl   LIKE anla-anlkl,
        txt50   LIKE anla-txt50,
        invnr   LIKE anla-invnr,
        anln1   LIKE anla-anln1,
        anln2   LIKE anla-anln2,
        menge   LIKE anla-menge,
        invzu   LIKE anla-invzu,
        txa50   LIKE anla-txa50,
        lifnr   LIKE anla-lifnr,
        typbz   LIKE anla-typbz,
        ord41   LIKE anla-ord41,
        meins   LIKE anla-meins,
        sernr   LIKE anla-sernr,
        kfzkz   LIKE anlz-kfzkz,
        kostl   LIKE anlz-kostl,
        raumn   LIKE anlz-raumn,
        adatu   LIKE anlz-adatu,
        anlhtxt LIKE anlh-anlhtxt,
      END OF wa_data.
DATA:it_data LIKE TABLE OF wa_data.

"资产折旧
DATA: it_anlb LIKE TABLE OF anlb.
DATA: wa_anlb LIKE LINE OF it_anlb.
DATA: gs_depreciationareas LIKE bapi1022_dep_areas.
DATA: gt_depreciationareas LIKE TABLE OF bapi1022_dep_areas.
DATA: gs_depreciationareasx LIKE bapi1022_dep_areasx.
DATA: gt_depreciationareasx LIKE TABLE OF bapi1022_dep_areasx.

"ALV
DATA: BEGIN OF wa_alv_data,
        sel          TYPE c,
        light(4)     TYPE c,
        type(1)      TYPE c,
        bukrs        LIKE anla-bukrs,
        anln1        LIKE anla-anln1,
        message(200) TYPE c,
      END OF wa_alv_data.
DATA: it_alv_data LIKE TABLE OF wa_alv_data.

"日志表
DATA: it_log LIKE TABLE OF zfit001_log.
DATA: wa_log LIKE LINE OF it_log.

DATA: clnt LIKE sy-mandt.
DATA: dsystem(10) TYPE c.

DATA: g_datum LIKE sy-datum.



SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR anla-bukrs,
                s_anln1 FOR anla-anln1,"资产号
                s_erdat FOR anla-erdat.
PARAMETERS:
  "p_incre TYPE c AS CHECKBOX USER-COMMAND rad_click, "是否自动增量
  p_back  AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK bk1.

INITIALIZATION.
  IF sy-mandt = '300'.
    dsystem = 'ED2CLNT901'.
  ELSEIF sy-mandt = '666'.
    dsystem = 'ED2CLNT902'.
  ELSEIF sy-mandt = '800'.
    dsystem = 'EP2CLNT999'.
  ENDIF.

  PERFORM sub_get_time.


AT SELECTION-SCREEN.

START-OF-SELECTION.
  PERFORM sub_get_new_data."获取创建的资产
  PERFORM sub_send_data.

  IF p_back <> 'X'.
    PERFORM sub_alv_prepare.
    PERFORM sub_call_alv TABLES it_alv_data
                        USING gtd_fcat
                              gst_lout
                              'USER_COMMAND'
                              'SET_STATUS'
                              ''.
    i_lvc_s_glay-edt_cll_cb = 'X'.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  SUB_GET_TIME
*&---------------------------------------------------------------------*
*       取时间
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_get_time .
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = sy-datum
      days      = 1 "天数加N或者减N 不加也不减 写0
      months    = 0 "月份加N或者减N 不加也不减 写0
      signum    = '-' "可以是+或者-
      years     = 0 "年份加N或者减N 不加也不减 写0
    IMPORTING
      calc_date = g_datum. "得到加减之后的日期
  s_erdat-sign = 'I'.
  s_erdat-option = 'EQ'.
  s_erdat-low = g_datum.
  APPEND s_erdat.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SUB_GET_DATA
*&---------------------------------------------------------------------*
*       根据条件取数据
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_get_new_data .
  "如果是增量发,就按创建日期查询,JOB每天凌晨12点后跑前一天创建的所有资产。
  "如果不是增量,就按资产号发
*  IF p_incre = 'X'.
  SELECT
    anla~bukrs
    anla~anln1 "资产
    anla~anln2
    anla~anlkl "资产分类
    anla~txt50 "描述
    anla~invnr "库存号
    anla~menge "数量
    anla~invzu "库存注记
    anla~txa50 "描述(2)
    anla~lifnr "供应商
    anla~typbz "类型名
    anla~ord41 "状态
    anla~meins "基本单位
    anla~sernr "序列号

    anlz~kfzkz
    anlz~kostl
    anlz~raumn
    anlz~adatu

    anlh~anlhtxt

  FROM anla
  LEFT JOIN anlz
    ON anla~bukrs = anlz~bukrs
    AND anla~anln1 = anlz~anln1
    AND anla~anln2 = anlz~anln2
  LEFT JOIN anlh
    ON anla~bukrs = anlh~bukrs
    AND anla~anln1 = anlh~anln1
  INTO CORRESPONDING FIELDS OF TABLE it_data
  WHERE anla~anln1 IN s_anln1
  AND anla~bukrs IN s_bukrs
  AND erdat IN s_erdat.

  IF it_data[] IS INITIAL .
    MESSAGE '没有查询到数据.' TYPE 'S' DISPLAY LIKE 'W'.
    STOP.
  ENDIF.

  "取资产折旧数据
  SELECT * FROM anlb INTO TABLE it_anlb
    FOR ALL ENTRIES IN it_data
    WHERE bukrs = it_data-bukrs
    AND anln1 = it_data-anln1
    AND anln2 = it_data-anln2.

  LOOP AT it_anlb INTO wa_anlb.
    gs_depreciationareas-area = wa_anlb-afabe.
    gs_depreciationareas-dep_key = wa_anlb-afasl.
    gs_depreciationareas-ulife_yrs = wa_anlb-ndjar.
    gs_depreciationareas-ulife_prds = wa_anlb-ndper.
    gs_depreciationareas-odep_start_date = wa_anlb-afabg.
    APPEND gs_depreciationareas TO gt_depreciationareas.
    CLEAR gs_depreciationareas.

    gs_depreciationareasx-area = wa_anlb-afabe.
    gs_depreciationareasx-dep_key = 'X'.
    gs_depreciationareasx-ulife_yrs ='X'.
    gs_depreciationareasx-ulife_prds = 'X'.
    gs_depreciationareasx-odep_start_date = 'X'.
    APPEND gs_depreciationareasx TO gt_depreciationareasx.
    CLEAR gs_depreciationareasx.
  ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SUB_SEND_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_send_data .
  DATA:i_right(5) TYPE c.
  DATA:i_left(5) TYPE c.
  LOOP AT it_data INTO wa_data.
    "主键 ALNA
    gs_key-companycode = wa_data-bukrs.
    gs_key-asset = wa_data-anln1.
    gs_key-subnumber = wa_data-anln2.

    "常规 ALNA
    gs_gen-assetclass = wa_data-anlkl.
    gs_gen-descript = wa_data-txt50.
    gs_gen-invent_no = wa_data-invnr.
    gs_gen-quantity = wa_data-menge.
    gs_inventory-note  = wa_data-invzu.
    gs_gen-descript2 = wa_data-txa50.
    gs_origin-vendor_no = wa_data-lifnr.
    gs_origin-type_name = wa_data-typbz.
    gs_allocations-evalgroup1 = wa_data-ord41.
    gs_gen-base_uom = wa_data-meins.
    gs_gen-serial_no = wa_data-sernr.

    "ANLZ.
    gs_tim-plate_no = wa_data-kfzkz. "执行牌照
    "成本中心替代
    CLEAR: i_right,i_left.
    i_left = wa_data-kostl+0(5).
    i_right = '00001'.
    CLEAR wa_data-kostl.
    CONCATENATE i_left i_right INTO wa_data-kostl.
    "包含F的成本中心,替换为P
    REPLACE 'F' WITH 'P' INTO  wa_data-kostl.
    gs_tim-costcenter = wa_data-kostl."成本中心
    gs_tim-room =  wa_data-raumn."房间
    "gs_tim-from_date = wa_data-adatu . "有效时间始

    "ANLH.
    gs_gen-main_descript = wa_data-anlhtxt.

    gs_genx-assetclass = 'X'.
    gs_genx-descript = 'X'.
    gs_genx-invent_no = 'X'.
    gs_genx-quantity = 'X'.
    gs_inventoryx-note  = 'X'.
    gs_genx-descript2 = 'X'.
    gs_originx-vendor_no = 'X'.
    gs_originx-type_name = 'X'.
    gs_allocationsx-evalgroup1 = 'X'.
    gs_genx-base_uom = 'X'.
    gs_genx-serial_no = 'X'.

    gs_timx-license_plate_no = 'X'.
    gs_timx-costcenter = 'X'.
    gs_timx-room = 'X'.
    "gs_timx-from_date = 'X'.

    gs_genx-main_descript = 'X'.


    CALL FUNCTION 'BAPI_FIXEDASSET_CREATE1'
      DESTINATION dsystem
      EXPORTING
        key                = gs_key
        generaldata        = gs_gen
        generaldatax       = gs_genx
        inventory          = gs_inventory
        inventoryx         = gs_inventoryx
        timedependentdata  = gs_tim
        timedependentdatax = gs_timx
        allocations        = gs_allocations
        allocationsx       = gs_allocationsx
        origin             = gs_origin
        originx            = gs_originx
      IMPORTING
        asset              = l_asset
        return             = gs_return
      TABLES
        depreciationareas  = gt_depreciationareas
        depreciationareasx = gt_depreciationareasx.



    IF gs_return-type = 'E' OR gs_return-type = 'A' OR gs_return-type = 'W'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
        DESTINATION dsystem.
      CLEAR wa_alv_data.
      wa_alv_data-message = gs_return-message.
      wa_alv_data-type = gs_return-type.
      wa_alv_data-light = '@5C@'."修改失败

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        DESTINATION dsystem
        EXPORTING
          wait = 'X'.
      CLEAR wa_alv_data.
      wa_alv_data-message = gs_return-message.
      wa_alv_data-type = gs_return-type.
      wa_alv_data-light = '@5B@'."修改成功
    ENDIF.

    wa_alv_data-anln1 = wa_data-anln1.
    wa_alv_data-bukrs = wa_data-bukrs.
    APPEND wa_alv_data TO it_alv_data.

    CLEAR wa_log.
    wa_log-mandt = sy-mandt.
    wa_log-zkey1 = wa_data-bukrs.
    wa_log-zkey2 = wa_data-anln1.
    wa_log-zdate = sy-datum.
    wa_log-ztime = sy-uzeit.
    wa_log-zifnum = '05'."ZFID015
    wa_log-persn = sy-uname.
    wa_log-zflag = gs_return-type.
    wa_log-zflag1 = 'I'.
    wa_log-message = gs_return-message.
    MODIFY zfit001_log FROM wa_log.

  ENDLOOP.
ENDFORM.

FORM sub_alv_prepare .
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'LIGHT' 'LIGHT' '' '' ''
                              '状态' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'TYPE' 'TYPE' '' '' ''
                              '消息类型' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'MESSAGE' 'MESSAGE' '' '' ''
                              '消息        .' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'BUKRS' 'BUKRS' 'ANLA' '' ''
                              '公司' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'ANLN1' 'ANLN1' 'ANLA' '' ''
                              '资产号' '' '' '' '' ''.

  gst_lout-zebra = 'X'.
  gst_lout-cwidth_opt = 'X'.
  gst_lout-box_fname = 'SEL'.
  gst_lout-info_fname = 'COLOR'.
ENDFORM.

FORM sub_call_alv  TABLES it_outtab
                  USING it_fieldcat TYPE lvc_t_fcat
                        i_layout TYPE lvc_s_layo
                        i_command TYPE slis_formname
                        i_pf_status_set TYPE slis_formname
                        i_title TYPE slis_formname.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_user_command  = i_command
      i_callback_pf_status_set = i_pf_status_set  "状态栏
      i_callback_top_of_page   = i_title
      is_layout_lvc            = i_layout
      it_fieldcat_lvc          = it_fieldcat
      i_save                   = 'A'
    TABLES
      t_outtab                 = it_outtab
    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.                    "SUB_CALL_ALV

FORM user_command USING r_ucomm LIKE sy-ucomm
                     rs_selfield TYPE slis_selfield.

ENDFORM.

FORM set_status USING pt_extab TYPE slis_t_extab .
  SET PF-STATUS 'STANDARD'.
ENDFORM.

FORM add_field_lvc TABLES ot_fieldcat_lvc STRUCTURE lvc_s_fcat
                    USING i_fieldname TYPE lvc_rfname
                         i_ref_field TYPE lvc_rfname
                         i_ref_table TYPE lvc_tname
                         i_cfieldname TYPE lvc_cfname
                         i_qfieldname TYPE lvc_qfname
                         i_text TYPE string
                         i_edit TYPE c
                         i_nzero TYPE c
                         i_f4 TYPE c
                         i_no_out TYPE c
                         i_outputlen TYPE i.

  DATA:lth_fieldcat_lvc TYPE lvc_s_fcat.

  CLEAR lth_fieldcat_lvc.
  lth_fieldcat_lvc-fieldname = i_fieldname.
  lth_fieldcat_lvc-ref_field = i_ref_field.
  lth_fieldcat_lvc-ref_table = i_ref_table.
  lth_fieldcat_lvc-edit = i_edit.
  lth_fieldcat_lvc-cfieldname = i_cfieldname.
  lth_fieldcat_lvc-qfieldname = i_qfieldname.
  lth_fieldcat_lvc-colddictxt = 'L'.
  lth_fieldcat_lvc-scrtext_l = i_text.
  lth_fieldcat_lvc-no_zero = i_nzero.
  lth_fieldcat_lvc-f4availabl = i_f4.
  lth_fieldcat_lvc-no_out = i_no_out.
  lth_fieldcat_lvc-outputlen = i_outputlen.
  lth_fieldcat_lvc-no_zero = 'X'.
  APPEND lth_fieldcat_lvc TO ot_fieldcat_lvc.
ENDFORM.                       "ADD_FIELD_LVC

 

修改

*&---------------------------------------------------------------------*
*& Report ZFID016
*&*& 作者           : xuy
*& 开发日期       :  13.06.2017 14:32:03
*& 申请者         :
*& 描述           : 资产修改传小SAP
*& 变更记录
*& ** 修改日期 开发人员  请求号 描述
*&---------------------------------------------------------------------*
REPORT zfid016.
TABLES:anla.

TYPE-POOLS:slis.
DATA: w_repid      LIKE sy-repid,
      wa_firldcat  TYPE slis_fieldcat_alv,
      i_fieldcat   TYPE slis_t_fieldcat_alv,
      i_layout     TYPE slis_layout_alv,
      i_lvc_s_glay TYPE lvc_s_glay.
DATA: gtd_fcat TYPE lvc_t_fcat,
      gst_lout TYPE lvc_s_layo,
      gtd_top  TYPE slis_t_listheader.

DATA: gs_key  LIKE bapi1022_key, "公司代码 资产号
      gs_gen  LIKE bapi1022_feglg001,
      gs_genx LIKE bapi1022_feglg001x,
      gs_tim  LIKE bapi1022_feglg003,
      gs_timx LIKE bapi1022_feglg003x.

DATA: gs_allocations  LIKE  bapi1022_feglg004.
DATA: gs_allocationsx LIKE  bapi1022_feglg004x.
DATA: gs_inventory  LIKE  bapi1022_feglg011.
DATA: gs_inventoryx LIKE  bapi1022_feglg011x.
DATA: l_asset LIKE  bapi1022_1-assetmaino.
DATA: gs_return LIKE  bapiret2.
DATA: gs_origin LIKE bapi1022_feglg009.
DATA: gs_originx LIKE bapi1022_feglg009x.


"资产修改
DATA: BEGIN OF wa_data,
        bukrs   LIKE anla-bukrs,
        anlkl   LIKE anla-anlkl,
        txt50   LIKE anla-txt50,
        invnr   LIKE anla-invnr,
        anln1   LIKE anla-anln1,
        anln2   LIKE anla-anln2,
        menge   LIKE anla-menge,
        invzu   LIKE anla-invzu,
        txa50   LIKE anla-txa50,
        lifnr   LIKE anla-lifnr,
        typbz   LIKE anla-typbz,
        ord41   LIKE anla-ord41,
        meins   LIKE anla-meins,
        sernr   LIKE anla-sernr,
        kfzkz   LIKE anlz-kfzkz,
        kostl   LIKE anlz-kostl,
        raumn   LIKE anlz-raumn,
        adatu   LIKE anlz-adatu,
        anlhtxt LIKE anlh-anlhtxt,
      END OF wa_data.
DATA:it_data LIKE TABLE OF wa_data.

DATA: wa_anlz LIKE anlz,
      it_anlz LIKE TABLE OF wa_anlz.

"ALV
DATA: BEGIN OF wa_alv_data,
        sel          TYPE c,
        light(4)     TYPE c,
        type(1)      TYPE c,
        bukrs        LIKE anla-bukrs,
        anln1        LIKE anla-anln1,
        message(200) TYPE c,
      END OF wa_alv_data.
DATA: it_alv_data LIKE TABLE OF wa_alv_data.

"日志表
DATA: it_log LIKE TABLE OF zfit001_log.
DATA: wa_log LIKE LINE OF it_log.

"资产折旧
DATA: it_anlb LIKE TABLE OF anlb.
DATA: wa_anlb LIKE LINE OF it_anlb.
DATA: gs_depreciationareas LIKE bapi1022_dep_areas.
DATA: gt_depreciationareas LIKE TABLE OF bapi1022_dep_areas.
DATA: gs_depreciationareasx LIKE bapi1022_dep_areasx.
DATA: gt_depreciationareasx LIKE TABLE OF bapi1022_dep_areasx.


DATA: clnt LIKE sy-mandt.
DATA: dsystem(10) TYPE c.
DATA: g_datum LIKE sy-datum.

SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR anla-bukrs,
                s_anln1 FOR anla-anln1,"资产号
                s_erdat FOR anla-erdat.
PARAMETERS:
 " p_incre TYPE c AS CHECKBOX USER-COMMAND rad_click, "是否自动增量
  p_back  AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK bk1.

INITIALIZATION.
  IF sy-mandt = '300'.
    dsystem = 'ED2CLNT901'.
  ELSEIF sy-mandt = '666'.
    dsystem = 'ED2CLNT902'.
  ELSEIF sy-mandt = '800'.
    dsystem = 'EP2CLNT999'.
  ENDIF.
  PERFORM sub_get_time.

AT SELECTION-SCREEN.

START-OF-SELECTION.
  PERFORM sub_get_change_data."获取修改的资产
  PERFORM sub_proc_data.
  PERFORM sub_send_data.
  IF p_back <> 'X'.
    PERFORM sub_alv_prepare.
    PERFORM sub_call_alv TABLES it_alv_data
                        USING gtd_fcat
                              gst_lout
                              'USER_COMMAND'
                              'SET_STATUS'
                              ''.
    i_lvc_s_glay-edt_cll_cb = 'X'.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  SUB_GET_TIME
*&---------------------------------------------------------------------*
*       取时间
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_get_time .
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = sy-datum
      days      = 1 "天数加N或者减N 不加也不减 写0
      months    = 0 "月份加N或者减N 不加也不减 写0
      signum    = '-' "可以是+或者-
      years     = 0 "年份加N或者减N 不加也不减 写0
    IMPORTING
      calc_date = g_datum. "得到加减之后的日期
  s_erdat-sign = 'I'.
  s_erdat-option = 'EQ'.
  s_erdat-low = g_datum.
  APPEND s_erdat.
ENDFORM.

FORM sub_get_change_data.
  "根据修改时间查询
  SELECT
    anla~bukrs
    anla~anln1 "资产
    anla~anln2
    anla~anlkl "资产分类
    anla~txt50 "描述
    anla~invnr "库存号
    anla~menge "数量
    anla~invzu "库存注记
    anla~txa50 "描述(2)
    anla~lifnr "供应商
    anla~typbz "类型名
    anla~ord41 "状态
    anla~meins "基本单位
    anla~sernr "序列号

*    anlz~kfzkz
*    anlz~kostl
*    anlz~raumn
*    anlz~adatu

    anlh~anlhtxt

  FROM anla
*  LEFT JOIN anlz
*    ON anla~bukrs = anlz~bukrs
*    AND anla~anln1 = anlz~anln1
*    AND anla~anln2 = anlz~anln2
  LEFT JOIN anlh
    ON anla~bukrs = anlh~bukrs
    AND anla~anln1 = anlh~anln1
  INTO CORRESPONDING FIELDS OF TABLE it_data
  WHERE anla~anln1 IN s_anln1
  AND anla~bukrs IN s_bukrs
  AND aedat IN s_erdat.

  IF it_data[] IS INITIAL .
    MESSAGE '没有查询到数据.' TYPE 'S' DISPLAY LIKE 'W'.
    STOP.
  ENDIF.

  "ADD BY XY 05.09.2017 15:04:00
  SELECT
    bukrs
    anln1
    anln2
    bdatu
    anlz~kfzkz
    anlz~kostl
    anlz~raumn
  FROM anlz
  INTO CORRESPONDING FIELDS OF TABLE it_anlz
  FOR ALL ENTRIES IN it_data
  WHERE anlz~bukrs = it_data-bukrs
    AND anlz~anln1 = it_data-anln1
    AND anlz~anln2 = it_data-anln2.
  SORT it_anlz BY bukrs anln1 anln2 bdatu DESCENDING.
  "ADD ENDED BY XY 05.09.2017 15:04:00

  "取资产折旧数据
  SELECT * FROM anlb INTO TABLE it_anlb
    FOR ALL ENTRIES IN it_data
    WHERE bukrs = it_data-bukrs
    AND anln1 = it_data-anln1
    AND anln2 = it_data-anln2.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SUB_SEND_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_send_data .
  DATA:i_right(5) TYPE c.
  DATA:i_left(5) TYPE c.
  LOOP AT it_data INTO wa_data.
    CLEAR: gs_key,
           gs_gen,
           gs_genx,
           gs_inventory,
           gs_inventoryx,
           gs_tim,
           gs_timx,
           gs_origin,
           gs_allocations,
           gs_allocationsx,
           gs_origin,
           gs_originx,
           gs_return.
    "主键 ALNA
    gs_key-companycode = wa_data-bukrs.
    gs_key-asset = wa_data-anln1.
    gs_key-subnumber = wa_data-anln2.

    "常规 ALNA
    "gs_gen-assetclass = wa_data-anlkl.
    gs_gen-descript = wa_data-txt50.
    gs_gen-invent_no = wa_data-invnr.
    gs_gen-quantity = wa_data-menge.
    gs_inventory-note  = wa_data-invzu.
    gs_gen-descript2 = wa_data-txa50.
    gs_origin-vendor_no = wa_data-lifnr.
    gs_origin-type_name = wa_data-typbz.
    gs_allocations-evalgroup1 = wa_data-ord41.
    gs_gen-base_uom = wa_data-meins.
    gs_gen-serial_no = wa_data-sernr.

    "ANLZ.
    gs_tim-plate_no = wa_data-kfzkz. "执行牌照
    "成本中心替代
    CLEAR: i_right,i_left.
    i_left = wa_data-kostl+0(5).
    i_right = '00001'.
    CLEAR wa_data-kostl.
    CONCATENATE i_left i_right INTO wa_data-kostl.
    gs_tim-costcenter = wa_data-kostl."成本中心
    gs_tim-room =  wa_data-raumn."房间
    "gs_tim-from_date = wa_data-adatu . "有效时间始

    "ANLH.
    gs_gen-main_descript = wa_data-anlhtxt.

    "gs_genx-assetclass = 'X'.
    gs_genx-descript = 'X'.
    gs_genx-invent_no = 'X'.
    gs_genx-quantity = 'X'.
    gs_inventoryx-note  = 'X'.
    gs_genx-descript2 = 'X'.
    gs_originx-vendor_no = 'X'.
    gs_originx-type_name = 'X'.
    gs_allocationsx-evalgroup1 = 'X'.
    gs_genx-base_uom = 'X'.
    gs_genx-serial_no = 'X'.

    gs_timx-license_plate_no = 'X'.
    gs_timx-costcenter = 'X'.
    gs_timx-room = 'X'.
    "gs_timx-from_date = 'X'.

    gs_genx-main_descript = 'X'.

  "资产折旧范围赋值
    LOOP AT it_anlb INTO wa_anlb WHERE anln1 = wa_data-anln1
                                  AND anln2 = wa_data-anln2.
    CLEAR: gs_depreciationareas,gs_depreciationareasx.
    gs_depreciationareas-area = wa_anlb-afabe.
    gs_depreciationareas-dep_key = wa_anlb-afasl.
    gs_depreciationareas-ulife_yrs = wa_anlb-ndjar.
    gs_depreciationareas-ulife_prds = wa_anlb-ndper.
    gs_depreciationareas-odep_start_date = wa_anlb-afabg.
    APPEND gs_depreciationareas TO gt_depreciationareas.
    CLEAR gs_depreciationareas.

    gs_depreciationareasx-area = wa_anlb-afabe.
    gs_depreciationareasx-dep_key = 'X'.
    gs_depreciationareasx-ulife_yrs ='X'.
    gs_depreciationareasx-ulife_prds = 'X'.
    gs_depreciationareasx-odep_start_date = 'X'.
    APPEND gs_depreciationareasx TO gt_depreciationareasx.
    CLEAR gs_depreciationareasx.
    ENDLOOP.

    CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
      DESTINATION dsystem
      EXPORTING
        companycode        = gs_key-companycode
        asset              = gs_key-asset
        subnumber          = gs_key-subnumber
        generaldata        = gs_gen
        generaldatax       = gs_genx
        inventory          = gs_inventory
        inventoryx         = gs_inventoryx
        timedependentdata  = gs_tim
        timedependentdatax = gs_timx
        allocations        = gs_allocations
        allocationsx       = gs_allocationsx
        origin             = gs_origin
        originx            = gs_originx
      IMPORTING
        return             = gs_return
      TABLES
        depreciationareas  = gt_depreciationareas
        depreciationareasx = gt_depreciationareasx.

    IF gs_return-type = 'E' OR gs_return-type = 'A'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
        DESTINATION dsystem.
      CLEAR wa_alv_data.
      wa_alv_data-message = gs_return-message.
      wa_alv_data-type = gs_return-type.
      wa_alv_data-light = '@5C@'."修改失败
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        DESTINATION dsystem
        EXPORTING
          wait = 'X'.
      CLEAR wa_alv_data.
      wa_alv_data-message = gs_return-message.
      wa_alv_data-type = gs_return-type.
      wa_alv_data-light = '@5B@'."修改成功
    ENDIF.

    wa_alv_data-anln1 = wa_data-anln1.
    wa_alv_data-bukrs = wa_data-bukrs.
    APPEND wa_alv_data TO it_alv_data.

    CLEAR wa_log.
    wa_log-mandt = sy-mandt.
    wa_log-zkey1 = wa_data-bukrs.
    wa_log-zkey2 = wa_data-anln1.
    wa_log-zdate = sy-datum.
    wa_log-ztime = sy-uzeit.
    wa_log-zifnum = '06'."ZFID016
    wa_log-persn = sy-uname.
    wa_log-zflag = gs_return-type.
    wa_log-zflag1 = 'I'.
    wa_log-message = gs_return-message.
    MODIFY zfit001_log FROM wa_log.

    REFRESH: gt_depreciationareas,gt_depreciationareasx.
  ENDLOOP.

ENDFORM.


FORM sub_alv_prepare .
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'LIGHT' 'LIGHT' '' '' ''
                              '状态' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'TYPE' 'TYPE' '' '' ''
                              '消息类型' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'MESSAGE' 'MESSAGE' '' '' ''
                              '消息        .' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'BUKRS' 'BUKRS' 'ANLA' '' ''
                              '公司' '' '' '' '' ''.
  PERFORM add_field_lvc TABLES gtd_fcat
                        USING 'ANLN1' 'ANLN1' 'ANLA' '' ''
                              '资产号' '' '' '' '' ''.

  gst_lout-zebra = 'X'.
  gst_lout-cwidth_opt = 'X'.
  gst_lout-box_fname = 'SEL'.
  gst_lout-info_fname = 'COLOR'.
ENDFORM.

FORM sub_call_alv  TABLES it_outtab
                  USING it_fieldcat TYPE lvc_t_fcat
                        i_layout TYPE lvc_s_layo
                        i_command TYPE slis_formname
                        i_pf_status_set TYPE slis_formname
                        i_title TYPE slis_formname.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_user_command  = i_command
      i_callback_pf_status_set = i_pf_status_set  "状态栏
      i_callback_top_of_page   = i_title
      is_layout_lvc            = i_layout
      it_fieldcat_lvc          = it_fieldcat
      i_save                   = 'A'
    TABLES
      t_outtab                 = it_outtab
    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.                    "SUB_CALL_ALV

FORM user_command USING r_ucomm LIKE sy-ucomm
                     rs_selfield TYPE slis_selfield.

ENDFORM.

FORM set_status USING pt_extab TYPE slis_t_extab .
  SET PF-STATUS 'STANDARD'.
ENDFORM.

FORM add_field_lvc TABLES ot_fieldcat_lvc STRUCTURE lvc_s_fcat
                    USING i_fieldname TYPE lvc_rfname
                         i_ref_field TYPE lvc_rfname
                         i_ref_table TYPE lvc_tname
                         i_cfieldname TYPE lvc_cfname
                         i_qfieldname TYPE lvc_qfname
                         i_text TYPE string
                         i_edit TYPE c
                         i_nzero TYPE c
                         i_f4 TYPE c
                         i_no_out TYPE c
                         i_outputlen TYPE i.

  DATA:lth_fieldcat_lvc TYPE lvc_s_fcat.

  CLEAR lth_fieldcat_lvc.
  lth_fieldcat_lvc-fieldname = i_fieldname.
  lth_fieldcat_lvc-ref_field = i_ref_field.
  lth_fieldcat_lvc-ref_table = i_ref_table.
  lth_fieldcat_lvc-edit = i_edit.
  lth_fieldcat_lvc-cfieldname = i_cfieldname.
  lth_fieldcat_lvc-qfieldname = i_qfieldname.
  lth_fieldcat_lvc-colddictxt = 'L'.
  lth_fieldcat_lvc-scrtext_l = i_text.
  lth_fieldcat_lvc-no_zero = i_nzero.
  lth_fieldcat_lvc-f4availabl = i_f4.
  lth_fieldcat_lvc-no_out = i_no_out.
  lth_fieldcat_lvc-outputlen = i_outputlen.
  lth_fieldcat_lvc-no_zero = 'X'.
  APPEND lth_fieldcat_lvc TO ot_fieldcat_lvc.
ENDFORM.                       "ADD_FIELD_LVC

*&---------------------------------------------------------------------*
*&      Form  SUB_PROC_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_proc_data .
*  LOOP AT it_anlb INTO wa_anlb.
*    gs_depreciationareas-area = wa_anlb-afabe.
*    gs_depreciationareas-dep_key = wa_anlb-afasl.
*    gs_depreciationareas-ulife_yrs = wa_anlb-ndjar.
*    gs_depreciationareas-ulife_prds = wa_anlb-ndper.
*    gs_depreciationareas-odep_start_date = wa_anlb-afabg.
*    APPEND gs_depreciationareas TO gt_depreciationareas.
*    CLEAR gs_depreciationareas.
*
*    gs_depreciationareasx-area = wa_anlb-afabe.
*    gs_depreciationareasx-dep_key = 'X'.
*    gs_depreciationareasx-ulife_yrs ='X'.
*    gs_depreciationareasx-ulife_prds = 'X'.
*    gs_depreciationareasx-odep_start_date = 'X'.
*    APPEND gs_depreciationareasx TO gt_depreciationareasx.
*    CLEAR gs_depreciationareasx.
*  ENDLOOP.

  LOOP AT it_data INTO wa_data.
    CLEAR wa_anlz.
    READ TABLE it_anlz INTO wa_anlz WITH KEY bukrs = wa_data-bukrs
      anln1 = wa_data-anln1
      anln2 = wa_data-anln2.
    IF sy-subrc = 0.
      wa_data-kfzkz = wa_anlz-kfzkz.
      wa_data-kostl = wa_anlz-kostl.
      wa_data-raumn = wa_anlz-raumn.
    ENDIF.
    MODIFY IT_DATA FROM WA_DATA.
  ENDLOOP.
ENDFORM.

 

^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
posted on 2018-11-28 16:59  ^ω^SAP傻X^o^  阅读(615)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3