效果
配置树
"最外层框架添加按钮
“增加BLOCK
METHOD eh_onzrefresh.
* Added by wizard: Handler for event 'ZREFRESH'*---------------------------初始化----------------------------*
DATA : lr_header TYPE REF TO cl_crm_bol_entity ,
lr_btheaderpartnerset TYPE REF TO cl_crm_bol_entity ,
lr_btpartner_pft_0006_main TYPE REF TO cl_crm_bol_entity ,
lr_col TYPE REF TO if_bol_entity_col , "增强关系的对象集
lr_entity01 TYPE REF TO cl_crm_bol_entity ,
it_kcmx TYPE STANDARD TABLE OF ztab0000av_bol_attr ,
it_kcmx_new TYPE STANDARD TABLE OF ztab0000av_bol_attr ,
wa_kcmx_new TYPE ztab0000av_bol_attr , "库存明细 ZEXT_BOL_RELAT00000U
wa_kcmx TYPE ztab0000av_bol_attr , "库存明细 ZEXT_BOL_RELAT00000U
wa_kchj TYPE ztab0000bf_bol_attr , "库存合计 ZEXT_BOL_RELAT00000Y
rv_result TYPE REF TO cl_crm_bol_entity ,
lw_es_attributes TYPE crmst_adminh_btil ,
lw_es_attributes_brfore TYPE crmst_adminh_btil ,
lw_crmst_partner_btil TYPE crmst_partner_btil ,
lr_property_acces TYPE REF TO if_bol_bo_property_access .
DATA : BEGIN OF lw_zsd021 ,
matnr TYPE matnr ,
lfimg TYPE lfimg .
DATA END OF lw_zsd021 .
DATA lt_zsd021 LIKE STANDARD TABLE OF lw_zsd021 .
DATA :
lr_kcmx_new TYPE REF TO if_bol_entity_col ,
lr_core TYPE REF TO cl_crm_bol_core , "CRM核心类
lr_transaction TYPE REF TO if_bol_transaction_context ,
lv_lines TYPE sytabix .
lr_core = cl_crm_bol_core =>get_instance ( ) .
lr_core ->start_up ( 'BT' ) .
lr_header ?= me ->typed_context ->btadminh ->collection_wrapper ->get_current ( ) .
*-----------------------------更新月份 START--------------------------------*
"月份取开始日期前6位
DATA lr_btheaderdatesset TYPE REF TO cl_crm_bol_entity .
DATA lr_btdatesallcust_sales TYPE REF TO cl_crm_bol_entity .
DATA lw_crmst_date_btil TYPE crmst_date_btil .
CALL METHOD lr_header ->get_properties "去增强字段zzssyf
IMPORTING
es_attributes = lw_es_attributes .
IF lw_es_attributes -zzssyf IS INITIAL .
CALL METHOD lr_header ->get_related_entity "取开始日期 位置:BTDatesAllCust_SALES <- BTHeaderDatesSet <- BTOrderHeader
EXPORTING
iv_relation_name = 'BTHeaderDatesSet'
RECEIVING
rv_result = lr_btheaderdatesset .
CALL METHOD lr_btheaderdatesset ->get_related_entity
EXPORTING
iv_relation_name = 'BTDatesAllCust_SALES'
RECEIVING
rv_result = lr_btdatesallcust_sales .
lr_btdatesallcust_sales ->get_properties ( IMPORTING es_attributes = lw_crmst_date_btil ) .
lw_es_attributes -zzssyf = lw_crmst_date_btil -fromdate+0 ( 6 ) .
CALL METHOD lr_header ->set_properties
EXPORTING
is_attributes = lw_es_attributes .
ENDIF .
*-----------------------------更新月份 END--------------------------------*
CALL METHOD lr_header ->get_related_entities "判断当前库存明细是否有值 ZEXT_BOL_RELAT00000U <- BTOrderHeader
EXPORTING
iv_relation_name = 'ZEXT_BOL_RELAT00000U'
RECEIVING
rv_result = lr_kcmx_new .
CALL METHOD lr_kcmx_new -> size
RECEIVING
rv_result = lv_lines .
IF lv_lines = 0 . "若 库存明细BLOCK 为空,则初始化BLOCK ,否则刷新 金额 和 库存合计表
*-----------------------------库存明细 START--------------------------------*
TRY .
CALL METHOD lr_header ->get_related_entity "取客户号partner_no BTPartner_PFT_0006_MAIN <- BTHeaderPartnerSet <- BTOrderHeader
EXPORTING
iv_relation_name = 'BTHeaderPartnerSet'
RECEIVING
rv_result = lr_btheaderpartnerset .
CATCH cx_crm_genil_model_error .
ENDTRY .
TRY .
CALL METHOD lr_btheaderpartnerset ->get_related_entity
EXPORTING
iv_relation_name = 'BTPartner_PFT_0006_MAIN'
RECEIVING
rv_result = lr_btpartner_pft_0006_main .
CATCH cx_crm_genil_model_error .
ENDTRY .
CALL METHOD lr_btpartner_pft_0006_main ->get_properties
IMPORTING
es_attributes = lw_crmst_partner_btil .
"ERP取发货数量
DATA : lt_siteselect TYPE TABLE OF siteselect INITIAL SIZE 0 ,
ls_siteselect TYPE siteselect .
CALL FUNCTION 'SMOF0_READ_SITESELECT' "取配置的目标系统
TABLES
to_siteselect = lt_siteselect .
READ TABLE lt_siteselect INTO ls_siteselect
WITH KEY sitetypeid = cl_smw1_siteprovider =>c_sitetype_r3oltp .
IF sy -subrc = 0 .
CALL FUNCTION 'Z_CRM_GET_LIKP'
DESTINATION ls_siteselect -rfcdest
EXPORTING
kunnr = lw_crmst_partner_btil -partner_no
zyf = lw_es_attributes -zzssyf
TABLES
zsd021 = lt_zsd021 .
ENDIF .
*-----------------------------库存明细 END--------------------------------*
*-----------------------------初期库存 START--------------------------------*
DATA :
lv_dyn_query TYPE REF TO cl_crm_bol_dquery_service ,
lr_root TYPE REF TO cl_crm_bol_entity , "SR根对象
lr_partner TYPE REF TO cl_crm_bol_entity .
DATA :lv_result TYPE REF TO if_bol_entity_col ,
lr_entity TYPE REF TO cl_crm_bol_entity ,
wa_result TYPE crmst_query_r_opp_btil .
DATA : lt_parameters TYPE crmt_name_value_pair_tab ,
ls_parameters TYPE crmt_name_value_pair .
lv_dyn_query = cl_crm_bol_dquery_service =>get_instance ( 'BTQLeadDoc' ) .
DATA lv_string TYPE string .
lv_dyn_query ->insert_selection_param ( iv_index = '1'
iv_attr_name = 'TEMPLATE_TYPE'
iv_sign = 'I'
iv_option = 'EQ'
iv_low = 'D' ) . "设置取值模板
DATA lv_currdate TYPE sy -datum .
DATA lv_newdate TYPE sy -datum .
lv_currdate+0 ( 6 ) = lw_es_attributes -zzssyf . "取上个月单据的库存明细
lv_currdate+6 ( 2 ) = '01' .
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
EXPORTING
currdate = lv_currdate
backmonths = 1
IMPORTING
newdate = lv_newdate .
lv_string = lw_crmst_partner_btil -partner_no .
CALL METHOD lv_dyn_query ->add_selection_param "设置筛选条件
EXPORTING
iv_attr_name = 'BU_PARTNER'
iv_sign = 'I'
iv_option = 'EQ'
iv_low = lv_string
* iv_high =
.
"月份设置为前一个月
lv_string = lv_newdate+0 ( 6 ) .
CALL METHOD lv_dyn_query ->add_selection_param
EXPORTING
iv_attr_name = 'ZZSSYF'
iv_sign = 'I'
iv_option = 'EQ'
iv_low = lv_string
* iv_high =
.
"状态设置为已过帐
CALL METHOD lv_dyn_query ->add_selection_param
EXPORTING
iv_attr_name = 'STATUS_AREA'
iv_sign = 'I'
iv_option = 'EQ'
iv_low = 'E0003ZCRMLEAD'
* iv_high =
.
DATA :
lr_btadvslea TYPE REF TO cl_crm_bol_entity ,
lr_btorderheader TYPE REF TO cl_crm_bol_entity ,
lr_kcmx TYPE REF TO if_bol_entity_col .
lv_result = lv_dyn_query ->get_result ( ) .
lr_entity ?= lv_result ->get_first ( ) .
IF lr_entity IS BOUND .
TRY .
CALL METHOD lr_entity ->get_related_entity "取上月库存
EXPORTING
iv_relation_name = 'BTADVSLea'
RECEIVING
rv_result = lr_btadvslea .
CALL METHOD lr_btadvslea ->get_related_entity
EXPORTING
iv_relation_name = 'BTOrderHeader'
RECEIVING
rv_result = lr_btorderheader .
CALL METHOD lr_btorderheader ->get_related_entities
EXPORTING
iv_relation_name = 'ZEXT_BOL_RELAT00000U'
RECEIVING
rv_result = lr_kcmx .
CALL METHOD lr_kcmx ->get_first
RECEIVING
rv_result = lr_property_acces .
WHILE lr_property_acces IS BOUND .
CALL METHOD lr_property_acces ->get_properties
IMPORTING
es_attributes = wa_kcmx .
IF wa_kcmx -zzqmkcsl > 0 .
APPEND wa_kcmx TO it_kcmx .
ENDIF .
CALL METHOD lr_kcmx ->get_next
RECEIVING
rv_result = lr_property_acces .
ENDWHILE .
CATCH cx_crm_genil_model_error .
ENDTRY .
ENDIF .
*-----------------------------初期库存 END--------------------------------*
*-----------------------------整合数据 START--------------------------------*
LOOP AT it_kcmx INTO wa_kcmx .
wa_kcmx_new -zzcpbh = wa_kcmx -zzcpbh .
wa_kcmx_new -zzcqkcsl = wa_kcmx -zzqmkcsl .
APPEND wa_kcmx_new TO it_kcmx_new .
ENDLOOP .
LOOP AT lt_zsd021 INTO lw_zsd021 .
READ TABLE it_kcmx_new INTO wa_kcmx_new WITH KEY zzcpbh = lw_zsd021 -matnr .
IF sy -subrc = 0 .
wa_kcmx_new -zzbyfhsl = lw_zsd021 -lfimg .
MODIFY it_kcmx_new FROM wa_kcmx_new INDEX sy -tabix .
ELSE .
wa_kcmx_new -zzcpbh = lw_zsd021 -matnr .
wa_kcmx_new -zzbyfhsl = lw_zsd021 -lfimg .
APPEND wa_kcmx_new TO it_kcmx_new .
ENDIF .
CLEAR wa_kcmx_new .
ENDLOOP .
LOOP AT it_kcmx_new INTO wa_kcmx_new .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_kcmx_new -zzcpbh
IMPORTING
output = wa_kcmx_new -zzcpbh .
MODIFY it_kcmx_new FROM wa_kcmx_new .
ENDLOOP .
*-----------------------------整合数据 END----------------------------------*
*-----------------------------单价 START--------------------------------*
*产品编号=COMM_PRODUCT-PRODUCT_ID,
*COMM_PRODUCT-PRODUCT_GUID=CNCCRMPRCUS505-PRODUCT_GUID,
*销售组织=CNCCRMPRCUS505-SALES_ORG,
*分销渠道=CNCCRMPRCUS505-DIS_CHANNEL,
*销售办事处=CNCCRMPRCUS505-SALES_OFFICE
*CNCCRMPRCUS505-RELEASE_STATUS(发布状态) ='', CNCCRMPRCUS505-KSCHL(条件类型)=Z000,
*盘点日期在 CNCCRMPRCUS505-TIMESTAMP_FROM有效期自(截止前8位)和CNCCRMPRCUS505-TIMESTAMP_TO有效期自(截止前8位)之间,CNCCRMPRCUS505-KBETR金额
*添加修改:20160613
*CNCCRMPRCUS505-PRODUCT_GUID=COMM_PR_UNIT-PRODUCT_GUID,
*CNCCRMPRCUS505-KMEIN=COMM_PR_UNIT-UNIT;
*基本单价=【CNCCRMPRCUS505-KBETR/CNCCRMPRCUS505-KPEIN】*【COMM_PR_UNIT-NUMERATOR/COMM_PR_UNIT-DENOMINATOR】;
DATA lw_organ TYPE crmst_orgset_btil .
DATA lr_orgman TYPE REF TO cl_crm_bol_entity .
TRY .
CALL METHOD lr_header ->get_related_entity "取组织BLOCK内容
EXPORTING
iv_relation_name = 'BTHeaderOrgmanSet'
RECEIVING
rv_result = lr_orgman .
CATCH cx_crm_genil_model_error .
ENDTRY .
CALL METHOD lr_orgman ->get_properties
IMPORTING
es_attributes = lw_organ .
IF it_kcmx_new IS NOT INITIAL .
DATA lt_comm_product TYPE STANDARD TABLE OF comm_product .
DATA lw_comm_product TYPE comm_product .
SELECT * FROM comm_product INTO CORRESPONDING FIELDS OF TABLE lt_comm_product
FOR ALL ENTRIES IN it_kcmx_new
WHERE product_id = it_kcmx_new -zzcpbh .
DATA lt_cnccrmprcus505 TYPE STANDARD TABLE OF cnccrmprcus505 .
DATA lw_cnccrmprcus505 TYPE cnccrmprcus505 .
DATA lt_comm_pr_unit TYPE STANDARD TABLE OF comm_pr_unit .
DATA lw_comm_pr_unit TYPE comm_pr_unit .
DATA lt_t006a TYPE STANDARD TABLE OF t006a .
DATA lw_t006a TYPE t006a .
IF lt_comm_product IS NOT INITIAL .
SELECT * FROM cnccrmprcus505 INTO CORRESPONDING FIELDS OF TABLE lt_cnccrmprcus505
FOR ALL ENTRIES IN lt_comm_product
WHERE sales_org = lw_organ -sales_org
AND dis_channel = lw_organ -dis_channel
AND sales_office = lw_organ -sales_office
AND product = lt_comm_product -product_guid
AND release_stat = ''
AND kschl = 'Z000' .
DATA lt_comm_prshtext TYPE STANDARD TABLE OF comm_prshtext .
DATA lw_comm_prshtext TYPE comm_prshtext .
SELECT * FROM comm_prshtext INTO CORRESPONDING FIELDS OF TABLE lt_comm_prshtext
FOR ALL ENTRIES IN lt_comm_product
WHERE product_guid = lt_comm_product -product_guid
AND langu = sy -langu .
SELECT * FROM comm_pr_unit INTO CORRESPONDING FIELDS OF TABLE lt_comm_pr_unit
FOR ALL ENTRIES IN lt_comm_product
WHERE product_guid = lt_comm_product -product_guid
AND is_base_unit = 'X' .
IF lt_comm_pr_unit IS NOT INITIAL .
SELECT * FROM t006a INTO CORRESPONDING FIELDS OF TABLE lt_t006a
FOR ALL ENTRIES IN lt_comm_pr_unit
WHERE msehi = lt_comm_pr_unit - unit .
ENDIF .
ENDIF .
ENDIF .
*-----------------------------单价 END--------------------------------*
ELSE . "刷新 金额 和 库存合计表
CALL METHOD lr_kcmx_new ->get_first
RECEIVING
rv_result = lr_property_acces .
WHILE lr_property_acces IS BOUND .
CALL METHOD lr_property_acces ->get_properties
IMPORTING
es_attributes = wa_kcmx_new .
APPEND wa_kcmx_new TO it_kcmx_new .
CALL METHOD lr_kcmx_new ->get_next
RECEIVING
rv_result = lr_property_acces .
ENDWHILE .
ENDIF .
*-----------------------------整合数据 START--------------------------------*
""刷新 金额 和 库存合计表
CLEAR wa_kchj .
LOOP AT it_kcmx_new INTO wa_kcmx_new .
wa_kcmx_new -zzxh = sy -tabix .
READ TABLE lt_comm_product INTO lw_comm_product WITH KEY product_id = wa_kcmx_new -zzcpbh .
IF sy -subrc = 0 .
READ TABLE lt_comm_prshtext INTO lw_comm_prshtext WITH KEY product_guid = lw_comm_product -product_guid .
IF sy -subrc = 0 .
wa_kcmx_new -zzcpmc = lw_comm_prshtext -short_text .
ENDIF .
READ TABLE lt_cnccrmprcus505 INTO lw_cnccrmprcus505 WITH KEY product = lw_comm_product -product_guid .
IF sy -subrc = 0 .
READ TABLE lt_comm_pr_unit INTO lw_comm_pr_unit WITH KEY product_guid = lw_comm_product -product_guid .
IF sy -subrc = 0 .
*添加修改:20160613
*CNCCRMPRCUS505-PRODUCT_GUID=COMM_PR_UNIT-PRODUCT_GUID,
*CNCCRMPRCUS505-KMEIN=COMM_PR_UNIT-UNIT;
*基本单价=【CNCCRMPRCUS505-KBETR/CNCCRMPRCUS505-KPEIN】*【COMM_PR_UNIT-NUMERATOR/COMM_PR_UNIT-DENOMINATOR】;
wa_kcmx_new -zzdj = ( lw_cnccrmprcus505 -kbetr / lw_cnccrmprcus505 -kpein ) * ( lw_comm_pr_unit -numerator / lw_comm_pr_unit -denominator ) .
READ TABLE lt_t006a INTO lw_t006a WITH KEY msehi = lw_comm_pr_unit - unit .
IF sy -subrc = 0 .
wa_kcmx_new -zzdw = lw_t006a -msehl .
ENDIF .
ENDIF .
ENDIF .
ENDIF .
wa_kcmx_new -zzbyfxl = wa_kcmx_new -zzcqkcsl - wa_kcmx_new -zzqmkcsl + wa_kcmx_new -zzbyfhsl .
wa_kcmx_new -zzcqkcje = wa_kcmx_new -zzdj * wa_kcmx_new -zzcqkcsl .
wa_kcmx_new -zzbyfhje = wa_kcmx_new -zzdj * wa_kcmx_new -zzbyfhsl .
wa_kcmx_new -zzqmkcje = wa_kcmx_new -zzdj * wa_kcmx_new -zzqmkcsl .
wa_kcmx_new -zzbyfxje = wa_kcmx_new -zzdj * wa_kcmx_new -zzbyfxl .
wa_kchj -zzcqkcslhj = wa_kchj -zzcqkcslhj + wa_kcmx_new -zzcqkcsl .
wa_kchj -zzcqkcjehj = wa_kchj -zzcqkcjehj + wa_kcmx_new -zzcqkcje .
wa_kchj -zzbyfhslhj = wa_kchj -zzbyfhslhj + wa_kcmx_new -zzbyfhsl .
wa_kchj -zzbyfhjehj = wa_kchj -zzbyfhjehj + wa_kcmx_new -zzbyfhje .
wa_kchj -zzqmkcslhj = wa_kchj -zzqmkcslhj + wa_kcmx_new -zzqmkcsl .
wa_kchj -zzqmkujehj = wa_kchj -zzqmkujehj + wa_kcmx_new -zzqmkcje .
wa_kchj -zzbyfxslhj = wa_kchj -zzbyfxslhj + wa_kcmx_new -zzbyfxl .
wa_kchj -zzbyfxjehj = wa_kchj -zzbyfxjehj + wa_kcmx_new -zzbyfxje .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_kcmx_new -zzcpbh
IMPORTING
output = wa_kcmx_new -zzcpbh .
MODIFY it_kcmx_new FROM wa_kcmx_new .
ENDLOOP .
"整合后数据为 it_kcmx_new wa_kchj
*-----------------------------整合数据 END----------------------------------*
*-----------------------------写入数据 START--------------------------------*
DATA lv_entity_kcmx TYPE REF TO cl_crm_bol_entity .
DATA lv_entity_kchj TYPE REF TO cl_crm_bol_entity .
DATA lr_kchj TYPE REF TO if_bol_entity_col .
CALL METHOD lr_header ->get_related_entities "在抬头组件中删除明细BLOCK数据
EXPORTING
iv_relation_name = 'ZEXT_BOL_RELAT00000U'
RECEIVING
rv_result = lr_kcmx_new .
CALL METHOD lr_kcmx_new ->get_first
RECEIVING
rv_result = lv_entity_kcmx .
WHILE lv_entity_kcmx IS BOUND .
lv_entity_kcmx -> delete ( ) .
CALL METHOD lr_kcmx_new ->get_next
RECEIVING
rv_result = lv_entity_kcmx .
ENDWHILE .
DELETE it_kcmx_new WHERE zzcpbh IS INITIAL .
LOOP AT it_kcmx_new INTO wa_kcmx_new .
CALL METHOD lr_header ->create_related_entity "写入明细
EXPORTING
iv_relation_name = 'ZEXT_BOL_RELAT00000U'
RECEIVING
rv_result = lv_entity_kcmx .
CALL METHOD lv_entity_kcmx ->set_properties
EXPORTING
is_attributes = wa_kcmx_new .
ENDLOOP .
CALL METHOD lr_header ->get_related_entity "写入合计
EXPORTING
iv_relation_name = 'ZEXT_BOL_RELAT00000Y'
RECEIVING
rv_result = lv_entity_kchj .
CALL METHOD lv_entity_kchj ->set_properties
EXPORTING
is_attributes = wa_kchj .
*-----------------------------写入数据 END----------------------------------*
"清空变量
CLEAR lv_entity_kcmx .
CLEAR lv_entity_kchj .
CLEAR lr_kchj .
CLEAR it_kcmx_new .
CLEAR it_kcmx .
CLEAR lt_zsd021 .
ENDMETHOD .