*&---------------------------------------------------------------------* *& Report zfid010 *& *&---------------------------------------------------------------------* * 程序名称:固定资产目录清册查询报表 * 程序名: zfid010 * 开发日期:2016-12-07 * 创建者: *----------------------------------------------------------------------* * 概要说明 *----------------------------------------------------------------------* * 用于拷贝新建程序 * *----------------------------------------------------------------------* * 变更记录 * 日期 修改者 传输请求号 修改内容及原因 *----------------------------------------------------------------------* * *----------------------------------------------------------------------* REPORT zfid010. ************************************************************************ * TABLES 声明 * ************************************************************************ TABLES:anla,anlz. ************************************************************************ * 类型池声明 * ************************************************************************ TYPE-POOLS: slis. ************************************************************************ * 类型定义 * ************************************************************************ TYPES: BEGIN OF ty_output, "ALV显示结构 sel TYPE c LENGTH 1, "ALV 行选择标识 bukrs TYPE anla-bukrs, "公司代码 anln1 TYPE anla-anln1, "固定资产编号 anlkl TYPE anla-anlkl, "固定资产分类 anln2 TYPE anla-anln2, "固定资产子编号 txt50 TYPE anla-txt50, "固定资产描述 txa50 TYPE anla-txa50, "规则型号 sernr TYPE anla-sernr, "序列号 invnr TYPE anla-invnr, "存货号 menge TYPE anla-menge, "数量 meins TYPE anla-meins, "单位 invzu TYPE anla-invzu, "存放地点 lifnr TYPE anla-lifnr, "供应商 liefe TYPE anla-liefe, "供应商名称 aktiv TYPE anla-aktiv, "资本化日期 deakt TYPE anla-deakt, "报废日期 ord41 TYPE anla-ord41, "资产的处置形式(改) ord42 TYPE anla-ord42, "资产状态(改) herst TYPE anla-herst, "制造商 kostl TYPE anlz-kostl, "成本中心 caufn TYPE anlz-caufn, "内部订单 raumn TYPE anlz-raumn, "固定资产保管人 txk20 TYPE ankt-txk20, "固定资产分类描述 anlhtxt TYPE anlh-anlhtxt, afasl TYPE anlb-afasl, "折旧码 ndjar TYPE anlb-ndjar, "使用年限 ndper TYPE anlb-ndper, "使用期间 afabg TYPE anlb-afabg, "折旧开始日期 ndabj TYPE anlc-ndabj, "已使用年份 ndabp TYPE anlc-ndabp, "已使用月份 gouzhi TYPE anlc-kansw, "购置价值 kansw TYPE anlc-kansw, "运算字段(购置价值) answl TYPE anlc-answl, "运算字段(购置价值) zhejiu TYPE anlc-knafa, "累计折旧金额 nafag TYPE anlc-nafag, "改动 safag TYPE anlc-safag, "改动 aafag TYPE anlc-aafag, "改动 aufwb TYPE anlc-aufwb, "固定资产减值 jingzhi TYPE anlc-knafa, butxt TYPE t001-butxt, "公司代码名称 ltext TYPE cskt-ltext, "成本中心说明 name1 TYPE lfa1-name1, "供应商名称 ordtx TYPE t087t-ordtx, "资产的处置形式描述 ordt2 TYPE t087t-ordtx, "资产状态描述 afblpe TYPE string , "累计已计提月份(不区分财年) ahproz LIKE t091p-ahproz, "净残值率 ahpro LIKE anlc-kansw, "净残值 yuezhejiulv LIKE t091p-ahproz, "月折旧率 yuezhejiue TYPE string, "月折旧额 waers LIKE t001-waers, "币种 txt20 LIKE skat-txt20, "对应折旧科目 ktnafb LIKE t095b-ktnafb, "对应折旧科目编码 afatxt LIKE t090nat-afatxt, "折旧方法 typbz LIKE anla-typbz, "使用部门 erdat LIKE anla-erdat, "录入日期 ktogr LIKE anla-ktogr, "科目定位码 bfqzcyz LIKE acdoca-tsl, "报废前资产原值 bfqljzj LIKE anlc-knafa, "报废前累计折旧 END OF ty_output. TYPES: BEGIN OF ty_anlhtxt, anlhtxt TYPE anlh-anlhtxt, "资产主号文本 bukrs TYPE anlh-bukrs, "公司代码 anln1 TYPE anlh-anln1, "固定资产编号 luntn TYPE anlh-luntn, "固定资产子编号 END OF ty_anlhtxt. TYPES: BEGIN OF ty_anlc, ndabj TYPE anlc-ndabj, "已使用年份 ndabp TYPE anlc-ndabp, "已使用月份 kansw TYPE anlc-kansw, answl TYPE anlc-answl, aufwb TYPE anlc-aufwb, "改动 nafag TYPE anlc-nafag, "改动 safag TYPE anlc-safag, "改动 aafag TYPE anlc-aafag, "改动 bukrs TYPE anlc-bukrs, anln1 TYPE anlc-anln1, anln2 TYPE anlc-anln2, afabe LIKE anlc-afabe, END OF ty_anlc. TYPES: BEGIN OF ty_anlb, afasl TYPE anlb-afasl, "折旧码 ndjar TYPE anlb-ndjar, "使用年限 ndper TYPE anlb-ndper, "使用期间 afabg TYPE anlb-afabg, "折旧开始日期 bukrs TYPE anlb-bukrs, anln1 TYPE anlb-anln1, anln2 TYPE anlb-anln2, schrw_proz LIKE anlb-schrw_proz, END OF ty_anlb. TYPES: BEGIN OF ty_anlb2, afasl TYPE anlb-afasl, "折旧码 ndjar TYPE anlb-ndjar, "使用年限 ndper TYPE anlb-ndper, "使用期间 afabg TYPE anlb-afabg, "折旧开始日期 afabe TYPE anlb-afabe, bdatu TYPE anlb-bdatu, bukrs TYPE anlb-bukrs, anln1 TYPE anlb-anln1, anln2 TYPE anlb-anln2, schrw_proz LIKE anlb-schrw_proz, END OF ty_anlb2. ************************************************************************ * 全局变量声明 * ************************************************************************ DATA: it_output TYPE STANDARD TABLE OF ty_output, wa_output LIKE LINE OF it_output, it_anlhtxt TYPE STANDARD TABLE OF ty_anlhtxt, "资产主号文本内表 wa_anlhtxt LIKE LINE OF it_anlhtxt, it_anlb TYPE STANDARD TABLE OF ty_anlb, wa_anlb LIKE LINE OF it_anlb, it_anlb2 TYPE STANDARD TABLE OF ty_anlb2, wa_anlb2 LIKE LINE OF it_anlb2, it_anlc TYPE STANDARD TABLE OF ty_anlc, wa_anlc LIKE LINE OF it_anlc. DATA: BEGIN OF ls_anlc, bukrs LIKE anlc-bukrs, anln1 LIKE anlc-anln1, gjahr LIKE anlc-gjahr, afabe LIKE anlc-afabe, afblpe LIKE anlc-afblpe, answl LIKE anlc-answl, kansw LIKE anlc-kansw, knafa LIKE anlc-knafa, nafag LIKE anlc-nafag, nafal LIKE anlc-nafal, nafav LIKE anlc-nafav, aufwb LIKE anlc-aufwb, ndabj LIKE anlc-ndabj, ndabp LIKE anlc-ndabp, ksafa LIKE anlc-ksafa, kaafa LIKE anlc-kaafa, safag LIKE anlc-safag, aafag LIKE anlc-aafag, safal LIKE anlc-safal, aafal LIKE anlc-aafal, * nafav LIKE anlc-nafav, safav LIKE anlc-safav, aafav LIKE anlc-aafav, END OF ls_anlc. DATA lt_anlc LIKE TABLE OF ls_anlc. DATA: BEGIN OF ls_anlc2, bukrs LIKE anlc-bukrs, anln1 LIKE anlc-anln1, afabe LIKE anlc-afabe, afblpe TYPE i, END OF ls_anlc2. DATA lt_anlc2 LIKE TABLE OF ls_anlc2. DATA: lt_anlc_coll LIKE TABLE OF ls_anlc2, ls_anlc_coll LIKE ls_anlc2. *---forsmartforms DATA: g_fname TYPE rs38l_fnam, "Smartforms对应的函数变量 g_control TYPE ssfctrlop. "Smartforms对应控制变量 ************************************************************************ * ALV 变量声明 * ************************************************************************ DATA: it_fieldcat TYPE slis_t_fieldcat_alv, "ALV列字段内表 wa_fieldcat TYPE slis_fieldcat_alv, wa_layout TYPE slis_layout_alv , "ALV 布局 it_events TYPE slis_t_event. "ALV事件内表 ************************************************************************ * 常量声明 * ************************************************************************ CONSTANTS: cos_alv_title TYPE tdsfname VALUE '固定资产目录清单查询报表', cos_form_name TYPE tdsfname VALUE 'ZFID010'. ************************************************************************ * 选择屏幕 * ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. *PARAMETER p_bukrs TYPE anla-bukrs OBLIGATORY DEFAULT '1500'. "公司代码 SELECT-OPTIONS s_bukrs FOR anla-bukrs OBLIGATORY . SELECT-OPTIONS: s_anlkl FOR anla-anlkl , "资产分类 s_anln1 FOR anla-anln1 , "资产编号 s_kostl FOR anlz-kostl , "成本中心 s_raumn FOR anlz-raumn , "使用人 * s_caufn FOR anlz-caufn , "内部订单 s_aktiv FOR anla-aktiv , "资本化日期 s_deakt FOR anla-deakt , "不活动日期 s_bdatu FOR anlz-bdatu NO INTERVALS NO-EXTENSION DEFAULT '99991231'. "资产有效结束日期 SELECTION-SCREEN END OF BLOCK blk1. *----------------------------------------------------------------------* * INITIALIZATION * 程序一执行时触发的事件 *----------------------------------------------------------------------* INITIALIZATION. PERFORM frm_initialization. *----------------------------------------------------------------------* * at selection-screen output * 选择屏幕输出事件,当输出选择屏幕时,会执行该事件后的代码块 * 例如,在该事件中, 可以选择屏幕上的字段作出修改 *----------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. PERFORM frm_modify_screen. *----------------------------------------------------------------------* * at selection-screen * 选择屏幕上事件,当输入Enter、点击执行时,会执行该事件后的代码块 *----------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM frm_check_authority. "权限检查 PERFORM check_company_auth. *----------------------------------------------------------------------* * start-of-selection * 点击执行按钮后触发该事件后的代码块 * 在该事件后主要是对数据的获取与处理等 *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_getdata. *----------------------------------------------------------------------* * end-of-selection * 当执行完对数据处理的事件后,将对数据进行输出显示。 *----------------------------------------------------------------------* END-OF-SELECTION. PERFORM frm_set_alv_event. "设置ALV事件 PERFORM frm_set_alv_layout. "设置ALV布局 PERFORM frm_set_alv_fieldcats. "设置ALV列字段 PERFORM frm_alv_output. "显示ALV PERFORM frm_free_object. "释放全局内表 *&---------------------------------------------------------------------* *& Form FRM_INITIALIZATION *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_initialization . ENDFORM. " FRM_INITIALIZATION *&---------------------------------------------------------------------* *& Form FRM_MODIFY_SCREEN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_modify_screen . * LOOP AT SCREEN. * IF screen-group1 = 'MD1'. * screen-input = '0'. * MODIFY SCREEN. * ENDIF. * ENDLOOP. ENDFORM. " FRM_MODIFY_SCREEN *&---------------------------------------------------------------------* *& Form FRM_CHECK_AUTHORITY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_check_authority . ENDFORM. " FRM_CHECK_AUTHORITY *&---------------------------------------------------------------------* *& Form FRM_GETDATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM check_company_auth . DATA l_bukrs TYPE bukrs. SELECT SINGLE bukrs INTO l_bukrs FROM t001 WHERE bukrs IN s_bukrs. IF sy-subrc <> 0. MESSAGE '公司代码不存在' TYPE 'E'. ENDIF. * AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' * ID 'ACTVT' FIELD '03' * ID 'BUKRS' FIELD l_bukrs. * IF sy-subrc <> 0. * MESSAGE '您没权限' TYPE 'E'. *** You have no authorization for company code & * ENDIF. ENDFORM. " CHECK_COMPANY_AUTH FORM frm_getdata . DATA: BEGIN OF ls_t090na, afapl LIKE t090na-afapl, afasl LIKE t090na-afasl, anhwsl LIKE t090na-anhwsl, * afatxt LIKE t090na-afatxt, END OF ls_t090na. DATA lt_t090na LIKE TABLE OF ls_t090na. DATA: lt_t090nat TYPE TABLE OF t090nat, ls_t090nat TYPE t090nat. DATA: lt_t091p TYPE TABLE OF t091p, ls_t091p TYPE t091p. DATA: lt_t095b TYPE TABLE OF t095b, ls_t095b TYPE t095b. DATA: lt_ska1 TYPE TABLE OF ska1, ls_ska1 TYPE ska1. DATA: lt_skat TYPE TABLE OF skat, ls_skat TYPE skat. DATA: lt_anlp TYPE TABLE OF anlp, lt_anlp2 TYPE TABLE OF anlp, ls_anlp TYPE anlp, ls_anlp2 TYPE anlp. DATA: BEGIN OF ls_acdoca, rldnr LIKE acdoca-rldnr, rbukrs LIKE acdoca-rbukrs, gjahr LIKE acdoca-gjahr, belnr LIKE acdoca-belnr, docln LIKE acdoca-docln, anln1 LIKE acdoca-anln1, anbwa LIKE acdoca-anbwa, slalittype LIKE acdoca-slalittype, tsl LIKE acdoca-tsl, END OF ls_acdoca. DATA lt_acdoca LIKE TABLE OF ls_acdoca. DATA l_tsl LIKE acdoca-tsl . SELECT anla~bukrs "公司代码 anla~anlkl "固定资产分类 anla~anln1 "固定资产编号 anla~anln2 "固定资产子编号 anla~txt50 "固定资产描述 anla~txa50 "规则型号 anla~sernr "序列号 anla~invnr "存货号 anla~menge "数量 anla~meins "单位 anla~invzu "存放地点 anla~ord41 "资产状态 anla~lifnr "供应商 anla~liefe "供应商名称关联字段 anla~aktiv "资本化日期 anla~deakt "不活动日期 anla~herst "制造商 * anla~ord41 "资产的处置形式(改) anla~ord42 "资产状态(改) anlz~kostl "成本中心 anlz~caufn "内部订单 anlz~raumn "固定资产保管人 anla~typbz "使用部门 anla~erdat "录入日期 anla~ktogr "科目定位码 FROM anla INNER JOIN anlz ON anla~bukrs = anlz~bukrs AND anla~anln1 = anlz~anln1 AND anla~anln2 = anlz~anln2 INTO CORRESPONDING FIELDS OF TABLE it_output WHERE anla~bukrs IN s_bukrs AND anla~anlkl IN s_anlkl AND anla~anln1 IN s_anln1 AND anla~aktiv IN s_aktiv * AND anlz~caufn IN s_caufn AND anlz~kostl IN s_kostl AND anla~deakt IN s_deakt AND anlz~bdatu IN s_bdatu AND anlz~raumn IN s_raumn. IF it_output IS NOT INITIAL. SELECT rldnr rbukrs gjahr belnr docln anln1 anbwa slalittype tsl INTO CORRESPONDING FIELDS OF TABLE lt_acdoca FROM acdoca FOR ALL ENTRIES IN it_output WHERE rbukrs = it_output-bukrs AND anln1 = it_output-anln1 AND ( anbwa = '100' OR ( anbwa = '970' AND slalittype = '7000' ) OR ( anbwa = '980' AND slalittype = '7000' ) OR ( anbwa = '346' ) ) . SORT lt_acdoca BY rbukrs anln1. SELECT anlh~anlhtxt "资产主号文本 anlh~bukrs anlh~anln1 anlh~luntn FROM anlh INTO CORRESPONDING FIELDS OF TABLE it_anlhtxt FOR ALL ENTRIES IN it_output WHERE anlh~bukrs = it_output-bukrs AND anlh~anln1 = it_output-anln1 AND anlh~luntn = it_output-anln2. SORT it_anlhtxt BY bukrs anln1 luntn. SELECT bukrs gjahr peraf afbnr anln1 anln2 afaber zujhr zucod nafaz aafaz INTO CORRESPONDING FIELDS OF TABLE lt_anlp FROM anlp FOR ALL ENTRIES IN it_output WHERE anlp~bukrs = it_output-bukrs AND anlp~anln1 = it_output-anln1 AND anlp~anln2 = it_output-anln2 AND afaber = '01'. SORT lt_anlp BY bukrs anln1 gjahr peraf DESCENDING . APPEND LINES OF lt_anlp TO lt_anlp2 . SORT lt_anlp2 BY bukrs anln1 peraf . SELECT anlc~ndabj "已使用年份 anlc~ndabp "已使用月份 anlc~kansw anlc~answl anlc~aufwb "改动 anlc~nafag "改动 anlc~safag "改动 anlc~aafag "改动 anlc~bukrs anlc~anln1 anlc~anln2 anlc~afabe anlc~knafa anlc~nafal anlc~nafav FROM anlc INTO CORRESPONDING FIELDS OF TABLE it_anlc FOR ALL ENTRIES IN it_output WHERE anlc~bukrs = it_output-bukrs AND anlc~anln1 = it_output-anln1 AND anlc~anln2 = it_output-anln2. SORT it_anlc BY bukrs anln1 anln2 . SELECT bukrs anln1 gjahr afabe afblpe answl kansw knafa nafag nafal nafav ndabj ndabp ksafa kaafa safag aafag safal aafal nafav safav aafav INTO CORRESPONDING FIELDS OF TABLE lt_anlc FROM anlc FOR ALL ENTRIES IN it_anlc WHERE bukrs = it_anlc-bukrs AND anln1 = it_anlc-anln1 AND afabe = it_anlc-afabe. SORT lt_anlc BY bukrs anln1 afabe gjahr DESCENDING."根据财年降序排列 LOOP AT lt_anlc INTO ls_anlc. MOVE-CORRESPONDING ls_anlc TO ls_anlc2. APPEND ls_anlc2 TO lt_anlc2. CLEAR: ls_anlc2,ls_anlc. ENDLOOP. SORT lt_anlc2 BY bukrs anln1 afabe . LOOP AT lt_anlc2 INTO ls_anlc2. COLLECT ls_anlc2 INTO lt_anlc_coll. CLEAR ls_anlc2. ENDLOOP. SORT lt_anlc_coll BY bukrs anln1 afabe. SELECT anlb~afasl "折旧码 anlb~ndjar "使用年限 anlb~ndper "使用期间 anlb~afabg "折旧开始日期 anlb~bukrs anlb~anln1 anlb~anln2 anlb~schrw_proz FROM anlb INTO TABLE it_anlb FOR ALL ENTRIES IN it_output WHERE anlb~bukrs = it_output-bukrs AND anlb~anln1 = it_output-anln1 AND anlb~anln2 = it_output-anln2. SORT it_anlb BY bukrs anln1 anln2. SELECT anlb~afasl "折旧码 anlb~ndjar "使用年限 anlb~ndper "使用期间 anlb~afabg "折旧开始日期 anlb~bdatu " anlb~afabe anlb~bukrs anlb~anln1 anlb~anln2 anlb~schrw_proz FROM anlb INTO CORRESPONDING FIELDS OF TABLE it_anlb2 FOR ALL ENTRIES IN it_output WHERE anlb~bukrs = it_output-bukrs AND anlb~anln1 = it_output-anln1 AND anlb~anln2 = it_output-anln2. SORT it_anlb2 BY bukrs anln1 afabe bdatu DESCENDING. "根据财年降序排列 IF it_anlb IS NOT INITIAL . SELECT afapl afasl anhwsl * afatxt INTO CORRESPONDING FIELDS OF TABLE lt_t090na FROM t090na FOR ALL ENTRIES IN it_anlb WHERE afasl = it_anlb-afasl AND afapl = '1000'. IF lt_t090na IS NOT INITIAL . SELECT * INTO TABLE lt_t090nat FROM t090nat WHERE spras = 1. SORT lt_t090nat BY afapl afasl . ENDIF. SELECT * INTO TABLE lt_t091p FROM t091p . SORT lt_t090na BY afasl . SORT lt_t091p BY anhwsl . ENDIF. SELECT * INTO TABLE lt_t095b FROM t095b FOR ALL ENTRIES IN it_output WHERE ktogr = it_output-ktogr AND ktopl = '1000' AND afabe = 1. SORT lt_t095b BY ktogr. IF lt_t095b IS NOT INITIAL . * SELECT * * INTO TABLE lt_ska1 * FROM ska1 * FOR ALL ENTRIES IN lt_t095b * WHERE saknr = lt_t095b-ktnafb * AND ktopl = '1000'. * SORT lt_ska1 BY saknr . * IF LT_SKA1 IS NOT INITIAL . SELECT * INTO TABLE lt_skat FROM skat FOR ALL ENTRIES IN lt_t095b WHERE spras = 1 AND saknr = lt_t095b-ktnafb AND ktopl = '1000'. SORT lt_skat BY ktopl saknr. * ENDIF. ENDIF. ENDIF. LOOP AT it_output INTO wa_output. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' EXPORTING input = wa_output-meins language = sy-langu IMPORTING * long_text = output = wa_output-meins * short_text = EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. SELECT SINGLE t001~butxt "公司代码名称 t001~waers "币种 FROM t001 INTO (wa_output-butxt, wa_output-waers) WHERE t001~bukrs = wa_output-bukrs. SELECT SINGLE cskt~ltext "成本中心描述 FROM cskt INTO wa_output-ltext WHERE cskt~kostl = wa_output-kostl. SELECT SINGLE ankt~txk20 "固定资产分类描述 FROM ankt INTO wa_output-txk20 WHERE ankt~anlkl = wa_output-anlkl AND spras = sy-langu. READ TABLE it_anlhtxt INTO wa_anlhtxt WITH KEY bukrs = wa_output-bukrs anln1 = wa_output-anln1 luntn = wa_output-anln2 BINARY SEARCH. IF sy-subrc = 0. wa_output-anlhtxt = wa_anlhtxt-anlhtxt. "资产主号文本 ENDIF. SELECT SINGLE lfa1~name1 FROM lfa1 INTO wa_output-name1 WHERE lfa1~lifnr = wa_output-lifnr AND lfa1~land1 = 'CN'. SELECT SINGLE t087t~ordtx FROM t087t INTO wa_output-ordtx WHERE t087t~ord4x = wa_output-ord41 AND ordnr = 1 AND t087t~spras = sy-langu. SELECT SINGLE t087t~ordtx AS ordt2 FROM t087t INTO wa_output-ordt2 WHERE t087t~ord4x = wa_output-ord42 AND t087t~spras = sy-langu. READ TABLE lt_t095b INTO ls_t095b WITH KEY ktogr = wa_output-ktogr BINARY SEARCH. IF sy-subrc = 0. wa_output-ktnafb = ls_t095b-ktnafb. READ TABLE lt_skat INTO ls_skat WITH KEY saknr = ls_t095b-ktnafb BINARY SEARCH . IF sy-subrc = 0. wa_output-txt20 = ls_skat-txt20. ENDIF. ENDIF. READ TABLE it_anlb INTO wa_anlb WITH KEY bukrs = wa_output-bukrs anln1 = wa_output-anln1 anln2 = wa_output-anln2 BINARY SEARCH. IF sy-subrc = 0. wa_output-afasl = wa_anlb-afasl. "折旧码 wa_output-ndjar = wa_anlb-ndjar."使用年限 wa_output-ndper = wa_anlb-ndper."使用期间 wa_output-afabg = wa_anlb-afabg. "折旧开始日期 " 净残值率 IF wa_anlb-schrw_proz <> '0' . wa_output-ahproz = wa_anlb-schrw_proz . ELSE. READ TABLE lt_t090na INTO ls_t090na WITH KEY afasl = wa_anlb-afasl BINARY SEARCH. IF sy-subrc = 0 . IF ls_t090na-anhwsl IS NOT INITIAL. READ TABLE lt_t091p INTO ls_t091p WITH KEY anhwsl = ls_t090na-anhwsl BINARY SEARCH. IF sy-subrc = 0. wa_output-ahproz = ls_t091p-ahproz."净残值率 ENDIF. ELSE. wa_output-ahproz = 0. ENDIF. CLEAR ls_t090na . ENDIF. ENDIF. READ TABLE lt_t090na INTO ls_t090na WITH KEY afasl = wa_anlb-afasl BINARY SEARCH. IF sy-subrc = 0 . READ TABLE lt_t090nat INTO ls_t090nat WITH KEY afapl = ls_t090na-afapl afasl = ls_t090na-afasl BINARY SEARCH . IF sy-subrc = 0. wa_output-afatxt = ls_t090nat-afatxt."折旧方法 ENDIF. ENDIF. ENDIF. READ TABLE it_anlc INTO wa_anlc WITH KEY bukrs = wa_output-bukrs anln1 = wa_output-anln1 anln2 = wa_output-anln2 BINARY SEARCH. IF sy-subrc = 0. wa_output-ndabj = wa_anlc-ndabj. "已使用年份 wa_output-ndabp = wa_anlc-ndabp."已使用月份 wa_output-kansw = wa_anlc-kansw. wa_output-answl = wa_anlc-answl. wa_output-aufwb = wa_anlc-aufwb."改动 wa_output-nafag = wa_anlc-nafag."改动 wa_output-safag = wa_anlc-safag."改动 wa_output-aafag = wa_anlc-aafag."改动 IF wa_output-anlkl = 'Z300'. wa_output-afblpe = 0 . ELSE. CLEAR ls_anlc. READ TABLE lt_anlc INTO ls_anlc WITH KEY bukrs = wa_anlc-bukrs anln1 = wa_anlc-anln1 afabe = 1 BINARY SEARCH. IF sy-subrc = 0. * wa_output-afblpe = ls_anlc-ndabj * 12 + ls_anlc-ndabp ."已计提月份 READ TABLE it_anlb2 INTO wa_anlb2 WITH KEY bukrs = wa_anlc-bukrs anln1 = wa_anlc-anln1 afabe = 1 BINARY SEARCH. IF sy-subrc = 0. * wa_output-afblpe = ls_anlc-ndabj * 12 + ls_anlc-ndabp ."已计提月份 DATA l_year TYPE char4. DATA l_mon TYPE char2 . l_year = wa_anlb2-afabg+0(4). l_mon = wa_anlb2-afabg+4(2). wa_output-afblpe = ( ls_anlc-gjahr - l_year ) * 12 + ( ls_anlc-afblpe - l_mon + 1 ) . IF wa_output-afblpe < 0 . CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' CHANGING value = wa_output-afblpe. ENDIF. CLEAR ls_anlc. ENDIF. CLEAR ls_anlc. ENDIF. ENDIF. * READ TABLE lt_anlc_coll INTO ls_anlc_coll WITH KEY bukrs = wa_anlc-bukrs * anln1 = wa_anlc-anln1 * afabe = wa_anlc-afabe * BINARY SEARCH . * IF sy-subrc = 0. * wa_output-afblpe = ls_anlc_coll-afblpe. * CLEAR ls_anlc_coll. * ENDIF. READ TABLE lt_anlc INTO ls_anlc WITH KEY bukrs = wa_anlc-bukrs anln1 = wa_anlc-anln1 afabe = wa_anlc-afabe BINARY SEARCH. IF sy-subrc = 0. wa_output-gouzhi = ls_anlc-kansw + ls_anlc-answl."原值 wa_output-zhejiu = ls_anlc-knafa + ls_anlc-ksafa + ls_anlc-kaafa + ls_anlc-nafag + ls_anlc-safag + ls_anlc-aafag + ls_anlc-nafal + ls_anlc-safal + ls_anlc-aafal + ls_anlc-nafav + ls_anlc-safav + ls_anlc-aafav ."累计折旧 * wa_output-jingzhi = wa_output-gouzhi - wa_output-zhejiu."净值 wa_output-jingzhi = wa_output-gouzhi + wa_output-zhejiu + ls_anlc-aufwb."净值 IF wa_output-deakt IS INITIAL . wa_output-bfqljzj = wa_output-zhejiu . ELSE. wa_output-bfqljzj = ( ls_anlc-nafal + ls_anlc-safal + ls_anlc-aafal + ls_anlc-safav + ls_anlc-aafav + ls_anlc-nafav ) * -1 . ENDIF. ENDIF. ENDIF. wa_output-ahpro = wa_output-gouzhi * wa_output-ahproz / 100."净残值 " 月折旧额 IF wa_output-anlkl = 'Z300'. wa_output-yuezhejiue = 0 . ELSE. * wa_output-yuezhejiue = ( wa_output-jingzhi - wa_output-ahpro ) / * ( wa_output-ndjar * 12 + wa_output-ndper - wa_output-afblpe ) . READ TABLE lt_anlp INTO ls_anlp2 WITH KEY bukrs = wa_output-bukrs anln1 = wa_output-anln1 BINARY SEARCH . IF sy-subrc = 0 . LOOP AT lt_anlp INTO ls_anlp FROM sy-tabix . IF ls_anlp-bukrs = wa_output-bukrs AND ls_anlp-anln1 = wa_output-anln1 AND ls_anlp-gjahr = ls_anlp2-gjahr AND ls_anlp-peraf = ls_anlp2-peraf . wa_output-yuezhejiue = wa_output-yuezhejiue + ls_anlp-nafaz + ls_anlp-aafaz . ELSE. EXIT. ENDIF. CLEAR ls_anlp . ENDLOOP. * READ TABLE lt_anlp2 WITH KEY bukrs = wa_output-bukrs * anln1 = wa_output-anln1 * BINARY SEARCH TRANSPORTING NO FIELDS . * IF sy-subrc = 0 . * LOOP AT lt_anlp2 INTO ls_anlp2 FROM sy-tabix . * IF ls_anlp2-bukrs = wa_output-bukrs AND * ls_anlp2-anln1 = wa_output-anln1 . * wa_output-yuezhejiue = wa_output-yuezhejiue + ls_anlp2-aafaz . * ELSE. * EXIT . * ENDIF. * ENDLOOP. * ENDIF. ENDIF. IF wa_output-yuezhejiue < 0 . CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' CHANGING value = wa_output-yuezhejiue. ENDIF. CLEAR ls_anlp2 . ENDIF. " 月折旧率 IF wa_output-gouzhi = 0 . wa_output-yuezhejiulv = 0 . ELSE . wa_output-yuezhejiulv = wa_output-yuezhejiue / wa_output-gouzhi * 100 . ENDIF. IF wa_output-deakt IS INITIAL . wa_output-bfqzcyz = wa_output-gouzhi . ELSE. READ TABLE lt_acdoca WITH KEY rbukrs = wa_output-bukrs anln1 = wa_output-anln1 BINARY SEARCH TRANSPORTING NO FIELDS . IF sy-subrc = 0. LOOP AT lt_acdoca INTO ls_acdoca FROM sy-tabix . IF ls_acdoca-rbukrs = wa_output-bukrs AND ls_acdoca-anln1 = wa_output-anln1 . l_tsl = l_tsl + ls_acdoca-tsl . ELSE. EXIT. ENDIF. ENDLOOP. ENDIF. wa_output-bfqzcyz = l_tsl. CLEAR l_tsl. ENDIF. * wa_output-gouzhi = wa_output-kansw + wa_output-answl. * wa_output-zhejiu = wa_output-nafag + wa_output-safag + wa_output-aafag. * wa_output-jingzhi = wa_output-gouzhi + wa_output-zhejiu + wa_output-aufwb. MODIFY it_output FROM wa_output. ENDLOOP. SORT it_output BY bukrs anlkl anln1. ENDFORM. " FRM_GETDATA *&---------------------------------------------------------------------* *& Form frm_set_alv_fieldcats *&---------------------------------------------------------------------* * text fiedcat settings for alv *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_set_alv_fieldcats . PERFORM frm_set_fieldcat USING: 'ANLKL' '' '资产类别编号' 10 '', 'TXK20' '' '资产类别名称' 14 '', 'BUKRS' '' '公司代码' 8 '', 'BUTXT' '' '公司代码名称' 8 '', 'ANLN1' '' '固定资产编号' 12 '', * 'ANLN2' '' '固定资产子编号' 15 '', 'TXT50' '' '固定资产名称' 20 '', 'HERST' '' 'U8编码' 10 '', 'KOSTL' '' '成本中心' 10 '', 'INVNR' '' '规格型号' 10 '', 'SERNR' '' '序列号' 10 '', * 'TXA50' '' '规格型号' 10 'X', * 'ANLHTXT' '' '资产主号文本' 20 '', 'MENGE' '' '数量' 10 '', 'MEINS' '' '基本计量单位' 10 '', * 'ORD41' '' '状态' 13 '', 'ORDTX' '' '状态(描述)' 15 '', 'AKTIV' '' '开始使用日期' 10 '', 'NDJAR' '' '使用年限(年)' 10 '', 'NDPER' '' '使用年限(月)' 10 '', 'AFBLPE' '' '已计提月份' 10 '', 'GOUZHI' '' '原值' 10 '', 'AHPROZ' '' '净残值率(%)' 10 '', 'AHPRO' '' '净残值' 10 '', 'YUEZHEJIULV' '' '月折旧率(%)' 10 '', 'YUEZHEJIUE' '' '月折旧额' 10 '', 'ZHEJIU' '' '累计折旧金额' 10 '', 'JINGZHI' '' '净值' 10 '', 'WAERS' '' '币种' 10 '', 'TXT20' '' '对应折旧科目' 10 '', 'KTNAFB' '' '对应折旧科目编码' 10 '', 'AFATXT' '' '折旧方法' 10 '', 'INVZU' '' '存放地点' 10 '', 'TYPBZ' '' '使用部门' 10 '', 'RAUMN' '' '使用人' 10 '', 'LIFNR' '' '供货单位' 10 '', 'ERDAT' '' '录入日期' 10 '', 'DEAKT' '' '报废日期' 10 '', 'BFQZCYZ' '' '报废前资产原值' 10 '', 'BFQLJZJ' '' '报废前累计折旧' 10 ''. * 'ORD42' '' '资产状态' 10 '', * 'ORDT2' '' '资产状态描述' 15 '', * * * 'CAUFN' '' '内部订单' 10 '', * * 'NAME1' '' '供应商名称' 10 '', * * * * 'AFASL' '' '折旧码' 10 '', * * 'NDPER' '' '使用期间' 10 '', * 'NDABJ' '' '已使用年份' 10 '', * 'NDABP' '' '已使用月份' 10 '', * 'AFABG' '' '折旧开始日期' 10 '', * * * 'AUFWB' '' '固定资产减值' 10 ''. ENDFORM. " frm_set_alv_fieldcats *&---------------------------------------------------------------------* *& Form FRM_SET_FIELDCAT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0136 text * -->P_0137 text * -->P_0138 text *----------------------------------------------------------------------* FORM frm_set_fieldcat USING p_fieldname TYPE slis_fieldname p_ref_tabname TYPE slis_tabname p_text TYPE dd03p-scrtext_l p_outputlen TYPE dd03p-outputlen p_zero TYPE char1. CLEAR wa_fieldcat. wa_fieldcat-fieldname = p_fieldname. "对应的内表字段名 wa_fieldcat-ref_tabname = p_ref_tabname."参考的系统表 wa_fieldcat-seltext_l = p_text. "标题内容 wa_fieldcat-outputlen = p_outputlen. "列宽 wa_fieldcat-no_zero = p_zero. "显示时去前导零 APPEND wa_fieldcat TO it_fieldcat. ENDFORM. " frm_set_fieldcat *&---------------------------------------------------------------------* *& Form frm_set_alv_layout *&---------------------------------------------------------------------* * text layout settings for alv *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_set_alv_layout . wa_layout-zebra = 'X'. "条纹显示 wa_layout-box_fieldname = 'SEL'. "行选择标识. ENDFORM. " frm_set_alv_layout *&---------------------------------------------------------------------* *& Form frm_set_alv_event *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_set_alv_event . DATA: l_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE', lw_events TYPE slis_alv_event. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = it_events EXCEPTIONS list_type_wrong = 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. * 在事件(字段名:name)为 "top_of_page" 的行中将form名(字段名:form) * 设为 frm_top_of_page, 这样,系统就会自动 perform frm_top_of_page CLEAR lw_events. READ TABLE it_events INTO lw_events WITH KEY name = slis_ev_top_of_page . " TOP_OF_PAGE IF sy-subrc = 0. lw_events-form = l_top_of_page."调用子程序名 MODIFY it_events FROM lw_events INDEX sy-tabix. ENDIF. ENDFORM. " frm_set_alv_event *&---------------------------------------------------------------------* *& Form FRM_TOP_OF_PAGE *&---------------------------------------------------------------------* * 表头 *&---------------------------------------------------------------------* * --> p1 text * <-- p2 text *&---------------------------------------------------------------------* FORM frm_top_of_page. DATA: lt_listheader TYPE slis_t_listheader, lw_listheader LIKE LINE OF lt_listheader. lw_listheader-typ = 'H'." 大标题 lw_listheader-info = cos_alv_title. "标题内容 APPEND lw_listheader TO lt_listheader. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader. ENDFORM. "FRM_TOP_OF_PAGE *&---------------------------------------------------------------------* *& Form frm_alv_output *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_alv_output . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = wa_layout it_fieldcat = it_fieldcat "输出的列信息 i_save = 'A' "变式可保存 it_events = it_events "事件内表 * i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏 * i_callback_user_command = 'FRM_USER_COMMAND' "按钮处理 TABLES t_outtab = it_output "输出内容内表 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. " frm_alv_output *&---------------------------------------------------------------------* *& Form FRM_FREE_OBJECT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_free_object . FREE: it_output. ENDFORM. " FRM_FREE_OBJECT **&---------------------------------------------------------------------* **& Form FRM_SET_STATUS **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** -->PT_EXTAB text **----------------------------------------------------------------------* *FORM frm_set_status USING pt_extab TYPE slis_t_extab . * SET PF-STATUS 'STANDARD'. * *ENDFORM. "Frm_SET_STATUS * **&---------------------------------------------------------------------* **& Form FRM_USER_COMMAND **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** -->R_UCOMM text ** -->RS_SELFIELD text **----------------------------------------------------------------------* *FORM frm_user_command USING r_ucomm LIKE sy-ucomm * rs_selfield TYPE slis_selfield. * * CASE r_ucomm. * WHEN 'PRNT'. * PERFORM frm_print_data." Smartform 打印 * * WHEN '&IC1'. "双击时间 * READ TABLE it_output INTO wa_output INDEX rs_selfield-tabindex. * CASE rs_selfield-fieldname. * SET PARAMETER ID 'BUK' FIELD '1010'. * SET PARAMETER ID 'AN1' FIELD wa_output-anln1. * SET PARAMETER ID 'AN2' FIELD wa_output-anln2. * CALL TRANSACTION 'AS03' AND SKIP FIRST SCREEN. * * ENDCASE. * *** 设置刷新模式,行列保持不变 * rs_selfield-refresh = 'X'. * rs_selfield-col_stable = 'X'. * rs_selfield-row_stable = 'X'. * ENDCASE. *ENDFORM. "user_command **&---------------------------------------------------------------------* **& Form FRM_PRINT_DATA **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** --> p1 text ** <-- p2 text **----------------------------------------------------------------------* *FORM frm_print_data . * PERFORM frm_ssf_open. * PERFORM frm_ssf_process. * PERFORM frm_ssf_close. * *ENDFORM. " FRM_PRINT_DATA * **&---------------------------------------------------------------------* **& Form FRM_SSF_OPEN **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* *FORM frm_ssf_open . ** g_control-no_dialog = 'X'. "不弹出对话框 * g_control-preview = 'X'. "预览 * g_control-no_open = 'X'. * g_control-no_close = 'X'. * * CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' * EXPORTING * formname = cos_form_name * IMPORTING * fm_name = g_fname * EXCEPTIONS * no_form = 1 * no_function_module = 2 * OTHERS = 3. * IF sy-subrc <> 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. * * CALL FUNCTION 'SSF_OPEN' * EXPORTING * control_parameters = g_control * EXCEPTIONS * formatting_error = 1 * internal_error = 2 * send_error = 3 * user_canceled = 4 * OTHERS = 5. * *ENDFORM. " FRM_SSF_OPEN * **&---------------------------------------------------------------------* **& Form FRM_SSF_PROCESS **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** --> p1 text ** <-- p2 text **----------------------------------------------------------------------* *FORM frm_ssf_process . * DATA: lt_output TYPE STANDARD TABLE OF zzfis015, "参考的格式为 smartfroms 的内表参考的格式 * lw_output LIKE LINE OF lt_output, * lt_zzfis015 TYPE STANDARD TABLE OF zzfis015, * lw_zzfis015 LIKE LINE OF lt_zzfis015. * * DATA l_fm_name TYPE rs38l_fnam. * * LOOP AT it_output INTO wa_output WHERE sel = 'X'. "选中的行 * CLEAR lw_zzfis015. * MOVE-CORRESPONDING wa_output TO lw_zzfis015. * APPEND lw_zzfis015 TO lt_zzfis015. * ENDLOOP. * * SORT lt_zzfis015 BY anln1. "按照供应商编号进行派讯 * * LOOP AT lt_zzfis015 INTO lw_zzfis015. * READ TABLE lt_zzfis015 INTO lw_output INDEX sy-tabix. * * AT END OF anln1. "读取出排序后的内表(按供应商排序)一个供应商的最后一行值 * APPEND lw_output TO lt_output. * CALL FUNCTION g_fname "把当作参数的函数名把内表参数传到表格 * EXPORTING * control_parameters = g_control * TABLES * it_output2 = lt_output * EXCEPTIONS * formatting_error = 1 * internal_error = 2 * send_error = 3 * user_canceled = 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. * CLEAR lt_output. * CONTINUE. * ENDAT. * * APPEND lw_output TO lt_output. * * ENDLOOP. * *ENDFORM. " FRM_SSF_PROCESS * * **&---------------------------------------------------------------------* **& Form FRM_SSF_CLOSE **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** --> p1 text ** <-- p2 text **----------------------------------------------------------------------* *FORM frm_ssf_close . * CALL FUNCTION 'SSF_CLOSE' * EXCEPTIONS * formatting_error = 1 * internal_error = 2 * send_error = 3 * OTHERS = 4. * *ENDFORM. " FRM_SSF_CLOSE