*&---------------------------------------------------------------------* *& 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