资源描述
*----------------------------------------------------------------------*
* Program Name : ZCFMR173 *
* Purpose : 材料提成比率查询报表 *
* Project Name : CRM *
* Created by : huoqi *
* Create on : 2010.07.14 *
* Functional Consultant : 王莹
* Description : 材料提成比率查询报表
*----------------------------------------------------------------------*
* Modification Log *
*Date Programmer Corr. # Description *
*2010.08.04 huoqi v1.1 先判断材料ID的商品性质为免费材料
* 还是收费材料,免费材料则材料提成比
* 率为0,收费材料则再继续执行原查找
* ZT0116\ZT0117\ZT0118的逻辑。
*----------------------------------------------------------------------*
REPORT zcfmr173.
TABLES: zt0116.
TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
g_repid TYPE sy-repid,
gs_layout TYPE slis_layout_alv.
DATA: lt_process_type TYPE ztb_tran_check
,ls_process_type TYPE ztr_tran_check
.
RANGES: r_process_type FOR crmd_orderadm_h-process_type.
RANGES: is_seorg FOR crmt_report_orgman-service_org.
*根据服务组织找相应的OTJID
DATA: BEGIN OF i_hrp1000 OCCURS 0,
otjid LIKE hrp1000-otjid,
stext LIKE hrp1000-stext,
service_org TYPE crmt_service_org,
END OF i_hrp1000.
*
DATA: BEGIN OF it_zzclsp OCCURS 0,
product_id LIKE comm_product-product_id,
product_guid LIKE comm_product-product_guid,
category_id LIKE comm_prprdcatr-category_id,
category_guid LIKE comm_prprdcatr-category_guid,
END OF it_zzclsp.
**
DATA: BEGIN OF it_comm_prshtext OCCURS 0,
product_guid LIKE comm_prshtext-product_guid,
short_text LIKE comm_prshtext-short_text,
END OF it_comm_prshtext.
*
DATA: BEGIN OF it_comm_categoryt OCCURS 0,
category_guid LIKE comm_categoryt-category_guid,
category_text LIKE comm_categoryt-category_text,
END OF it_comm_categoryt.
DATA: BEGIN OF it_category_guid OCCURS 0,
category_id LIKE comm_category-category_id,
category_guid LIKE comm_category-category_guid,
END OF it_category_guid.
DATA: BEGIN OF it_process_type OCCURS 0,
process_type LIKE ztr_tran_check-process_type,
p_description_20 LIKE ztr_tran_check-p_description_20,
END OF it_process_type.
DATA: BEGIN OF it_out OCCURS 0,
service_org LIKE zt0134-zsales_org,
service_org_desc LIKE hrp1000-stext,
zzclsp LIKE zt0134-zzclspid,
zzclsp_desc LIKE comm_prshtext-short_text,
zzclspz LIKE zt0116-zzclspz,
zzclspz_desc LIKE comm_categoryt-category_text,
zzfwddlx LIKE zt0116-zzfwddlx,
zzfwddlx_desc LIKE crmc_proc_type_t-p_description_20,
zzdqspz LIKE zt0116-zzdqspz,
zzdqspz_desc LIKE comm_categoryt-category_text,
zzspxz(10),
zztcbl LIKE zt0116-zztcbl,
END OF it_out.
DATA: BEGIN OF it_zt0134 OCCURS 0,
zsales_org LIKE zt0134-zsales_org,
zzclspid LIKE zt0134-zzclspid,
END OF it_zt0134.
DATA: BEGIN OF it_zt0135 OCCURS 0,
zsales_org LIKE zt0135-zsales_org,
zzclspz LIKE zt0135-zzclspz,
END OF it_zt0135.
DATA: it_out1 LIKE it_out OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_seorg FOR zt0116-service_org OBLIGATORY, "服务组织
s_zzclsp FOR zt0116-zzclsp OBLIGATORY, "材料商品ID
s_type FOR zt0116-zzfwddlx, "服务订单类型
s_dqspz FOR zt0116-zzdqspz MODIF ID md1. "电器商品组
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: r1 RADIOBUTTON GROUP ran1 DEFAULT 'X' USER-COMMAND rb1,
r2 RADIOBUTTON GROUP ran1,
r3 RADIOBUTTON GROUP ran1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN COMMENT /2(83) com1
VISIBLE LENGTH 120.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_type-low.
PERFORM sub_pro_type_select USING s_type-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_type-high.
PERFORM sub_pro_type_select USING s_type-low.
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_pbo.
AT SELECTION-SCREEN.
PERFORM frm_authority_check.
PERFORM frm_input_check.
CHECK is_seorg[] IS NOT INITIAL.
START-OF-SELECTION.
PERFORM frm_data_process.
PERFORM frm_data_output.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form SUB_PRO_TYPE_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_S_TYPE_LOW text
*----------------------------------------------------------------------*
FORM sub_pro_type_select USING p_s_type_low.
DATA : f4help LIKE TABLE OF ddshretval WITH HEADER LINE.
DATA: BEGIN OF list OCCURS 0,
process_type LIKE ztr_tran_check-process_type,
p_description_20 LIKE ztr_tran_check-p_description_20,
END OF list.
*带搜索帮助,服务订单类型的值:ZS01-ZS12、ZGS1-ZGS3
r_process_type-sign = 'I'.
r_process_type-option = 'BT'.
r_process_type-low = 'ZS01'.
r_process_type-high = 'ZS12'.
APPEND r_process_type.
CLEAR r_process_type.
r_process_type-sign = 'I'.
r_process_type-option = 'BT'.
r_process_type-low = 'ZGS1'.
r_process_type-high = 'ZGS3'.
APPEND r_process_type.
CLEAR r_process_type.
SELECT process_type p_description_20
INTO CORRESPONDING FIELDS OF TABLE lt_process_type
FROM crmc_proc_type_t
WHERE langu = sy-langu
AND process_type IN r_process_type.
LOOP AT lt_process_type INTO ls_process_type.
MOVE-CORRESPONDING ls_process_type TO list.
APPEND list.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PROCESS_TYPE'
dynpprog = sy-repid
dynpnr = sy-dynnr
stepl = '1'
window_title = '订单类型查询'
value_org = 'S'
TABLES
value_tab = list
return_tab = f4help.
p_s_type_low = f4help-fieldval.
ENDFORM. " SUB_PRO_TYPE_SELECT
*&---------------------------------------------------------------------*
*& Form FRM_PBO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_pbo .
CONCATENATE '注:服务组织、材料商品ID必填,材料提成比率优先取提成比率1,'
'提成比率1无数据再取提成比率2,'
'提成比率2也无数据再取提成比率3' INTO com1.
IF r3 = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'MD1'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " FRM_PBO
*&---------------------------------------------------------------------*
*& Form FRM_AUTHORITY_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_authority_check .
*权限控制到服务组织
*ZSN_ORG001
REFRESH is_seorg.
SELECT * INTO CORRESPONDING FIELDS OF TABLE i_hrp1000
FROM hrp1000
WHERE hrp1000~otjid IN s_seorg
AND hrp1000~plvar = '01'
AND hrp1000~otype = 'O'
AND hrp1000~begda < sy-datum
AND hrp1000~endda > sy-datum.
IF i_hrp1000[] IS INITIAL.
MESSAGE e398(00) WITH '没有找到合适的组织数据!'.
ELSE.
LOOP AT i_hrp1000.
is_seorg-sign = 'I'.
is_seorg-option = 'EQ'.
is_seorg-low = i_hrp1000-otjid.
APPEND is_seorg.
CLEAR is_seorg.
ENDLOOP.
LOOP AT is_seorg.
* 需控制到服务组织。只可查看本服务组织的下的单据。权限对象:ZSN_ORG001
AUTHORITY-CHECK OBJECT 'ZSN_ORG001'
ID 'SALES_ORG' FIELD is_seorg-low.
IF sy-subrc <> 0.
DELETE is_seorg[].
MESSAGE i398(00) WITH '您没有操作组织' is_seorg-low '的权限!'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " FRM_AUTHORITY_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_INPUT_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_input_check .
FIND '*' IN TABLE s_zzclsp.
IF sy-subrc = 0.
MESSAGE e398(00) WITH '材料商品ID不允许输入*'.
EXIT.
ENDIF.
ENDFORM. " FRM_INPUT_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_DATA_PROCESS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_data_process .
*1、若勾选提成比率1,点执行,则根据查询条件中录入的:服务组织、材料商品ID、
*服务订单类型、电器商品组筛选条件,查询ZT0116表,并显示字段(见下)。
*若查询条件中服务订单类型、电器商品组字段不输入,则显示ZT0116表中所有的服务订单类型和电器商品组。
*2、若勾选提成比率2,点执行,则根据查询条件录入的服务组织、材料商品ID、
*服务订单类型、电器商品组筛选条件,查询ZT0117表,并显示字段(见下)。其中,
*通过查询条件中录入的材料商品ID先查找该ID对应的材料商品组,
*再根据该材料商品组查找ZT0117表。若查询条件中服务订单类型、电器商品组字段不输入,
*则显示ZT0117表中所有的服务订单类型和电器商品组。
*3.若勾选提成比率3,点执行,则根据查询条件录入的服务组织、材料商品ID、
*服务订单类型筛选条件,查询ZT0118表,其中,通过查询条件中录入的材料商品ID
*先查找该ID对应的材料商品组,再根据该材料商品组查找ZT0118表。
*其中查询条件中的电器商品组不作为查询筛选字段。
*根据输入的材料商品ID来找其对应的材料商品组
SELECT a~product_id a~product_guid b~category_id b~category_guid
INTO CORRESPONDING FIELDS OF TABLE it_zzclsp
FROM comm_product AS a INNER JOIN
comm_prprdcatr AS b
ON a~product_guid = b~product_guid INNER JOIN
comm_hierarchy AS c
ON b~hierarchy_guid = c~hierarchy_guid
WHERE a~product_id IN s_zzclsp
AND c~hierarchy_id = 'R3MATCLASS'.
*
CHECK it_zzclsp[] IS NOT INITIAL.
IF r1 = 'X'.
CLEAR: it_out.REFRESH: it_out.
SELECT service_org zzclsp zzclspz zzfwddlx zzdqspz zztcbl
FROM zt0116
INTO CORRESPONDING FIELDS OF TABLE it_out
WHERE service_org IN is_seorg
AND zzfwddlx IN s_type
AND zzfwddlx IN r_process_type
AND zzdqspz IN s_dqspz
AND zzclsp IN s_zzclsp.
ELSEIF r2 = 'X'.
SELECT service_org zzclspz zzfwddlx zzdqspz zztcbl
FROM zt0117
INTO CORRESPONDING FIELDS OF TABLE it_out
FOR ALL ENTRIES IN it_zzclsp
WHERE service_org IN is_seorg
AND zzfwddlx IN s_type
AND zzfwddlx IN r_process_type
AND zzdqspz IN s_dqspz
AND zzclspz = it_zzclsp-category_id.
ELSEIF r3 = 'X'.
SELECT service_org zzclspz zzfwddlx zztcbl
FROM zt0118
INTO CORRESPONDING FIELDS OF TABLE it_out
FOR ALL ENTRIES IN it_zzclsp
WHERE service_org IN is_seorg
AND zzfwddlx IN s_type
AND zzfwddlx IN r_process_type
AND zzclspz = it_zzclsp-category_id.
ENDIF.
* CHECK it_out[] IS NOT INITIAL.
IF it_out[] IS NOT INITIAL.
SELECT process_type p_description_20
INTO CORRESPONDING FIELDS OF TABLE it_process_type
FROM crmc_proc_type_t
WHERE langu = sy-langu
AND process_type IN r_process_type.
SELECT product_guid short_text
FROM comm_prshtext
INTO TABLE it_comm_prshtext
FOR ALL ENTRIES IN it_zzclsp
WHERE product_guid = it_zzclsp-product_guid.
SELECT category_guid category_text
FROM comm_categoryt
INTO TABLE it_comm_categoryt
FOR ALL ENTRIES IN it_zzclsp
WHERE category_guid = it_zzclsp-category_guid.
IF r3 <> 'X'.
SELECT category_id category_guid
FROM comm_category
INTO TABLE it_category_guid
FOR ALL ENTRIES IN it_out
WHERE category_id = it_out-zzdqspz.
IF it_category_guid[] IS NOT INITIAL.
SELECT category_guid category_text
FROM comm_categoryt
APPENDING TABLE it_comm_categoryt
FOR ALL ENTRIES IN it_category_guid
WHERE category_guid = it_category_guid-category_guid.
ENDIF.
ENDIF.
ENDIF.
SORT i_hrp1000 BY otjid.
SORT it_zzclsp BY product_id.
SORT it_comm_prshtext BY product_guid.
SORT it_zzclsp BY category_id.
SORT it_comm_categoryt BY category_guid.
SORT it_category_guid BY category_id.
SORT it_process_type BY process_type.
LOOP AT it_out.
READ TABLE i_hrp1000 WITH KEY otjid = it_out-service_org BINARY SEARCH.
IF sy-subrc = 0.
it_out-service_org_desc = i_hrp1000-stext.
ENDIF.
IF r1 = 'X'.
READ TABLE it_zzclsp WITH KEY product_id = it_out-zzclsp BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE it_comm_prshtext WITH KEY product_guid = it_zzclsp-product_guid BINARY SEARCH.
IF sy-subrc = 0.
it_out-zzclsp_desc = it_comm_prshtext-short_text.
ENDIF.
ENDIF.
ENDIF.
READ TABLE it_zzclsp WITH KEY category_id = it_out-zzclspz BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE it_comm_categoryt WITH KEY category_guid = it_zzclsp-category_guid BINARY SEARCH.
IF sy-subrc = 0.
it_out-zzclspz_desc = it_comm_categoryt-category_text.
ENDIF.
ENDIF.
IF r3 <> 'X'.
READ TABLE it_category_guid WITH KEY category_id = it_out-zzdqspz BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE it_comm_categoryt WITH KEY category_guid = it_category_guid-category_guid BINARY SEARCH.
IF sy-subrc = 0.
it_out-zzdqspz_desc = it_comm_categoryt-category_text.
ENDIF.
ENDIF.
ENDIF.
READ TABLE it_process_type WITH KEY process_type = it_out-zzfwddlx BINARY SEARCH.
IF sy-subrc = 0.
it_out-zzfwddlx_desc = it_process_type-p_description_20.
ENDIF.
MODIFY it_out.
展开阅读全文