*&---------------------------------------------------------------------* *& Report ZCOR001 *&---------------------------------------------------------------------* *&订单成本汇总表 *&AUTH: XY *&DATA:2017-02-14 *&---------------------------------------------------------------------* REPORT ZCOR001. TABLES:AFPO,ACDOCA. 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: BEGIN OF GTH_DATA, SEL TYPE C, AUFNR LIKE AFPO-AUFNR, AUFNR_STATUS(255) TYPE C, DAUAT LIKE AFPO-DAUAT, DWERK LIKE AFPO-DWERK, MATNR LIKE AFPO-MATNR, MAKTX LIKE MAKT-MAKTX, MEINS LIKE AFPO-MEINS, WAERS LIKE AUFK-WAERS, PSMNG LIKE AFPO-PSMNG, WEMNG LIKE AFPO-WEMNG, MSL LIKE ACDOCA-MSL,"本期实际生产数量 TSL LIKE ACDOCA-TSL,"订单实际投料金额 TSL1 LIKE ACDOCA-TSL,"订单实际报工金额 TSL2 LIKE ACDOCA-TSL,"订单实际投入总金额 TSL3 LIKE ACDOCA-TSL,"订单实际收货金额 TSL4 LIKE ACDOCA-TSL,"订单实际结算金额 TSL5 LIKE ACDOCA-TSL,"在产品 J1 TYPE ZKBETR,"订单实际转出总金额 J2 TYPE ZKBETR,"订单差异 BWPRH LIKE MBEW-BWPRH,"零售价 BWPH1 LIKE MBEW-BWPH1,"出厂价 VJBWH LIKE MBEW-VJBWH,"产品扣率 ZSTATUS(255) TYPE C, END OF GTH_DATA. DATA: GTD_DATA LIKE TABLE OF GTH_DATA. DATA: GTD_DATA_COLLECT LIKE TABLE OF GTH_DATA. DATA: BEGIN OF GTH_MBEW, MATNR LIKE MBEW-MATNR, BWKEY LIKE MBEW-BWKEY, BWPRH LIKE MBEW-BWPRH, BWPH1 LIKE MBEW-BWPH1, VJBWH LIKE MBEW-VJBWH, END OF GTH_MBEW. DATA:GTD_MBEW LIKE TABLE OF GTH_MBEW. DATA: BEGIN OF GTH_ACD, AUFNR LIKE ACDOCA-AUFNR, RLDNR LIKE ACDOCA-RLDNR, VORGN LIKE ACDOCA-VORGN, VRGNG LIKE ACDOCA-VRGNG, BUDAT LIKE ACDOCA-BUDAT, MSL LIKE ACDOCA-MSL, "数量 TSL LIKE ACDOCA-TSL, "金额 DWERK LIKE AFPO-DWERK, MATNR LIKE AFPO-MATNR, DAUAT LIKE AFPO-DAUAT, RACCT LIKE ACDOCA-RACCT, END OF GTH_ACD. DATA: GTD_ACD LIKE TABLE OF GTH_ACD, GTD_ACD1 LIKE TABLE OF GTH_ACD, GTD_ACD2 LIKE TABLE OF GTH_ACD, GTD_ACD3 LIKE TABLE OF GTH_ACD, GTD_ACD4 LIKE TABLE OF GTH_ACD, GTD_ACD5 LIKE TABLE OF GTH_ACD, GTD_ACD6 LIKE TABLE OF GTH_ACD. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1. SELECT-OPTIONS: P_WERKS FOR AFPO-DWERK OBLIGATORY. SELECT-OPTIONS: S_DATA FOR ACDOCA-BUDAT OBLIGATORY, S_MATNR FOR AFPO-MATNR, S_AUFNR FOR AFPO-AUFNR, S_DAUAT FOR AFPO-DAUAT. SELECTION-SCREEN END OF BLOCK B1 . START-OF-SELECTION. PERFORM SUB_CHECK_CONDITION. PERFORM SUB_GET_DATA1. PERFORM SUB_GET_MBEW. PERFORM SUB_GET_DATA. "PERFORM SUB_PRO_DATA. PERFORM SUB_DISPLAY_ALV. TOP-OF-PAGE. PERFORM PAGE_HEADER. *&---------------------------------------------------------------------* *& Form SUB_GET_DATA1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM sub_get_data1 . SELECT AFPO~AUFNR AFPO~DAUAT AFPO~DWERK AFPO~MATNR AFPO~MEINS AUFK~WAERS AFPO~PSMNG AFPO~WEMNG MAKT~MAKTX "MBEW~BWPRH "MBEW~BWPH1 "MBEW~VJBWH FROM AFPO INNER JOIN AUFK ON AFPO~AUFNR = AUFK~AUFNR " INNER JOIN MBEW " ON AFPO~MATNR = MBEW~MATNR " AND AFPO~DWERK = MBEW~BWKEY INNER JOIN MAKT ON AFPO~MATNR = MAKT~MATNR INTO CORRESPONDING FIELDS OF TABLE GTD_DATA WHERE AFPO~DWERK IN P_WERKS AND AFPO~MATNR IN S_MATNR AND AFPO~AUFNR IN S_AUFNR AND AFPO~DAUAT IN S_DAUAT AND MAKT~SPRAS = '1'. IF GTD_DATA[] IS INITIAL. MESSAGE '没有查询到符合条件的数据.' TYPE 'S' DISPLAY LIKE 'W'. STOP. ENDIF. LOOP AT GTD_DATA INTO GTH_DATA. COLLECT GTH_DATA INTO GTD_DATA_COLLECT. ENDLOOP. CLEAR GTH_DATA. SORT GTD_DATA_COLLECT BY AUFNR. ENDFORM. FORM SUB_GET_MBEW. SELECT MATNR BWKEY BWPRH BWPH1 VJBWH FROM MBEW INTO CORRESPONDING FIELDS OF TABLE GTD_MBEW FOR ALL ENTRIES IN GTD_DATA_COLLECT WHERE MATNR = GTD_DATA_COLLECT-MATNR AND BWKEY = GTD_DATA_COLLECT-DWERK. ENDFORM. FORM SUB_GET_DATA. CLEAR GTH_DATA. LOOP AT GTD_DATA_COLLECT INTO GTH_DATA. SELECT ACDOCA~AUFNR ACDOCA~RLDNR ACDOCA~VORGN ACDOCA~VRGNG ACDOCA~RACCT " ACDOCA~BUDAT ACDOCA~MSL"数量 ACDOCA~TSL"金额 AFPO~DWERK AFPO~MATNR "AFPO~DAUAT FROM ACDOCA INNER JOIN AFPO ON ACDOCA~AUFNR = AFPO~AUFNR APPENDING CORRESPONDING FIELDS OF TABLE GTD_ACD WHERE AFPO~AUFNR = GTH_DATA-AUFNR AND AFPO~DWERK IN P_WERKS AND AFPO~MATNR IN S_MATNR AND AFPO~AUFNR IN S_AUFNR AND AFPO~DAUAT IN S_DAUAT AND ACDOCA~BUDAT IN S_DATA. ENDLOOP. * SELECT * ACDOCA~AUFNR * ACDOCA~RLDNR * ACDOCA~VORGN * ACDOCA~VRGNG * " ACDOCA~BUDAT * ACDOCA~MSL"数量 * ACDOCA~TSL"金额 * AFPO~DWERK * AFPO~MATNR * "AFPO~DAUAT * FROM ACDOCA * INNER JOIN AFPO * ON ACDOCA~AUFNR = AFPO~AUFNR * INTO CORRESPONDING FIELDS OF TABLE GTD_ACD * FOR ALL ENTRIES IN GTD_DATA_COLLECT * WHERE AFPO~AUFNR = GTD_DATA_COLLECT-AUFNR * AND AFPO~DWERK = P_WERKS * AND AFPO~MATNR IN S_MATNR * AND AFPO~AUFNR IN S_AUFNR * AND AFPO~DAUAT IN S_DAUAT * AND ACDOCA~BUDAT IN S_DATA. "本期实际生产数量, tsl订单实际收货金额 CLEAR GTH_ACD. LOOP AT GTD_ACD INTO GTH_ACD WHERE RLDNR = '0L' AND VORGN = 'RMWF'. GTH_ACD-MSL = 0 - GTH_ACD-MSL. GTH_ACD-RACCT = ''. COLLECT GTH_ACD INTO GTD_ACD1. ENDLOOP. "订单实际投料金额 CLEAR GTH_ACD. LOOP AT GTD_ACD INTO GTH_ACD WHERE RLDNR = '0L' AND VORGN = 'RMWA'. GTH_ACD-RACCT = ''. COLLECT GTH_ACD INTO GTD_ACD2. ENDLOOP. "订单实际报工金额 CLEAR GTH_ACD. LOOP AT GTD_ACD INTO GTH_ACD WHERE RLDNR = '0L' AND VORGN = 'RMRU' OR VORGN = 'RKLN'. GTH_ACD-RACCT = ''. COLLECT GTH_ACD INTO GTD_ACD3. ENDLOOP. "订单实际结算金额 CLEAR GTH_ACD. LOOP AT GTD_ACD INTO GTH_ACD WHERE RLDNR = '0L' AND VORGN = 'KOAE' AND VRGNG = 'COIN'. GTH_ACD-RACCT = ''. COLLECT GTH_ACD INTO GTD_ACD4. ENDLOOP. "在产品 CLEAR GTH_ACD. LOOP AT GTD_ACD INTO GTH_ACD WHERE RLDNR = '0L' AND VORGN = 'KOAE' AND VRGNG = '' AND RACCT = '5001020900'. COLLECT GTH_ACD INTO GTD_ACD5. ENDLOOP. LOOP AT GTD_DATA_COLLECT INTO GTH_DATA. CLEAR GTH_ACD. READ TABLE GTD_ACD1 INTO GTH_ACD WITH KEY AUFNR = GTH_DATA-AUFNR. IF SY-SUBRC = 0. GTH_DATA-MSL = GTH_ACD-MSL."本期实际生产数量 GTH_DATA-TSL3 = 0 - GTH_ACD-TSL. ""订单实际收货金额 ENDIF. CLEAR GTH_ACD. READ TABLE GTD_ACD2 INTO GTH_ACD WITH KEY AUFNR = GTH_DATA-AUFNR. IF SY-SUBRC = 0. GTH_DATA-TSL = GTH_ACD-TSL."订单实际投料金额 ENDIF. CLEAR GTH_ACD. READ TABLE GTD_ACD3 INTO GTH_ACD WITH KEY AUFNR = GTH_DATA-AUFNR. IF SY-SUBRC = 0. GTH_DATA-TSL1 = GTH_ACD-TSL."订单实际报工金额 ENDIF. CLEAR GTH_ACD. READ TABLE GTD_ACD4 INTO GTH_ACD WITH KEY AUFNR = GTH_DATA-AUFNR. IF SY-SUBRC = 0. GTH_DATA-TSL4 = 0 - GTH_ACD-TSL."订单实际结算金额 ENDIF. CLEAR GTH_ACD. READ TABLE GTD_ACD5 INTO GTH_ACD WITH KEY AUFNR = GTH_DATA-AUFNR. IF SY-SUBRC = 0. GTH_DATA-TSL5 = 0 - GTH_ACD-TSL."在产品 ENDIF. GTH_DATA-TSL2 = GTH_DATA-TSL + GTH_DATA-TSL1."订单实际投入总金额 GTH_DATA-J1 = GTH_DATA-TSL3 + GTH_DATA-TSL4 + GTH_DATA-TSL5."订单实际转出总金额 GTH_DATA-J2 = GTH_DATA-TSL2 - GTH_DATA-J1."订单差异 "取物料价格 READ TABLE GTD_MBEW INTO GTH_MBEW WITH KEY MATNR = GTH_DATA-MATNR. IF SY-SUBRC = 0. GTH_DATA-BWPRH = GTH_MBEW-BWPRH. GTH_DATA-BWPH1 = GTH_MBEW-BWPH1. GTH_DATA-VJBWH = GTH_MBEW-VJBWH. ENDIF. "取订单状态 CALL FUNCTION 'ZAUFNR_STATUS_READ' EXPORTING im_aufnr = GTH_DATA-AUFNR IMPORTING EX_STATE = GTH_DATA-ZSTATUS * TABLES * ET_STATUS = . MODIFY GTD_DATA_COLLECT FROM GTH_DATA. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& FORM SUB_DISPLAY_ALV *&---------------------------------------------------------------------* * 定义和调用ALV *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEX *----------------------------------------------------------------------* FORM SUB_DISPLAY_ALV . PERFORM SUB_ALV_PREPARE. PERFORM SUB_CALL_ALV TABLES GTD_DATA_COLLECT USING GTD_FCAT GST_LOUT 'USER_COMMAND' 'SET_STATUS' ''. I_LVC_S_GLAY-EDT_CLL_CB = 'X'. ENDFORM. FORM SUB_ALV_PREPARE. * PERFORM ADD_FIELD_LVC TABLES GTD_FCAT * USING 'MATNR' 'MATNR' 'MARA' '' '' * '起始日期' '' '' '' '' ''. * PERFORM ADD_FIELD_LVC TABLES GTD_FCAT * USING 'MAKTX' 'MAKTX' 'MAKT' '' '' * '终止日期' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'AUFNR' 'AUFNR' 'AFPO' '' '' '订单号' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'ZSTATUS' 'ZSTATUS' '' '' '' '订单状态' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'DAUAT' 'DAUAT' 'AFPO' '' '' '订单类型' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'DWERK' 'DWERK' 'AFPO' '' '' '工厂' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'MATNR' 'MATNR' 'AFPO' '' '' '物料编号' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'MAKTX' 'MAKTX' 'AFPO' '' '' '物料描述' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'MEINS' 'MEINS' 'AFPO' '' '' '物料计量单位' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'WAERS' 'WAERS' 'AUFK' '' '' '货币' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'PSMNG' 'PSMNG' 'AFPO' '' '' '计划生产数量' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'WEMNG' 'WEMNG' 'AFPO' '' '' '订单累计实际生产数量' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'MSL' 'MSL' 'ACDOCA' '' '' '本期实际生产数量' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL' 'TSL' 'ACDOCA' '' '' '订单实际投料金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL1' 'TSL1' 'ACDOCA' '' '' '订单实际报工金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL2' 'TSL2' 'ACDOCA' '' '' '订单实际投入总金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL3' 'TSL3' 'ACDOCA' '' '' '订单实际收货金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL4' 'TSL4' 'ACDOCA' '' '' '订单实际结算金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'TSL5' 'TSL5' 'ACDOCA' '' '' '在产品' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'J1' 'J1' '' '' '' '订单实际转出总金额' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'J2' 'J2' '' '' '' '订单差异' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'BWPRH' 'BWPRH' 'MBEW' '' '' '零售价' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'BWPH1' 'BWPH1' 'MBEW' '' '' '出厂价' '' '' '' '' ''. PERFORM ADD_FIELD_LVC TABLES GTD_FCAT USING 'VJBWH' 'VJBWH' 'MBEW' '' '' '产品扣率' '' '' '' '' ''. GST_LOUT-ZEBRA = 'X'. GST_LOUT-CWIDTH_OPT = 'X'. GST_LOUT-BOX_FNAME = 'SEL'. GST_LOUT-INFO_FNAME = 'COLOR'. 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_CALL_ALV *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * -->P_GTD_DATA TEXT * -->P_GTD_FCAT TEXT * -->P_GST_LOUT TEXT * -->P_0692 TEXT *----------------------------------------------------------------------* 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' i_callback_top_of_page = 'PAGE_HEADER' 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 PAGE_HEADER *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM page_header . DATA: header TYPE slis_t_listheader, wa TYPE slis_listheader, infield LIKE wa-info, nline TYPE i, nlinechar(4) TYPE c. *TITLE AREA wa-typ = 'H'. wa-info = '订单成本汇总表'. APPEND wa TO header. * * wa-typ = 'S'. * wa-key = '工厂:'. * DATA:s_name1 LIKE t001w-name1. * SELECT SINGLE name1 * INTO s_name1 * FROM t001w * WHERE werks = p_werks. * CONCATENATE ' ' s_name1 INTO wa-info. * APPEND wa TO header. *BELOW AREA. wa-typ = 'S'. wa-key = '统计期间:'. CONCATENATE S_DATA-low '-' S_DATA-high INTO wa-info. APPEND wa TO header. *NEXT LINE. wa-typ = 'S'. DESCRIBE TABLE GTD_DATA_COLLECT LINES nline. nlinechar = nline. wa-key = '表信息:'. CONCATENATE '共有' nlinechar '行数据' INTO wa-info SEPARATED BY space. APPEND wa TO header. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = header i_logo = 'ALVLOGO'. ENDFORM. *&---------------------------------------------------------------------* *& Form SUB_CHECK_CONDITION *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM sub_check_condition . LOOP AT S_DATA. IF S_DATA-HIGH = '00000000' OR S_DATA-LOW = '00000000'. MESSAGE '过账日期上下限不能为空.' TYPE 'S' DISPLAY LIKE 'E'. STOP. ENDIF. ENDLOOP. ENDFORM.
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
浙公网安备 33010602011771号