日了,好多代码。。。。COPY别人的,懒得改了

*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF16 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form find_kschl_kotabnr_pdet
*&---------------------------------------------------------------------*
* Determine the condition type and condition table
*----------------------------------------------------------------------*
FORM find_kschl_kotabnr_pdet
TABLES pi_t_keyfig STRUCTURE crm_mktpl_cond_if_keyfig_pdet
pe_t_keyfigx STRUCTURE crm_mktpl_cond_if_keyfigx_pdet
USING pi_cgen_type TYPE crm_mktpl_cgen_type
pi_application TYPE cgpl_application_type
pi_crm_mktpl_guid TYPE crm_mktpl_guid
CHANGING pe_subrc TYPE sy-subrc. DATA l_t_pdet TYPE TABLE OF crmc_mktpl_pdet.
DATA ls_pdet LIKE LINE OF l_t_pdet.
DATA lr_mktproject TYPE REF TO cl_crm_mktpl_ol_mktproject.
DATA lv_planning_mode TYPE crm_mktpl_planning_mode. lr_mktproject = cl_crm_mktpl_ol_mktprojects=>get_mktproject( iv_guid = pi_crm_mktpl_guid ).
IF lr_mktproject is BOUND.
lv_planning_mode = lr_mktproject->get_planning_mode( ).
ENDIF. IF lv_planning_mode <> cl_crm_mktgs_constants=>planning_mode_ipp.
* ------------------ read customizing settings ------------------------*
* read customizing settings for condition type and condition table per
* condition generation type
cl_crm_mktgs_cond_img_access=>read_price_determination(
EXPORTING iv_application = pi_application
iv_cgen_type = pi_cgen_type
IMPORTING et_price_determination = l_t_pdet ).
ELSE.
* ------------------ read customizing for in memory -------------------*
* Dynamic call to a method created in the Add-On system
* TODO_MKT_IMP_EHP2: change dynamic call for a direct call
CALL METHOD ('CL_CRM_MKTPL_IMP_IMG_ACCESS')=>('READ_PRICE_DETERMINATION')
EXPORTING
iv_application = pi_application
iv_cgen_type = pi_cgen_type
IMPORTING
et_price_determination = l_t_pdet.
ENDIF. SORT l_t_pdet BY key_figure. * -------------- find condition types and condition tables ------------*
LOOP AT pi_t_keyfig.
READ TABLE l_t_pdet
WITH KEY key_figure = pi_t_keyfig-key_figure
INTO ls_pdet
BINARY SEARCH.
IF sy-subrc EQ .
* build up PE_T_KEYFIGX
pe_t_keyfigx = pi_t_keyfig.
pe_t_keyfigx-kappl = ls_pdet-kappl.
pe_t_keyfigx-kvewe = ls_pdet-kvewe.
pe_t_keyfigx-kschl = ls_pdet-kschl.
pe_t_keyfigx-kotabnr = ls_pdet-kotabnr.
APPEND pe_t_keyfigx.
ENDIF.
ENDLOOP. * Check: entries in KEYFIGX?
IF pe_t_keyfigx[] IS INITIAL.
pe_subrc = . " -> nothing to do
ENDIF. ENDFORM. " find_kschl_kotabnr_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF17 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form read_cond_records_pdet
*&---------------------------------------------------------------------*
* Read the condition records for price determination
*----------------------------------------------------------------------*
FORM read_cond_records_pdet
TABLES pi_t_keyfigx STRUCTURE crm_mktpl_cond_if_keyfigx_pdet
pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
pe_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
px_t_return STRUCTURE bapiret2
USING pi_crm_mktpl_guid TYPE crm_mktpl_guid
pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. DATA: l_subrc TYPE sy-subrc,
l_hlog TYPE balloghndl,
l_t_cond_session TYPE TABLE OF crm_mktpl_cond_if_condsession
WITH HEADER LINE,
l_t_condvalues TYPE TABLE OF crm_mktpl_cond_if_condvalues. * ---- initialize condition session
PERFORM init_cond_mnt_pdet TABLES l_t_cond_session
pi_t_keyfigx
px_t_return
CHANGING l_hlog
l_subrc.
IF NOT l_subrc IS INITIAL.
pe_subrc = l_subrc.
EXIT.
ENDIF. * ---- read condition records
* loop at application
LOOP AT l_t_cond_session.
* loop at key figure
LOOP AT pi_t_keyfigx WHERE kappl = l_t_cond_session-kappl.
CLEAR l_t_condvalues. " refresh table
* determine the condition value
PERFORM determine_cond_values TABLES pi_t_product_datx
pi_t_prodcat_datx
l_t_condvalues
px_t_return
USING l_t_cond_session
l_hlog
pi_t_keyfigx
pi_s_mkt_attrib
pi_application
CHANGING l_subrc.
IF l_subrc IS INITIAL.
* Call BAdI to adjust the condition values
PERFORM call_badi_cond_read_after_get TABLES pi_t_product_datx
pi_t_prodcat_datx
l_t_condvalues
px_t_return
USING pi_crm_mktpl_guid
l_t_cond_session
pi_t_keyfigx
pi_s_mkt_attrib
pi_application
CHANGING l_subrc.
IF l_subrc IS INITIAL.
APPEND LINES OF l_t_condvalues TO pe_t_condvalues.
ENDIF.
ENDIF. ENDLOOP.
ENDLOOP. * ---- add messages from condition log to return table
PERFORM add_cond_messages_to_return TABLES px_t_return
USING l_hlog. * ---- close condition session
PERFORM close_cond_mnt_pdet TABLES l_t_cond_session
px_t_return
USING l_hlog
CHANGING pe_subrc. ENDFORM. " read_cond_records_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF18 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form init_cond_mnt_pdet
*&---------------------------------------------------------------------*
* Initialize the condition maintenance for reading conditions
* for price determination
*----------------------------------------------------------------------*
FORM init_cond_mnt_pdet
TABLES pe_t_cond_session STRUCTURE crm_mktpl_cond_if_condsession
pi_t_keyfigx STRUCTURE crm_mktpl_cond_if_keyfigx_pdet
px_t_return STRUCTURE bapiret2
CHANGING pe_hlog TYPE balloghndl
pe_subrc TYPE sy-subrc. DATA: ls_bal_log TYPE bal_s_log,
l_t_keyfigx TYPE TABLE OF crm_mktpl_cond_if_keyfigx_pdet
WITH HEADER LINE,
lv_prod_cond_maint_group TYPE /sapcnd/maint_group,
l_msgtext(). * initialize application log
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_bal_log
IMPORTING
e_log_handle = pe_hlog
EXCEPTIONS
OTHERS = . * find all the different applications
l_t_keyfigx[] = pi_t_keyfigx[].
SORT l_t_keyfigx BY kappl.
DELETE ADJACENT DUPLICATES FROM l_t_keyfigx COMPARING kappl. * initialize the condition maintenance for all different applications
LOOP AT l_t_keyfigx WHERE NOT kappl IS INITIAL. * read the customized condition maintenance group for the product master
* (we only need this one to read the conditions of the products and it will
* save thousands of lines in table GT_T688C if we only load this one; so for
* performance reasons (allocated memory) it is really helpful).
SELECT SINGLE cond_group
FROM comc_pr_cond_grp
INTO lv_prod_cond_maint_group
WHERE cond_appl = cl_crm_mktgs_cnd_mnt_constants=>kappl_crm. CALL FUNCTION '/SAPCND/MNT_INIT_OW'
EXPORTING
i_application = l_t_keyfigx-kappl
i_hlog = pe_hlog
i_groupname = lv_prod_cond_maint_group
IMPORTING
e_hsession = pe_t_cond_session-session
EXCEPTIONS
exc_stop_work =
exc_rfc =
exc_timezone =
exc_t688c_f =
exc_creating_debug_trace_log =
exc_adding_debug_trace_msg =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_INIT_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_INIT_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ELSE.
pe_t_cond_session-kappl = l_t_keyfigx-kappl.
APPEND pe_t_cond_session.
* do not discarde non-processable items
CALL FUNCTION '/SAPCND/MNT_SET_PROC_MODE_OW'
EXPORTING
i_hsession = pe_t_cond_session-session
EXCEPTIONS
OTHERS = .
ENDIF.
ENDLOOP. ENDFORM. " init_cond_mnt_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF19 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form determine_cond_values
*&---------------------------------------------------------------------*
* Determine the condition values
*----------------------------------------------------------------------*
FORM determine_cond_values
TABLES pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
pe_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_hlog TYPE balloghndl
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. * By default: everything is o.k.
CLEAR pe_subrc. * ------- refresh the condition buffer
PERFORM clear_cond_buffer_pdet TABLES px_t_return
USING pi_s_cond_session
pi_hlog
CHANGING pe_subrc.
CHECK pe_subrc IS INITIAL. * ------ select condition records from db and fill the condition buffer
PERFORM fill_cond_buffer_pdet TABLES pi_t_product_datx
pi_t_prodcat_datx
px_t_return
USING pi_s_cond_session
pi_s_keyfigx
pi_s_mkt_attrib
pi_hlog
pi_application
CHANGING pe_subrc.
CHECK pe_subrc IS INITIAL. * ----- fill condition values
PERFORM fill_condvalues TABLES pi_t_product_datx
pi_t_prodcat_datx
pe_t_condvalues
px_t_return
USING pi_s_cond_session
pi_s_keyfigx
pi_hlog
pi_application
CHANGING pe_subrc.
CHECK pe_subrc IS INITIAL. * ----- convert currency of the condition values to promotion currency
PERFORM conv_curr_condvalues TABLES pe_t_condvalues
USING pi_s_mkt_attrib
CHANGING pe_subrc. ENDFORM. " determine_cond_values
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF20 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form fill_cond_buffer_pdet
*&---------------------------------------------------------------------*
* Reading condition records for price determination:
* Select data from the database and fill condition buffer
*----------------------------------------------------------------------*
FORM fill_cond_buffer_pdet
TABLES pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pi_hlog TYPE balloghndl
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. DATA: l_t_attrib_value TYPE /sapcnd/t_attrib_value_int,
l_s_attrib_value TYPE /sapcnd/attrib_value_int,
l_timestamp_from TYPE timestamp,
l_timestamp_to TYPE timestamp,
l_timezone TYPE sy-zonlo VALUE 'UTC',
l_num_selected_records TYPE i,
l_t_t681e_s TYPE /sapcnd/t681e_s_t,
l_msgtext(). * by default: everything is ok:
CLEAR pe_subrc. * Build table with attributes and values:
* ---------- promotion attributes:
* sales area:
l_s_attrib_value-fieldname = 'SALES_ORG'.
l_s_attrib_value-value = pi_s_mkt_attrib-sales_org.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'DIS_CHANNEL'.
l_s_attrib_value-value = pi_s_mkt_attrib-dis_channel.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'DIVISION'.
l_s_attrib_value-value = pi_s_mkt_attrib-division.
APPEND l_s_attrib_value TO l_t_attrib_value.
* currency
l_s_attrib_value-fieldname = 'CURRENCY'.
l_s_attrib_value-value = pi_s_mkt_attrib-currency.
APPEND l_s_attrib_value TO l_t_attrib_value.
* planning customer (business partner or wholesaler of indirect promotion)
l_s_attrib_value-fieldname = 'PARTNER'.
l_s_attrib_value-value = pi_s_mkt_attrib-bp_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'SOLD_TO_PARTY'.
l_s_attrib_value-value = pi_s_mkt_attrib-bp_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
* planning customer (CRM hierarchy or target group owner)
l_s_attrib_value-fieldname = 'HIER_NODE_GUID'.
l_s_attrib_value-value = pi_s_mkt_attrib-node_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
* planning customer (R/3 hierarchy or target group owner)
l_s_attrib_value-fieldname = 'HIER_NO_GUID'.
l_s_attrib_value-value = pi_s_mkt_attrib-partner_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
IF pi_s_mkt_attrib-bp_guid IS INITIAL.
l_s_attrib_value-fieldname = 'PARTNER'.
l_s_attrib_value-value = pi_s_mkt_attrib-partner_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'SOLD_TO_PARTY'.
l_s_attrib_value-value = pi_s_mkt_attrib-partner_guid.
APPEND l_s_attrib_value TO l_t_attrib_value.
ENDIF. * ---------- product attributes:
LOOP AT pi_t_product_datx.
PERFORM build_attrib_value_prod_pdet TABLES l_t_attrib_value
USING pi_t_product_datx.
ENDLOOP. * ---------- product-category attributes:
LOOP AT pi_t_prodcat_datx.
PERFORM build_attrib_value_pcat_pdet TABLES l_t_attrib_value
USING pi_t_prodcat_datx.
ENDLOOP. * ------- Remove attribute values which are not part of the condition
* ------- table
* Determine the fields of the condition table
CALL FUNCTION '/SAPCND/CUS_T681E_SEL'
EXPORTING
i_application = pi_s_cond_session-kappl
i_usage = pi_s_keyfigx-kvewe
i_cond_table_id = pi_s_keyfigx-kotabnr
IMPORTING
et_selected_data = l_t_t681e_s.
* Check, if attribute is part of the condition table
IF NOT l_t_t681e_s IS INITIAL.
LOOP AT l_t_attrib_value INTO l_s_attrib_value.
READ TABLE l_t_t681e_s
WITH KEY fieldname = l_s_attrib_value-fieldname
TRANSPORTING NO FIELDS.
IF sy-subrc NE .
DELETE l_t_attrib_value.
ENDIF.
ENDLOOP.
ENDIF. * ------- fields of condition technique
l_s_attrib_value-fieldname = 'KAPPL'.
l_s_attrib_value-value = pi_s_cond_session-kappl.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'KVEWE'.
l_s_attrib_value-value = pi_s_keyfigx-kvewe.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'KSCHL'.
l_s_attrib_value-value = pi_s_keyfigx-kschl.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'KOTABNR'.
l_s_attrib_value-value = pi_s_keyfigx-kotabnr.
APPEND l_s_attrib_value TO l_t_attrib_value. * Call BAdI to adjust the attribute-value tables
PERFORM call_badi_cond_read_before_sel TABLES pi_t_product_datx
pi_t_prodcat_datx
px_t_return
USING pi_s_cond_session
pi_s_keyfigx
pi_s_mkt_attrib
pi_application
CHANGING l_t_attrib_value
pe_subrc.
CHECK pe_subrc IS INITIAL. * Select data into condition buffer
CALL FUNCTION '/SAPCND/MNT_SELECT_OW'
EXPORTING
i_hsession = pi_s_cond_session-session
i_hlog = pi_hlog
i_selection_mode = 'A'
i_maintenance_mode = 'C'
* IT_ATTRIB_SELECTION_EXT =
it_attrib_value_int = l_t_attrib_value
IMPORTING
* E_NUM_REMAINING_RECORDS =
e_num_selected_records = l_num_selected_records
* E_NUM_DELETED_RECORDS =
* E_RESULT =
EXCEPTIONS
exc_stop_work =
exc_selecting_records =
exc_setting_abap_locks =
exc_convert_ranges =
exc_rfc =
exc_external_only =
exc_unknown_selection_mode =
exc_creating_object_names =
exc_locking_attribute =
exc_adding_debug_trace_msg =
exc_inner_rel_locks =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_SELECT_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_SELECT_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ENDIF. IF l_num_selected_records = .
pe_subrc = .
ENDIF. ENDFORM. " fill_cond_buffer_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF21 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form fill_condvalues
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_condvalues
TABLES pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
pe_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_hlog TYPE balloghndl
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. DATA: lt_working_set TYPE REF TO data,
l_s_attrib_value TYPE /sapcnd/attrib_value_int,
l_t_attrib_value TYPE /sapcnd/t_attrib_value_int,
l_t_condvalues TYPE TABLE OF crm_mktpl_cond_if_condvalues,
l_s_product_datx TYPE crm_mktpl_cond_if_product_datx,
l_s_prodcat_datx TYPE crm_mktpl_cond_if_prodcat_datx,
l_timestamp_from TYPE timestamp,
l_timestamp_to TYPE timestamp,
l_timezone TYPE sy-zonlo VALUE 'UTC',
l_subrc TYPE sy-subrc,
l_msgtext(). * ------- fields of timestamp:
* timestamp from:
CONVERT
DATE pi_s_keyfigx-end_date
TIME ''
INTO TIME STAMP l_timestamp_from
TIME ZONE l_timezone.
l_s_attrib_value-fieldname = 'TIMESTAMP_FROM'.
l_s_attrib_value-value = l_timestamp_from.
SHIFT l_s_attrib_value-value LEFT DELETING LEADING space.
l_s_attrib_value-operator = 'LE'.
APPEND l_s_attrib_value TO l_t_attrib_value.
* timestamp to:
CONVERT
DATE pi_s_keyfigx-start_date
TIME ''
INTO TIME STAMP l_timestamp_to
TIME ZONE l_timezone.
l_s_attrib_value-fieldname = 'TIMESTAMP_TO'.
l_s_attrib_value-value = l_timestamp_to.
SHIFT l_s_attrib_value-value LEFT DELETING LEADING space.
l_s_attrib_value-operator = 'GE'.
APPEND l_s_attrib_value TO l_t_attrib_value.
* for the following: only operator = BLANK is allowed
CLEAR l_s_attrib_value-operator.
* ------- fields of condition technique
l_s_attrib_value-fieldname = 'KVEWE'.
l_s_attrib_value-value = pi_s_keyfigx-kvewe.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'KSCHL'.
l_s_attrib_value-value = pi_s_keyfigx-kschl.
APPEND l_s_attrib_value TO l_t_attrib_value.
l_s_attrib_value-fieldname = 'KOTABNR'.
l_s_attrib_value-value = pi_s_keyfigx-kotabnr.
APPEND l_s_attrib_value TO l_t_attrib_value. * retrieve data from the condition buffer
CALL FUNCTION '/SAPCND/MNT_GET_WORKING_SET_OW'
EXPORTING
i_hsession = pi_s_cond_session-session
i_hlog = pi_hlog
* I_CALL_FIELD_CHECK = ' '
i_suppress_deleted_records = 'X'
* IT_ATTRIB_SELECTION_EXT =
it_attrib_value_int = l_t_attrib_value
IMPORTING
et_working_set_int = lt_working_set
* ET_WORKING_SET_EXT =
* E_RESULT =
EXCEPTIONS
exc_stop_work =
exc_rfc =
* exc_conv_java = 3
exc_attr_conv =
exc_field_check =
exc_updating_working_set =
exc_not_int_and_ext =
exc_external_only =
exc_convert_ranges =
exc_creating_object_names =
exc_stop_work_badi =
exc_implementation_missing =
exc_adding_debug_trace_msg =
exc_bal_log =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_GET_WORKING_SET_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_GET_WORKING_SET_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
EXIT.
ENDIF. * get data from the condition buffer
* ----- products
LOOP AT pi_t_product_datx INTO l_s_product_datx.
* build table with attributes and values
CLEAR l_t_attrib_value.
* fields of product
PERFORM build_attrib_value_prod_pdet TABLES l_t_attrib_value
USING l_s_product_datx.
* fill condition values for this product
CLEAR l_t_condvalues.
PERFORM fill_condvalues_item TABLES l_t_condvalues
px_t_return
USING pi_s_cond_session
lt_working_set
l_t_attrib_value
l_s_product_datx
l_s_prodcat_datx
pi_s_keyfigx
pi_hlog
pi_application
CHANGING l_subrc.
CHECK l_subrc IS INITIAL.
APPEND LINES OF l_t_condvalues TO pe_t_condvalues.
ENDLOOP.
CLEAR l_s_product_datx. * ----- product categories
LOOP AT pi_t_prodcat_datx INTO l_s_prodcat_datx.
* build table with attributes and values
CLEAR l_t_attrib_value.
* fields of product category
PERFORM build_attrib_value_pcat_pdet TABLES l_t_attrib_value
USING l_s_prodcat_datx.
* fill condition values for this product category
CLEAR l_t_condvalues.
PERFORM fill_condvalues_item TABLES l_t_condvalues
px_t_return
USING pi_s_cond_session
lt_working_set
l_t_attrib_value
l_s_product_datx
l_s_prodcat_datx
pi_s_keyfigx
pi_hlog
pi_application
CHANGING l_subrc.
CHECK l_subrc IS INITIAL.
APPEND LINES OF l_t_condvalues TO pe_t_condvalues.
ENDLOOP. ENDFORM. " fill_condvalues
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF22 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form clear_cond_buffer_pdet
*&---------------------------------------------------------------------*
* Refresh the condition buffer for this session
*----------------------------------------------------------------------*
FORM clear_cond_buffer_pdet
TABLES px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_hlog TYPE balloghndl
CHANGING pe_subrc TYPE sy-subrc. DATA l_msgtext(). CALL FUNCTION '/SAPCND/MNT_CLEAR_OW'
EXPORTING
i_hsession = pi_s_cond_session-session
i_hlog = pi_hlog
* IMPORTING
* E_RESULT =
EXCEPTIONS
exc_stop_work =
* exc_rfc = 2
exc_releasing_locks =
exc_adding_debug_trace_msg =
exc_creating_log_handle =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_CLEAR_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_CLEAR_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ENDIF. ENDFORM. " clear_cond_buffer_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF23 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form close_cond_mnt_pdet
*&---------------------------------------------------------------------*
* Close all open condition sessions
*----------------------------------------------------------------------*
FORM close_cond_mnt_pdet
TABLES pi_t_cond_session STRUCTURE crm_mktpl_cond_if_condsession
px_t_return STRUCTURE bapiret2
USING pi_hlog TYPE balloghndl
CHANGING pe_subrc TYPE sy-subrc. DATA l_msgtext(). LOOP AT pi_t_cond_session. CALL FUNCTION '/SAPCND/MNT_CLOSE_OW'
EXPORTING
i_hsession = pi_t_cond_session-session
i_hlog = pi_hlog
* IMPORTING
* E_RESULT =
EXCEPTIONS
exc_stop_work =
exc_rfc =
exc_releasing_locks =
exc_adding_debug_trace_msg =
exc_creating_log_handle =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_CLOSE_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_CLOSE_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ENDIF. ENDLOOP. ENDFORM. " close_cond_mnt_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF39 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form add_cond_messages_to_return
*&---------------------------------------------------------------------*
* Get messages from condition maintenance and append them
* to the return table
*----------------------------------------------------------------------*
FORM add_cond_messages_to_return
TABLES px_t_return STRUCTURE bapiret2
USING pi_hlog TYPE balloghndl. DATA:
ls_hlog TYPE bal_s_lfil, " filter for log header
lr_log_handle TYPE bal_s_logh, " range for handle
lt_msg_handle TYPE bal_t_msgh,
ls_msg_handle TYPE balmsghndl,
ls_msg TYPE bal_s_msg,
ls_return TYPE bapiret2. * filter for log handle
lr_log_handle-sign = 'I'.
lr_log_handle-option = 'EQ'.
lr_log_handle-low = pi_hlog.
INSERT lr_log_handle INTO TABLE ls_hlog-log_handle. * search the log for messages
CALL FUNCTION 'BAL_GLB_SEARCH_MSG'
EXPORTING
i_s_log_filter = ls_hlog
IMPORTING
e_t_msg_handle = lt_msg_handle
EXCEPTIONS
msg_not_found =
OTHERS = .
IF sy-subrc = .
* no message found
ELSEIF sy-subrc <> .
PERFORM append_return TABLES px_t_return.
ELSE.
LOOP AT lt_msg_handle INTO ls_msg_handle.
* Retrieve messages from the condition log
CALL FUNCTION 'BAL_LOG_MSG_READ'
EXPORTING
i_s_msg_handle = ls_msg_handle
IMPORTING
e_s_msg = ls_msg
EXCEPTIONS
log_not_found =
msg_not_found =
OTHERS = .
IF sy-subrc <> .
PERFORM append_return TABLES px_t_return.
ELSE.
* Abort messages should not be sent back in the application log
* Condition Technique returns A messages for Error messages...
* Abort message should really abort and not bring back messages...
IF ls_msg-msgty = 'A'.
ls_msg-msgty = 'E'.
ENDIF. * Add message to the return table
ls_return-type = ls_msg-msgty.
ls_return-id = ls_msg-msgid.
ls_return-number = ls_msg-msgno.
ls_return-message_v1 = ls_msg-msgv1.
ls_return-message_v2 = ls_msg-msgv2.
ls_return-message_v3 = ls_msg-msgv3.
ls_return-message_v4 = ls_msg-msgv4.
MESSAGE ID ls_msg-msgid
TYPE 'I'
NUMBER ls_msg-msgno
WITH ls_msg-msgv1
ls_msg-msgv1
ls_msg-msgv1
ls_msg-msgv1
INTO ls_return-message.
APPEND ls_return TO px_t_return.
ENDIF.
ENDLOOP.
ENDIF. ENDFORM. " add_cond_messages_to_return
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF54 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_promotion_data_pdet
*&---------------------------------------------------------------------*
* Get additional data from the promotion for reading the condition
* records
*----------------------------------------------------------------------*
FORM get_promotion_data_pdet
TABLES pi_t_product_data STRUCTURE crm_mktpl_cond_if_product_data
pi_t_prodcat_data STRUCTURE crm_mktpl_cond_if_prodcat_data
pe_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pe_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
USING pi_crm_mktpl_guid TYPE crm_mktpl_guid
pi_application TYPE cgpl_application_type
CHANGING pe_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pe_subrc TYPE sy-subrc. DATA: lr_mkt_appl_base TYPE REF TO cl_crm_mktpl_appl_base,
lr_acp_appl_base TYPE REF TO cl_crm_acc_pl_appl_base,
ls_mkt_attributes TYPE crm_mktpl_mktelement,
ls_acp_attributes TYPE crmt_acc_pl_attributes,
l_bps_from_hier TYPE flag,
ls_tab_product TYPE crmd_mktpl_prod_d,
lt_tab_product TYPE crmd_mktpl_prod_dt,
ls_acc_pl_pcat TYPE crmd_acc_pl_pcat_d,
lt_acc_pl_pcat TYPE crmd_acc_pl_pcat_dt,
lt_product TYPE comt_product_selection_tab,
ls_product TYPE comt_product_selection,
ls_hierarchy1 TYPE crms_mktpl_prod_hierarchy,
ls_hierarchy2 TYPE crms_mktpl_prod_hierarchy,
l_object_manager TYPE REF TO cl_cgpl_object_manager,
l_projects TYPE REF TO cl_cgpl_projects,
l_project TYPE REF TO cl_cgpl_project,
l_task TYPE REF TO cl_cgpl_task,
l_tree_from_r3 TYPE char1,
l_cust_guid_r3 TYPE bu_node_guid. DATA: lt_tg_i TYPE crmt_mkttg_tg_i_tab,
ls_tg_i TYPE crmt_mkttg_tg_i. * ------ Attributes of marketing element
CASE pi_application.
WHEN c_application_mkt.
* get attributes of the marketing element
lr_mkt_appl_base = cl_crm_mktpl_appl_base=>get_instance( ).
CALL METHOD lr_mkt_appl_base->element_read
EXPORTING
im_mktelement_guid = pi_crm_mktpl_guid
IMPORTING
ex_attributes = ls_mkt_attributes.
* fill attributes
MOVE-CORRESPONDING ls_mkt_attributes TO pe_s_mkt_attrib.
WHEN c_application_acp.
* get attributes of the account plan
lr_acp_appl_base = cl_crm_acc_pl_appl_base=>get_acp_appl_instance( ).
CALL METHOD lr_acp_appl_base->acc_pl_read
EXPORTING
im_element_guid = pi_crm_mktpl_guid
IMPORTING
ex_attributes = ls_acp_attributes
EXCEPTIONS
not_found =
OTHERS = .
* fill attributes
MOVE-CORRESPONDING ls_acp_attributes TO pe_s_mkt_attrib.
WHEN OTHERS.
pe_subrc = .
ENDCASE. * ------- Partner GUID of an indirect promotion is the Wholesaler
IF ls_mkt_attributes-indirect_ind IS NOT INITIAL.
CALL METHOD cl_crm_mktpl_functions=>get_tpm_wholesalers
EXPORTING
iv_mkt_element = pi_crm_mktpl_guid
IMPORTING
ev_wholesaler = pe_s_mkt_attrib-partner_guid. * ------- Partner GUID of hierarchy node from R/3
* only if planning customer = hierarchy node or if
* planning customer = target group with target group owner
ELSEIF pe_s_mkt_attrib-node_guid IS NOT INITIAL OR
ls_mkt_attributes-tgrp_owner_guid IS NOT INITIAL. l_projects = cl_cgpl_projects=>get_instance( im_application_type = pi_application ).
* get reference to project/task
CALL METHOD l_projects->get_object_with_guid
EXPORTING
im_guid = pi_crm_mktpl_guid
IMPORTING
ex_project = l_project
ex_task = l_task
EXCEPTIONS
not_found = . * for account plan: always use hierarchy (not target groups)
IF pi_application = c_application_acp.
l_bps_from_hier = 'X'.
ENDIF. * get the partner guid of the hierarchy node
CALL METHOD cl_crm_mktpl_functions=>get_bps_in_cust_hierarchy
EXPORTING
im_project = l_project
im_task = l_task
im_bps_from_hier = l_bps_from_hier
IMPORTING
ex_tree_from_r3 = l_tree_from_r3
ex_cust_guid_r3 = l_cust_guid_r3.
* For R3 hierarchies only, fill the partner guid
IF l_tree_from_r3 = 'X'.
pe_s_mkt_attrib-partner_guid = l_cust_guid_r3.
ENDIF.
IF ls_mkt_attributes-tgrp_owner_guid IS NOT INITIAL.
pe_s_mkt_attrib-node_guid = ls_mkt_attributes-tgrp_owner_guid.
ENDIF. * ------- Partner GUID of target group without target group owner
ELSEIF ls_mkt_attributes-targetgrp_guid IS NOT INITIAL.
CALL FUNCTION 'CRM_MKTTG_TG_READ'
EXPORTING
iv_tg_guid = ls_mkt_attributes-targetgrp_guid
iv_bp_max =
IMPORTING
et_tg_i = lt_tg_i
EXCEPTIONS
parameter_error =
OTHERS = .
* Get an arbitrary BP from the target group
IF sy-subrc IS INITIAL AND lt_tg_i IS NOT INITIAL.
READ TABLE lt_tg_i INDEX INTO ls_tg_i.
pe_s_mkt_attrib-partner_guid = ls_tg_i-bp_guid.
ENDIF.
ENDIF. * ------- Attributes of products
CASE pi_application.
WHEN c_application_mkt.
* determine from customizing settings, which hierarchy is relevant
CALL METHOD cl_crm_mktpl_img_access=>read_product_hierarchies
IMPORTING
es_prod_hierarchy1 = ls_hierarchy1
es_prod_hierarchy2 = ls_hierarchy2. * get products of the marketing element
lr_mkt_appl_base = cl_crm_mktpl_appl_base=>get_instance( ).
CALL METHOD lr_mkt_appl_base->prod_assign_read
EXPORTING
im_mktelement_guid = pi_crm_mktpl_guid
IMPORTING
ex_products = lt_tab_product
EXCEPTIONS
not_found =
OTHERS = .
WHEN c_application_acp.
* determine from customizing settings, which hierarchy is relevant
CALL METHOD cl_crm_acc_pl_img_access=>read_product_hierarchies
IMPORTING
es_prod_hierarchy1 = ls_hierarchy1
es_prod_hierarchy2 = ls_hierarchy2.
* get products of the account plan
lr_acp_appl_base = cl_crm_acc_pl_appl_base=>get_acp_appl_instance( ).
CALL METHOD lr_acp_appl_base->prod_assign_read
EXPORTING
im_mktelement_guid = pi_crm_mktpl_guid
IMPORTING
ex_products = lt_tab_product
EXCEPTIONS
not_found =
OTHERS = .
* get product categories of the account plan
CALL METHOD lr_acp_appl_base->pcat_assign_read
EXPORTING
im_acc_plan_guid = pi_crm_mktpl_guid
IMPORTING
ex_categories = lt_acc_pl_pcat.
WHEN OTHERS.
pe_subrc = .
ENDCASE. * Fill additional product data
LOOP AT pi_t_product_data.
pe_t_product_datx-product_guid = pi_t_product_data-product_guid.
* Add data from product assignment
READ TABLE lt_tab_product INTO ls_tab_product
WITH KEY product_guid = pi_t_product_data-product_guid.
IF sy-subrc = .
pe_t_product_datx-product_group = ls_tab_product-product_group.
pe_t_product_datx-sales_uom = ls_tab_product-sales_uom.
ENDIF.
* Product category 1 or 2:
* We use that one with the hierarchy marked as 'sales area dependent'
IF ls_hierarchy1-sales_area_flag IS NOT INITIAL.
pe_t_product_datx-prod_hierarchy = ls_tab_product-product_cat.
ENDIF.
IF ls_hierarchy2-sales_area_flag IS NOT INITIAL.
pe_t_product_datx-prod_hierarchy = ls_tab_product-category2_id.
ENDIF. APPEND pe_t_product_datx.
ENDLOOP. * Fill additional data for product categories
LOOP AT pi_t_prodcat_data.
pe_t_prodcat_datx-category_guid = pi_t_prodcat_data-category_guid.
* Add data from product category assignment
READ TABLE lt_acc_pl_pcat INTO ls_acc_pl_pcat
WITH KEY category_guid = pi_t_prodcat_data-category_guid.
IF sy-subrc = .
pe_t_prodcat_datx-prod_hierarchy = ls_acc_pl_pcat-category_id.
pe_t_prodcat_datx-sales_uom = ls_acc_pl_pcat-sales_uom.
ENDIF. * Determine a product, which represents this product category
l_projects = cl_cgpl_projects=>get_instance( im_application_type = pi_application ).
* Get reference to project
CALL METHOD l_projects->get_object_with_guid
EXPORTING
im_guid = pi_crm_mktpl_guid
IMPORTING
ex_project = l_project
EXCEPTIONS
not_found = .
* Explode the category into products (method returns only one product)
CALL METHOD cl_crm_acc_pl_functions=>explode_category
EXPORTING
iv_category_guid = pi_t_prodcat_data-category_guid
ir_project = l_project
iv_only_one_product = 'X'
IMPORTING
et_products = lt_product. READ TABLE lt_product INTO ls_product INDEX .
IF sy-subrc = .
pe_t_prodcat_datx-product_guid = ls_product-product_guid.
ENDIF. APPEND pe_t_prodcat_datx.
ENDLOOP. * Check, if products or product categories are provided
IF pe_t_product_datx[] IS INITIAL AND pe_t_prodcat_datx[] IS INITIAL.
pe_subrc = .
ENDIF. ENDFORM. " get_promotion_data_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF55 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form build_attrib_value_prod_pdet
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_attrib_value_prod_pdet
TABLES px_t_attrib_value STRUCTURE /sapcnd/attrib_value_int
USING pi_s_product_datx TYPE crm_mktpl_cond_if_product_datx. DATA: l_s_attrib_value TYPE /sapcnd/attrib_value_int,
l_prod_grp TYPE crm_mktpl_prod_grp,
l_prod_hierarchy TYPE crmt_prodh,
lt_attr_name_value TYPE prct_attr_name_values_t,
ls_attr_name_value TYPE prct_attr_name_value,
lt_bapireturn TYPE bapiret2_tab. * product guid
l_s_attrib_value-fieldname = 'PRODUCT'.
l_s_attrib_value-value = pi_s_product_datx-product_guid.
APPEND l_s_attrib_value TO px_t_attrib_value.
* product group 1,...5
CALL METHOD cl_crm_mktpl_img_access=>read_product_group_no
IMPORTING
ex_product_group_no = l_prod_grp.
CASE l_prod_grp.
WHEN c_prod_grp_1.
l_s_attrib_value-fieldname = 'PRC_GROUP1'.
WHEN c_prod_grp_2.
l_s_attrib_value-fieldname = 'PRC_GROUP2'.
WHEN c_prod_grp_3.
l_s_attrib_value-fieldname = 'PRC_GROUP3'.
WHEN c_prod_grp_4.
l_s_attrib_value-fieldname = 'PRC_GROUP4'.
WHEN c_prod_grp_5.
l_s_attrib_value-fieldname = 'PRC_GROUP5'.
ENDCASE.
l_s_attrib_value-value = pi_s_product_datx-product_group.
APPEND l_s_attrib_value TO px_t_attrib_value.
* product hierarchy
l_prod_hierarchy = pi_s_product_datx-prod_hierarchy.
l_s_attrib_value-fieldname = 'PROD_HIERARCHY'.
l_s_attrib_value-value = l_prod_hierarchy.
APPEND l_s_attrib_value TO px_t_attrib_value.
* get condition fields from customizing
CALL FUNCTION 'CRM_PRCAT_PRICING_FILL_PRODH'
EXPORTING
iv_product_hierarchy = pi_s_product_datx-prod_hierarchy
IMPORTING
et_prct_attr_name_values = lt_attr_name_value
et_bapireturn = lt_bapireturn.
IF lt_bapireturn IS INITIAL AND
lt_attr_name_value IS NOT INITIAL.
* use dynamic field assignment
LOOP AT lt_attr_name_value INTO ls_attr_name_value.
l_s_attrib_value-fieldname = ls_attr_name_value-attr_name.
l_s_attrib_value-value = ls_attr_name_value-attr_value.
APPEND l_s_attrib_value TO px_t_attrib_value.
ENDLOOP.
ELSE.
* use fields PRODH#
l_s_attrib_value-fieldname = 'PRODH1'.
l_s_attrib_value-value = l_prod_hierarchy-prodh1.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH2'.
l_s_attrib_value-value = l_prod_hierarchy-prodh2.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH3'.
l_s_attrib_value-value = l_prod_hierarchy-prodh3.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH4'.
l_s_attrib_value-value = l_prod_hierarchy-prodh4.
APPEND l_s_attrib_value TO px_t_attrib_value.
ENDIF.
* sales unit of measure
l_s_attrib_value-fieldname = 'PROCESS_QTY_UNIT'.
l_s_attrib_value-value = pi_s_product_datx-sales_uom.
APPEND l_s_attrib_value TO px_t_attrib_value. ENDFORM. " build_attrib_value_prod_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF56 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form conv_curr_condvalues
*&---------------------------------------------------------------------*
* Convert the currency of the condition record into the promotion
* currency
*----------------------------------------------------------------------*
FORM conv_curr_condvalues
TABLES px_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
USING pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
CHANGING pe_subrc TYPE sy-subrc. DATA: ls_condvalues TYPE crm_mktpl_cond_if_condvalues,
l_local_curr TYPE prct_cond_curr,
l_timestamp_from TYPE timestamp,
l_cnd_timestamp_from TYPE /sapcnd/timestamp_from. * Check: Promotion currency
CHECK pi_s_mkt_attrib-currency IS NOT INITIAL. * Convert condition value into promotion currency
LOOP AT px_t_condvalues INTO ls_condvalues
WHERE konwa NE pi_s_mkt_attrib-currency
AND konwa NE '%'. * determine the local currency from sales org
CONVERT DATE ls_condvalues-start_date
INTO TIME STAMP l_timestamp_from
TIME ZONE sy-zonlo.
l_cnd_timestamp_from = l_timestamp_from.
CALL FUNCTION 'PRC_MNT_DEF_VALUE_CURRENCY_CRM'
EXPORTING
i_calc_type = ' '
i_sales_org = pi_s_mkt_attrib-sales_org
i_timestamp_from = l_cnd_timestamp_from
CHANGING
c_currency = l_local_curr
EXCEPTIONS
exc_no_default =
OTHERS = .
IF sy-subrc <> OR l_local_curr IS INITIAL.
* Default is the promotion currency
l_local_curr = pi_s_mkt_attrib-currency.
ENDIF. * convert via local currency
CALL FUNCTION 'CRM_CONVERT_CURRENCY'
EXPORTING
iv_exch_rate_date = ls_condvalues-start_date
iv_source_currency = ls_condvalues-konwa
iv_local_currency = l_local_curr
iv_target_currency = pi_s_mkt_attrib-currency
CHANGING
cv_value = ls_condvalues-kbetr
EXCEPTIONS
conversion_not_possible =
OTHERS = .
IF sy-subrc = .
ls_condvalues-konwa = pi_s_mkt_attrib-currency.
MODIFY px_t_condvalues FROM ls_condvalues.
ENDIF. ENDLOOP. ENDFORM. " conv_curr_condvalues
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF62 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form append_return
*&---------------------------------------------------------------------*
* Append message to the table PX_T_RETURN
*----------------------------------------------------------------------*
FORM append_return TABLES px_t_return STRUCTURE bapiret2. DATA: l_s_return TYPE bapiret2,
lv_msgty TYPE SYMSGTY. * Abort messages should not be sent back in the application log
* Condition Technique returns A messages for Error messages... IF sy-msgty = 'A'.
lv_msgty = 'E'.
ELSE.
lv_msgty = sy-msgty.
ENDIF. CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = lv_msgty
cl = sy-msgid
number = sy-msgno
par1 = sy-msgv1
par2 = sy-msgv2
par3 = sy-msgv3
par4 = sy-msgv4
IMPORTING
return = l_s_return. APPEND l_s_return TO px_t_return. ENDFORM. " append_return
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF75 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form call_badi_cond_read_before_sel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_badi_cond_read_before_sel
TABLES pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pi_application TYPE cgpl_application_type
CHANGING px_t_attrib_value TYPE /sapcnd/t_attrib_value_int
pe_subrc TYPE sy-subrc. DATA:
l_t_return TYPE bapirettab,
l_t_product_datx TYPE crm_mktpl_cond_if_t_prod_datx,
l_t_prodcat_datx TYPE crm_mktpl_cond_if_t_pcat_datx. * Initialize the BADI instance (if not yet done)
IF g_crm_mktpl_cond_if IS INITIAL.
CALL METHOD cl_exithandler=>get_instance
EXPORTING
exit_name = 'CRM_MKTPL_COND_IF'
null_instance_accepted = 'X'
CHANGING
instance = g_crm_mktpl_cond_if.
ENDIF.
CHECK g_crm_mktpl_cond_if IS NOT INITIAL. * Copy data
l_t_product_datx = pi_t_product_datx[].
l_t_prodcat_datx = pi_t_prodcat_datx[]. * Call the BADI method
CALL METHOD g_crm_mktpl_cond_if->cond_read_before_select
EXPORTING
pi_s_cond_session = pi_s_cond_session
pi_t_product_datx = l_t_product_datx
pi_t_prodcat_datx = l_t_prodcat_datx
pi_s_keyfigx = pi_s_keyfigx
pi_s_mkt_attrib = pi_s_mkt_attrib
pi_application = pi_application
IMPORTING
pe_t_return = l_t_return
pe_subrc = pe_subrc
CHANGING
px_t_attrib_value = px_t_attrib_value. * Append the messages to the return table
APPEND LINES OF l_t_return TO px_t_return. ENDFORM. " call_badi_cond_read_before_sel
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF76 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form call_badi_cond_read_before_get
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_badi_cond_read_before_get
TABLES px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_s_product_datx TYPE crm_mktpl_cond_if_product_datx
pi_s_prodcat_datx TYPE crm_mktpl_cond_if_prodcat_datx
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_application TYPE cgpl_application_type
CHANGING px_t_attrib_value TYPE /sapcnd/t_attrib_value_int
pe_subrc TYPE sy-subrc. DATA: l_t_return TYPE bapirettab. * Initialize the BADI instance (if not yet done)
IF g_crm_mktpl_cond_if IS INITIAL.
CALL METHOD cl_exithandler=>get_instance
EXPORTING
exit_name = 'CRM_MKTPL_COND_IF'
null_instance_accepted = 'X'
CHANGING
instance = g_crm_mktpl_cond_if.
ENDIF.
CHECK g_crm_mktpl_cond_if IS NOT INITIAL. * Call the BADI method
CALL METHOD g_crm_mktpl_cond_if->cond_read_before_get
EXPORTING
pi_s_cond_session = pi_s_cond_session
pi_s_product_datx = pi_s_product_datx
pi_s_prodcat_datx = pi_s_prodcat_datx
pi_s_keyfigx = pi_s_keyfigx
pi_application = pi_application
IMPORTING
pe_t_return = l_t_return
pe_subrc = pe_subrc
CHANGING
px_t_attrib_value = px_t_attrib_value. * Append the messages to the return table
APPEND LINES OF l_t_return TO px_t_return. ENDFORM. " call_badi_cond_read_before_get
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF77 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form call_badi_cond_read_after_get
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_badi_cond_read_after_get
TABLES pi_t_product_datx STRUCTURE crm_mktpl_cond_if_product_datx
pi_t_prodcat_datx STRUCTURE crm_mktpl_cond_if_prodcat_datx
px_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
px_t_return STRUCTURE bapiret2
USING pi_crm_mktpl_guid TYPE crm_mktpl_guid
pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_s_mkt_attrib TYPE crm_mktpl_cond_if_mkt_attrib
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. DATA: l_t_return TYPE bapirettab,
l_t_product_datx TYPE crm_mktpl_cond_if_t_prod_datx,
l_t_prodcat_datx TYPE crm_mktpl_cond_if_t_pcat_datx,
l_t_condvalues TYPE crm_mktpl_cond_if_t_condvalues,
l_s_condvalues TYPE crm_mktpl_cond_if_condvalues. * Initialize the BADI instance (if not yet done)
IF g_crm_mktpl_cond_if IS INITIAL.
CALL METHOD cl_exithandler=>get_instance
EXPORTING
exit_name = 'CRM_MKTPL_COND_IF'
null_instance_accepted = 'X'
CHANGING
instance = g_crm_mktpl_cond_if.
ENDIF.
CHECK g_crm_mktpl_cond_if IS NOT INITIAL. * Copy data
l_t_product_datx = pi_t_product_datx[].
l_t_prodcat_datx = pi_t_prodcat_datx[].
l_t_condvalues = px_t_condvalues[]. * Call the BADI method
CALL METHOD g_crm_mktpl_cond_if->cond_read_after_get
EXPORTING
pi_crm_mktpl_guid = pi_crm_mktpl_guid
pi_s_cond_session = pi_s_cond_session
pi_t_product_datx = l_t_product_datx
pi_t_prodcat_datx = l_t_prodcat_datx
pi_s_keyfigx = pi_s_keyfigx
pi_s_mkt_attrib = pi_s_mkt_attrib
pi_application = pi_application
IMPORTING
pe_t_return = l_t_return
pe_subrc = pe_subrc
CHANGING
px_t_condvalues = l_t_condvalues. * Check: Any changes?
IF l_t_condvalues NE px_t_condvalues[].
* Do some minimal checks:
LOOP AT l_t_condvalues INTO l_s_condvalues.
l_s_condvalues-key_figure = pi_s_keyfigx-key_figure.
l_s_condvalues-kappl = pi_s_keyfigx-kappl.
l_s_condvalues-kvewe = pi_s_keyfigx-kvewe.
l_s_condvalues-kschl = pi_s_keyfigx-kschl.
l_s_condvalues-kotabnr = pi_s_keyfigx-kotabnr.
* start date:
IF l_s_condvalues-start_date LT pi_s_keyfigx-start_date.
l_s_condvalues-start_date = pi_s_keyfigx-start_date.
ENDIF.
* end date:
IF l_s_condvalues-end_date GT pi_s_keyfigx-end_date.
l_s_condvalues-end_date = pi_s_keyfigx-end_date.
ENDIF.
MODIFY l_t_condvalues FROM l_s_condvalues.
ENDLOOP.
ENDIF. * Copy condition values back
px_t_condvalues[] = l_t_condvalues. * Append the messages to the return table
APPEND LINES OF l_t_return TO px_t_return. ENDFORM. " call_badi_cond_read_after_get
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF81 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_working_set_kvewe
*&---------------------------------------------------------------------*
* Get the entries of the condition buffer for one campaign
* for a certain usage
*----------------------------------------------------------------------*
FORM get_working_set_kvewe
TABLES px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_crm_mktpl_guid TYPE crm_mktpl_guid
pi_application TYPE cgpl_application_type
pi_kvewe TYPE /sapcnd/usage
pi_hlog TYPE balloghndl
pi_suppr_del_records TYPE /sapcnd/boolean
CHANGING pe_t_working_set TYPE REF TO data
pe_subrc TYPE sy-subrc. DATA: ls_attrib_value TYPE /sapcnd/attrib_value_int,
lt_attrib_value TYPE /sapcnd/t_attrib_value_int,
l_result TYPE sy-subrc,
ls_ref_guid TYPE LINE OF /sapcnd/ref_guid_t,
lt_ref_guid TYPE /sapcnd/ref_guid_t,
l_msgtext(). CLEAR pe_t_working_set.
clear pe_subrc. CASE pi_application.
WHEN c_application_mkt. * Build range for selection
ls_attrib_value-fieldname = 'KAPPL'.
ls_attrib_value-value = pi_s_cond_session-kappl.
APPEND ls_attrib_value TO lt_attrib_value.
ls_attrib_value-fieldname = 'KVEWE'.
ls_attrib_value-value = pi_kvewe.
APPEND ls_attrib_value TO lt_attrib_value.
ls_attrib_value-fieldname = 'CAMPAIGN_GUID'.
ls_attrib_value-value = pi_crm_mktpl_guid.
APPEND ls_attrib_value TO lt_attrib_value. CALL FUNCTION '/SAPCND/MNT_GET_WORKING_SET_OW'
EXPORTING
i_hsession = pi_s_cond_session-session
i_hlog = pi_hlog
* I_CALL_FIELD_CHECK = ' '
i_suppress_deleted_records = pi_suppr_del_records
* IT_ATTRIB_SELECTION_EXT =
it_attrib_value_int = lt_attrib_value
IMPORTING
et_working_set_int = pe_t_working_set
* ET_WORKING_SET_EXT =
e_result = l_result
EXCEPTIONS
exc_stop_work =
exc_rfc =
* exc_conv_java = 3
exc_attr_conv =
exc_field_check =
exc_updating_working_set =
exc_not_int_and_ext =
exc_external_only =
exc_convert_ranges =
exc_creating_object_names =
exc_stop_work_badi =
exc_implementation_missing =
exc_adding_debug_trace_msg =
exc_bal_log =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_GET_WORKING_SET_OW
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_GET_WORKING_SET_OW'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ENDIF.
WHEN c_application_acp.
* account planning:
* condition reference
ls_ref_guid-ref_guid = pi_crm_mktpl_guid.
INSERT ls_ref_guid INTO TABLE lt_ref_guid.
ls_attrib_value-fieldname = 'KAPPL'.
ls_attrib_value-value = pi_s_cond_session-kappl.
APPEND ls_attrib_value TO lt_attrib_value.
ls_attrib_value-fieldname = 'KVEWE'.
ls_attrib_value-value = pi_kvewe.
APPEND ls_attrib_value TO lt_attrib_value. CALL FUNCTION '/SAPCND/MNT_GET_WORKINGSET_REF'
EXPORTING
i_hsession = pi_s_cond_session-session
i_hlog = pi_hlog
* I_CALL_FIELD_CHECK = ' '
i_suppress_deleted_records = pi_suppr_del_records
i_ref_type = c_ref_type_acp
it_ref_guid = lt_ref_guid
it_attrib_value_int = lt_attrib_value
IMPORTING
et_working_set_int = pe_t_working_set
* ET_WORKING_SET_EXT =
e_result = l_result
EXCEPTIONS
exc_stop_work =
exc_adding_debug_trace_msg =
exc_get_varnumhs =
exc_get_records =
OTHERS = .
IF sy-subrc <> .
pe_subrc = sy-subrc.
* Collect message from /SAPCND/MNT_GET_WORKINGSET_REF
PERFORM append_return TABLES px_t_return.
* Send message: System has stopped the processing
MESSAGE e025(crm_mktpl_cond_if)
WITH '/SAPCND/MNT_GET_WORKINGSET_REF'
INTO l_msgtext.
PERFORM append_return TABLES px_t_return.
ENDIF.
WHEN OTHERS.
pe_subrc = .
ENDCASE. endform. " get_working_set_kvewe
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF96 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form build_attrib_value_pcat_pdet
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_attrib_value_pcat_pdet
TABLES px_t_attrib_value STRUCTURE /sapcnd/attrib_value_int
USING pi_s_prodcat_datx TYPE crm_mktpl_cond_if_prodcat_datx. DATA: l_s_attrib_value TYPE /sapcnd/attrib_value_int,
l_prod_hierarchy TYPE crmt_prodh,
lt_attr_name_value TYPE prct_attr_name_values_t,
ls_attr_name_value TYPE prct_attr_name_value,
lt_bapireturn TYPE bapiret2_tab. * product guid
l_s_attrib_value-fieldname = 'PRODUCT'.
l_s_attrib_value-value = pi_s_prodcat_datx-product_guid.
APPEND l_s_attrib_value TO px_t_attrib_value.
* product hierarchy
l_prod_hierarchy = pi_s_prodcat_datx-prod_hierarchy.
l_s_attrib_value-fieldname = 'PROD_HIERARCHY'.
l_s_attrib_value-value = l_prod_hierarchy.
APPEND l_s_attrib_value TO px_t_attrib_value.
* get condition fields from customizing
CALL FUNCTION 'CRM_PRCAT_PRICING_FILL_PRODH'
EXPORTING
iv_product_hierarchy = pi_s_prodcat_datx-prod_hierarchy
IMPORTING
et_prct_attr_name_values = lt_attr_name_value
et_bapireturn = lt_bapireturn.
IF lt_bapireturn IS INITIAL AND
lt_attr_name_value IS NOT INITIAL.
* use dynamic field assignment
LOOP AT lt_attr_name_value INTO ls_attr_name_value.
l_s_attrib_value-fieldname = ls_attr_name_value-attr_name.
l_s_attrib_value-value = ls_attr_name_value-attr_value.
APPEND l_s_attrib_value TO px_t_attrib_value.
ENDLOOP.
ELSE.
* use fields PRODH#
l_s_attrib_value-fieldname = 'PRODH1'.
l_s_attrib_value-value = l_prod_hierarchy-prodh1.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH2'.
l_s_attrib_value-value = l_prod_hierarchy-prodh2.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH3'.
l_s_attrib_value-value = l_prod_hierarchy-prodh3.
APPEND l_s_attrib_value TO px_t_attrib_value.
l_s_attrib_value-fieldname = 'PRODH4'.
l_s_attrib_value-value = l_prod_hierarchy-prodh4.
APPEND l_s_attrib_value TO px_t_attrib_value.
ENDIF.
* sales unit of measure
l_s_attrib_value-fieldname = 'PROCESS_QTY_UNIT'.
l_s_attrib_value-value = pi_s_prodcat_datx-sales_uom.
APPEND l_s_attrib_value TO px_t_attrib_value. ENDFORM. " build_attrib_value_pcat_pdet
*----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF97 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form fill_condvalues_item
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_condvalues_item
TABLES pe_t_condvalues STRUCTURE crm_mktpl_cond_if_condvalues
px_t_return STRUCTURE bapiret2
USING pi_s_cond_session TYPE crm_mktpl_cond_if_condsession
pi_t_working_set TYPE REF TO data
pi_t_attrib_value TYPE /sapcnd/t_attrib_value_int
pi_s_product_datx TYPE crm_mktpl_cond_if_product_datx
pi_s_prodcat_datx TYPE crm_mktpl_cond_if_prodcat_datx
pi_s_keyfigx TYPE crm_mktpl_cond_if_keyfigx_pdet
pi_hlog TYPE balloghndl
pi_application TYPE cgpl_application_type
CHANGING pe_subrc TYPE sy-subrc. FIELD-SYMBOLS: <kbetr> TYPE prct_cond_rate,
<konwa> TYPE prct_cond_curr,
<kpein> TYPE prct_cond_pricing_unit,
<kmein> TYPE prct_prod_uom,
<timestamp_from> TYPE /sapcnd/timestamp_from,
<timestamp_to> TYPE /sapcnd/timestamp_to,
<lt_working_set> TYPE table,
<ls_working_set_item> TYPE ANY,
<value> TYPE ANY. DATA: l_t_t681e_s TYPE /sapcnd/t681e_s_t,
l_param_value TYPE /sapcnd/param_value,
l_s_attrib_value TYPE /sapcnd/attrib_value_int,
l_t_attrib_value TYPE /sapcnd/t_attrib_value_int,
l_not_ok TYPE xfeld. * get a pointer to the data from condition buffer
ASSIGN pi_t_working_set->* TO <lt_working_set>. l_t_attrib_value = pi_t_attrib_value. * Remove attribute values which are not part of the condition table
* Determine the fields of the condition table
CALL FUNCTION '/SAPCND/CUS_T681E_SEL'
EXPORTING
i_application = pi_s_cond_session-kappl
i_usage = pi_s_keyfigx-kvewe
i_cond_table_id = pi_s_keyfigx-kotabnr
IMPORTING
et_selected_data = l_t_t681e_s.
* Check, if attribute is part of the condition table
IF NOT l_t_t681e_s IS INITIAL.
LOOP AT l_t_attrib_value INTO l_s_attrib_value.
READ TABLE l_t_t681e_s
WITH KEY fieldname = l_s_attrib_value-fieldname
TRANSPORTING NO FIELDS.
IF sy-subrc NE .
DELETE l_t_attrib_value.
ENDIF.
ENDLOOP.
ENDIF. * Call BAdI to adjust the attribute-value tables
PERFORM call_badi_cond_read_before_get TABLES px_t_return
USING pi_s_cond_session
pi_s_product_datx
pi_s_prodcat_datx
pi_s_keyfigx
pi_application
CHANGING l_t_attrib_value
pe_subrc.
CHECK pe_subrc IS INITIAL. LOOP AT <lt_working_set> ASSIGNING <ls_working_set_item>. * check working set item
* don't continue if the attribute is not part of the working set OK
CLEAR l_not_ok.
LOOP AT l_t_attrib_value INTO l_s_attrib_value.
ASSIGN COMPONENT l_s_attrib_value-fieldname
OF STRUCTURE <ls_working_set_item>
TO <value>.
IF sy-subrc IS INITIAL AND
<value> NE l_s_attrib_value-value.
l_not_ok = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF l_not_ok = 'X'.
CONTINUE.
ENDIF. * get pointers to data of the working set
ASSIGN COMPONENT 'KBETR'
OF STRUCTURE <ls_working_set_item>
TO <kbetr>.
ASSIGN COMPONENT 'KONWA'
OF STRUCTURE <ls_working_set_item>
TO <konwa>.
ASSIGN COMPONENT 'KPEIN'
OF STRUCTURE <ls_working_set_item>
TO <kpein>.
ASSIGN COMPONENT 'KMEIN'
OF STRUCTURE <ls_working_set_item>
TO <kmein>.
ASSIGN COMPONENT 'TIMESTAMP_FROM'
OF STRUCTURE <ls_working_set_item>
TO <timestamp_from>.
ASSIGN COMPONENT 'TIMESTAMP_TO'
OF STRUCTURE <ls_working_set_item>
TO <timestamp_to>.
* transfer data to the condvalues
CLEAR pe_t_condvalues.
pe_t_condvalues-key_figure = pi_s_keyfigx-key_figure.
pe_t_condvalues-kappl = pi_s_keyfigx-kappl.
pe_t_condvalues-kvewe = pi_s_keyfigx-kvewe.
pe_t_condvalues-kschl = pi_s_keyfigx-kschl.
pe_t_condvalues-kotabnr = pi_s_keyfigx-kotabnr.
pe_t_condvalues-product_guid = pi_s_product_datx-product_guid.
pe_t_condvalues-category_guid = pi_s_prodcat_datx-category_guid.
* condition values:
pe_t_condvalues-kbetr = <kbetr>.
pe_t_condvalues-konwa = <konwa>.
pe_t_condvalues-kpein = <kpein>.
pe_t_condvalues-kmein = <kmein>.
* start date:
pe_t_condvalues-start_date = <timestamp_from>.
IF pe_t_condvalues-start_date LT pi_s_keyfigx-start_date.
pe_t_condvalues-start_date = pi_s_keyfigx-start_date.
ENDIF.
* end date:
pe_t_condvalues-end_date = <timestamp_to>.
IF pe_t_condvalues-end_date GT pi_s_keyfigx-end_date.
pe_t_condvalues-end_date = pi_s_keyfigx-end_date.
ENDIF.
APPEND pe_t_condvalues.
ENDLOOP. " at <lt_working_set> ENDFORM. " fill_condvalues_item

主程序

*&---------------------------------------------------------------------*
*& Report YCOND_INBOUND
*&
*&---------------------------------------------------------------------*
*&Service Pricing: Org/ZZZMODENO/PRICE_GRP/ZREPCODE/PRODUCT/用户量贩店DIS服务商服务定价批导
*&
*&---------------------------------------------------------------------* REPORT ZHSCRM_COND_INBOUND_50 LINE-SIZE . DATA GR_SELECTED_ID.
* Type pools
*----------------------------------------------------------------------*
TYPE-POOLS CTMNT. " Condition maintenance TYPE-POOLS CRMKC. " Marketing Planner TYPE-POOLS MKTRE. " CRM Rebates *----------------------------------------------------------------------*
* Constants
*----------------------------------------------------------------------*
CONSTANTS:
* Condition technique: applications
C_KAPPL_CRM TYPE /SAPCND/APPLICATION VALUE 'CRM',
C_KAPPL_BBP TYPE /SAPCND/APPLICATION VALUE 'BBP', * Condition technique: usages
C_KVEWE_PR TYPE /SAPCND/USAGE VALUE 'PR',
C_KVEWE_FG TYPE /SAPCND/USAGE VALUE 'FG',
C_KVEWE_BO TYPE /SAPCND/USAGE VALUE 'BO',
C_KVEWE_CD TYPE /SAPCND/USAGE VALUE 'CD', * Condition technique: calculation type
C_KRECH_A TYPE PRCT_CALCULATION_TYPE VALUE 'A',
C_KRECH_B TYPE PRCT_CALCULATION_TYPE VALUE 'B',
C_KRECH_C TYPE PRCT_CALCULATION_TYPE VALUE 'C', * Condition technique: fieldnames
C_FNAME_VARNUMH TYPE FIELDNAME VALUE 'VARNUMH',
C_FNAME_KAPPL TYPE FIELDNAME VALUE 'KAPPL',
C_FNAME_KVEWE TYPE FIELDNAME VALUE 'KVEWE',
C_FNAME_KSCHL TYPE FIELDNAME VALUE 'KSCHL',
C_FNAME_KOTABNR TYPE FIELDNAME VALUE 'KOTABNR',
C_FNAME_PRODUCT TYPE FIELDNAME VALUE 'PRODUCT',
C_FNAME_SOLD_TO_PARTY TYPE FIELDNAME VALUE 'SOLD_TO_PARTY', * Condition technique: free goods:
C_FGD_INCL_POS TYPE FGD_EXCL_INCL_IND VALUE '',
C_FGD_EXCL TYPE FGD_EXCL_INCL_IND VALUE '',
C_FGD_INCL_NOPOS TYPE FGD_EXCL_INCL_IND VALUE '', * Rebates: rebate procedure
C_BOVER_A TYPE /BON/BOVER VALUE 'A', * Rebates:
* strategy for condition records when deleting rebate agreements
C_COND_DELETE_A TYPE /BON/AG_COND_DELETE VALUE 'A',
C_COND_DELETE_B TYPE /BON/AG_COND_DELETE VALUE 'B', * planning customer
C_PLANCUST_TYPE_01 TYPE CRM_MKTPL_PLCUST_TYPE VALUE '',
C_PLANCUST_TYPE_02 TYPE CRM_MKTPL_PLCUST_TYPE VALUE '',
C_PLANCUST_TYPE_03 TYPE CRM_MKTPL_PLCUST_TYPE VALUE '', * partner function
C_PCFT_SOLD_TO_PARTY TYPE CRMT_PARTNER_FCT VALUE '',
C_PCFT_SHIP_TO_PARTY TYPE CRMT_PARTNER_FCT VALUE '',
C_PCFT_BILL_TO_PARTY TYPE CRMT_PARTNER_FCT VALUE '',
C_PCFT_PAYER TYPE CRMT_PARTNER_FCT VALUE '', * product level
C_PRODUCT_TYPE_PR TYPE CRM_MKTPL_PRODUCT_TYPE VALUE 'PR',
C_PRODUCT_TYPE_PG TYPE CRM_MKTPL_PRODUCT_TYPE VALUE 'PG',
C_PRODUCT_TYPE_PH TYPE CRM_MKTPL_PRODUCT_TYPE VALUE 'PH',
C_PRODUCT_TYPE_PS TYPE CRM_MKTPL_PRODUCT_TYPE VALUE 'PS', * product group
C_PROD_GRP_1 TYPE CRM_MKTPL_PROD_GRP VALUE '',
C_PROD_GRP_2 TYPE CRM_MKTPL_PROD_GRP VALUE '',
C_PROD_GRP_3 TYPE CRM_MKTPL_PROD_GRP VALUE '',
C_PROD_GRP_4 TYPE CRM_MKTPL_PROD_GRP VALUE '',
C_PROD_GRP_5 TYPE CRM_MKTPL_PROD_GRP VALUE '', * conflict resolution
C_CONFL_RES_01 TYPE CRM_MKTPL_CONFL_RES VALUE '',
C_CONFL_RES_02 TYPE CRM_MKTPL_CONFL_RES VALUE '',
C_CONFL_RES_03 TYPE CRM_MKTPL_CONFL_RES VALUE '',
C_CONFL_RES_04 TYPE CRM_MKTPL_CONFL_RES VALUE ' ', * locking message
C_LOCK_MSG_NO TYPE MSGNR VALUE '',
C_LOCK_MSG_ID TYPE ARBGB VALUE '/SAPCND/MAINTENANCE', * reset message
C_RESET_MSG_NO TYPE MSGNR VALUE '',
C_RESET_MSG_ID TYPE ARBGB VALUE '/SAPCND/MAINTENANCE', * project planning system: object type
C_OBTYP_CPG TYPE CGPL_OBJECT_TYPE VALUE 'CPG',
C_OBTYP_CPT TYPE CGPL_OBJECT_TYPE VALUE 'CPT',
C_OBTYP_MPL TYPE CGPL_OBJECT_TYPE VALUE 'MPL',
C_OBTYP_MPT TYPE CGPL_OBJECT_TYPE VALUE 'MPT',
C_OBTYP_TPM TYPE CGPL_OBJECT_TYPE VALUE 'TPM',
C_OBTYP_TPT TYPE CGPL_OBJECT_TYPE VALUE 'TPT',
C_OBTYP_ACP TYPE CGPL_OBJECT_TYPE VALUE 'ACP', * condition reference: reference type
C_REF_TYPE_ACP TYPE /SAPCND/REFERENCE_TYPE VALUE 'ACP', * project planning system: application
C_APPLICATION_ACP TYPE CGPL_APPLICATION_TYPE VALUE 'ACP', * project planning system: application
C_APPLICATION_MKT TYPE CGPL_APPLICATION_TYPE VALUE 'MKT'. *---------------------------------------------------------------------*
* Types
*---------------------------------------------------------------------*
TYPES: BEGIN OF GTY_TGP_DERIVED_BP,
BPHN_GUID TYPE BU_NODE_GUID,
BP_GUID TYPE BU_PARTNER_GUID,
END OF GTY_TGP_DERIVED_BP. *---------------------------------------------------------------------*
* Global data
*---------------------------------------------------------------------*
DATA:
* BAdI
G_CRM_MKTPL_COND_IF TYPE REF TO IF_EX_CRM_MKTPL_COND_IF,
* Data for deriving BP associated to BPHN
GT_TGP_DERIVED_BPS TYPE HASHED TABLE OF GTY_TGP_DERIVED_BP
WITH UNIQUE KEY BPHN_GUID.
*---------------------------------------------------------------------*
* Ranges
*---------------------------------------------------------------------*
RANGES:
GR_SELECTED_COTYPE FOR CRM_MKTPL_COND_IF_UI-COST_CATEGORY,
GR_SELECTED_COCAT FOR CRM_MKTPL_COND_IF_UI-COST_CATEGORY,
GR_SELECTED_SPMETH FOR CRM_MKTPL_COND_IF_UI-SPEND_METHOD,
GR_SELECTED_DIMETH FOR CRM_MKTPL_COND_IF_UI-DISC_METHOD. TYPES: BEGIN OF TY_DOC,
P_SORG TYPE CRMT_SALES_ORG,
P_DISCHL TYPE CRMT_DISTRIBUTION_CHANNEL,
P_ZZZMODENO TYPE ZMODENO,
P_ZREPCODE TYPE ZRPCODE,
P_BP TYPE BU_PARTNER,
P_PROD TYPE COMT_PRODUCT_ID,
P_PGRP TYPE CRMT_PRICE_GRP,
P_KBETR TYPE KBETR,
P_KMEIN TYPE KMEIN,
P_KPEIN TYPE KPEIN,
P_KONWA TYPE KONWA,
P_BDATE TYPE D,
P_EDATE TYPE D,
HIERARCHY_ID TYPE COMT_HIERARCHY_ID,
CATEGORY_ID TYPE COMT_CATEGORY_ID,
END OF TY_DOC. DATA: WA_DOC TYPE TY_DOC,
IT_DOC TYPE STANDARD TABLE OF TY_DOC. CLEAR: WA_DOC, IT_DOC. DATA:TIMESTAMP_TO TYPE /SAPCND/TIMESTAMP_TO,
TIMESTAMP_TO_A TYPE TIMESTAMP,
TIMESTAMP_TO_B TYPE TIMESTAMP,
TO_DAY TYPE D.
CLEAR: TIMESTAMP_TO, TO_DAY, TIMESTAMP_TO_A, TIMESTAMP_TO_B. TYPES: BEGIN OF TY_ERR,
INX TYPE I,
ERR_LOG TYPE STRING,
END OF TY_ERR. DATA: IT_ERR TYPE STANDARD TABLE OF TY_ERR,
WA_ERR TYPE TY_ERR.
CLEAR:IT_ERR, WA_ERR. DATA:
TIM TYPE T,
TZ TYPE TTZZ-TZONE.
TZ = SY-ZONLO. *******************************************************************
* User-defined Include-files (if necessary). *
******************************************************************* INCLUDE LCRM_MKTPL_COND_IFF16. INCLUDE LCRM_MKTPL_COND_IFF17. INCLUDE LCRM_MKTPL_COND_IFF18. INCLUDE LCRM_MKTPL_COND_IFF19. INCLUDE LCRM_MKTPL_COND_IFF20. INCLUDE LCRM_MKTPL_COND_IFF21. INCLUDE LCRM_MKTPL_COND_IFF22. INCLUDE LCRM_MKTPL_COND_IFF23. INCLUDE LCRM_MKTPL_COND_IFF39. INCLUDE LCRM_MKTPL_COND_IFF54. INCLUDE LCRM_MKTPL_COND_IFF55. INCLUDE LCRM_MKTPL_COND_IFF56. INCLUDE LCRM_MKTPL_COND_IFF62. INCLUDE LCRM_MKTPL_COND_IFF75. INCLUDE LCRM_MKTPL_COND_IFF76. INCLUDE LCRM_MKTPL_COND_IFF77. INCLUDE LCRM_MKTPL_COND_IFF81. INCLUDE LCRM_MKTPL_COND_IFF96. INCLUDE LCRM_MKTPL_COND_IFF97. TYPES:BEGIN OF ZCRM_MKTPL_COND_IF_CUST_DATAX,
KAPPL TYPE CRM_MKTPL_KAPPL_CDET,
KVEWE TYPE CRM_MKTPL_KVEWE_CDET,
KSCHL TYPE CRM_MKTPL_KSCHL_CDET,
KOTABNR TYPE /SAPCND/COND_TABLE_ID,
PRODUCT_GUID TYPE COMT_PRODUCT_GUID,
SALES_ORG TYPE CRMT_SALES_ORG,
CHANNEL TYPE CRMT_DISTRIBUTION_CHANNEL,
ZZZMODENO TYPE ZMODENO,
ZREPCODE TYPE ZRPCODE,
PARTNER TYPE BU_PARTNER_GUID,
BILL_TO_PARTY TYPE CRMT_BILL_TO_PARTY,
PRICE_GRP TYPE CRMT_PRICE_GRP,
KMEIN TYPE KMEIN,
KPEIN TYPE PRCT_COND_PRICING_UNIT,
KONWA TYPE KONWA,
TIMESTAMP_FROM TYPE TIMESTAMP,
TIMESTAMP_TO TYPE TIMESTAMP,
KBETR_PRT TYPE KBETR,
RELEASE_STATUS TYPE /SAPCND/RELEASE_STATUS,
HIERARCHY_GUID TYPE COMT_HIERARCHY_GUID,
HIER_CAT_GUID TYPE COMT_CATEGORY_GUID,
END OF ZCRM_MKTPL_COND_IF_CUST_DATAX.
DATA:ZCRM_MKTPL_COND_IF_CUST_DATAX TYPE ZCRM_MKTPL_COND_IF_CUST_DATAX. DATA:
L_T_CUST_DATAX TYPE TABLE OF ZCRM_MKTPL_COND_IF_CUST_DATAX,
L_S_CUST_DATAX TYPE ZCRM_MKTPL_COND_IF_CUST_DATAX,
L_CUSTOMER TYPE CRM_MKTPL_CUSTOMER,
L_CUSTOMERX TYPE CRM_MKTPL_COND_IF_CUSTOMERX,
L_S_CDET TYPE CRMC_MKTPL_CDET,
L_S_COTAB TYPE CRMC_MKTPL_COTAB,
L_START TYPE TIMESTAMP,
L_END TYPE TIMESTAMP,
L_CGEN_TYPE TYPE CRM_MKTPL_CGEN_TYPE. * PI_CRM_MKTPL_GUID = '12EAA394AF2EB540A4310C4030A1BBDC'. * By default everything is okay * ----- Determine the condition generation type
* PERFORM find_cgentype TABLES pe_t_return
* USING pi_crm_mktpl_guid
* CHANGING l_cgen_type
* pe_subrc.
* CHECK pe_subrc IS INITIAL.
DATA:LS_ORG TYPE CRMT_SALES_ORG.
DATA:LS_CHANNEL TYPE CRMT_DISTRIBUTION_CHANNEL.
DATA:LS_MKTGUID TYPE BAPI_MARKETINGELEMENT_GUID-MKTELEMENT_GUID.
DATA:LS_CAMPAIGN TYPE CRM_MKTPL_CAMPAIGN. DATA:LT_JSTAT_TAB TYPE CGPL_JSTAT_TAB.
DATA:LS_JSTAT TYPE JSTAT. DATA:LT_ATTR TYPE /SAPCND/T_ATTRIB_VALUE_INT.
DATA:LS_ATTR TYPE /SAPCND/ATTRIB_VALUE_INT. DATA:LS_MKTELEMENT TYPE CRM_MKTPL_MKTELEMENT.
DATA:LS_MKTELEMENT_GUID
TYPE BAPI_MARKETINGELEMENT_GUID-MKTELEMENT_GUID. DATA:LS_BAPIGUID TYPE BAPI_MARKETINGELEMENT_GUID-MKTELEMENT_GUID.
DATA:LV_CRM_MKTPL_ATTR TYPE CRM_MKTPL_MKTELEMENT. DATA:LS_KVEWE TYPE CRM_MKTPL_KVEWE.
DATA:LT_RETURN TYPE STANDARD TABLE OF BAPIRET2. DATA:L_T_COND_SESSION TYPE TABLE OF CRM_MKTPL_COND_IF_CONDSESSION.
DATA:L_S_COND_SESSION TYPE CRM_MKTPL_COND_IF_CONDSESSION.
DATA: LS_BAL_LOG TYPE BAL_S_LOG.
DATA:L_HLOG TYPE BALLOGHNDL.
DATA:LV_RESULT TYPE SYSUBRC.
DATA:LS_T_RETURN TYPE STANDARD TABLE OF BAPIRET2.
DATA:PE_SUBRC TYPE SY-SUBRC.
DATA:TMP_COND_SESSION TYPE /SAPCND/MAINT_SESSION_ID. PARAMETERS:
P_SORG TYPE CRMT_SALES_ORG NO-DISPLAY,
P_DISCHL TYPE CRMT_DISTRIBUTION_CHANNEL NO-DISPLAY,
P_BP TYPE BU_PARTNER NO-DISPLAY,
P_PROD TYPE COMT_PRODUCT_ID NO-DISPLAY,
P_PGRP TYPE CRMT_PRICE_GRP NO-DISPLAY,
P_KBETR TYPE KBETR NO-DISPLAY,
P_KONWA TYPE KONWA DEFAULT 'USD' NO-DISPLAY,
P_KMEIN TYPE KMEIN DEFAULT 'PC' NO-DISPLAY,
P_BDATE TYPE D NO-DISPLAY,
P_EDATE TYPE D NO-DISPLAY. PARAMETERS:
P_FILE LIKE RLGRAP-FILENAME. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM SELECT_FILE. START-OF-SELECTION.
PERFORM IMPORT_DATA. IF IT_ERR IS INITIAL. CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
I_S_LOG = LS_BAL_LOG
IMPORTING
E_LOG_HANDLE = L_HLOG
EXCEPTIONS
OTHERS = .
* initialize condition session
CALL FUNCTION '/SAPCND/MNT_INIT_OW'
EXPORTING
I_APPLICATION = C_KAPPL_CRM
I_HLOG = L_HLOG
I_MAINT_CONTEXT = 'GCM'
I_GROUPNAME = 'ZHSI001' "/SAPCND/GROUPT_I表里找得
IMPORTING
E_HSESSION = TMP_COND_SESSION
E_RESULT = LV_RESULT
EXCEPTIONS
EXC_STOP_WORK =
EXC_RFC =
OTHERS = . L_S_COND_SESSION-SESSION = TMP_COND_SESSION.
L_S_COND_SESSION-KAPPL = 'CRM'.
L_S_COND_SESSION-GROUP = 'GCM'.
APPEND L_S_COND_SESSION TO L_T_COND_SESSION. LOOP AT IT_DOC INTO WA_DOC. CLEAR L_S_CUST_DATAX.
L_S_CUST_DATAX-KAPPL = 'CRM'.
L_S_CUST_DATAX-KVEWE = 'PR'.
L_S_CUST_DATAX-KSCHL = 'ZJP1'."/SAPCND/GROUPT_I表里找得 L_S_CUST_DATAX-SALES_ORG = WA_DOC-P_SORG.
L_S_CUST_DATAX-CHANNEL = WA_DOC-P_DISCHL. DATA:LS_PRODGUID TYPE COMT_PRODUCT_GUID.
SELECT SINGLE PRODUCT_GUID
INTO LS_PRODGUID
FROM COMM_PRODUCT
WHERE PRODUCT_ID = WA_DOC-P_PROD.
L_S_CUST_DATAX-PRODUCT_GUID = LS_PRODGUID. SELECT SINGLE CATEGORY_GUID
INTO L_S_CUST_DATAX-HIER_CAT_GUID
FROM COMM_CATEGORY
WHERE CATEGORY_ID = WA_DOC-CATEGORY_ID. SELECT SINGLE UNIT
INTO WA_DOC-P_KMEIN
FROM COMM_PR_UNIT
WHERE PRODUCT_GUID = LS_PRODGUID
AND IS_BASE_UNIT = 'X'.
IF SY-SUBRC <> .
SELECT SINGLE UNIT
INTO WA_DOC-P_KMEIN
FROM COMM_PR_UNIT
WHERE PRODUCT_GUID = LS_PRODGUID
AND IS_BASE_UNIT = ''.
ENDIF. L_S_CUST_DATAX-PRICE_GRP = WA_DOC-P_PGRP. L_S_CUST_DATAX-KOTABNR = 'CUS00011'.
L_S_CUST_DATAX-KPEIN = .
L_S_CUST_DATAX-KMEIN = WA_DOC-P_KMEIN.
L_S_CUST_DATAX-ZZZMODENO = WA_DOC-P_ZZZMODENO.
L_S_CUST_DATAX-ZREPCODE = WA_DOC-P_ZREPCODE.
L_S_CUST_DATAX-KONWA = WA_DOC-P_KONWA.
L_S_CUST_DATAX-KBETR_PRT = WA_DOC-P_KBETR.
L_S_CUST_DATAX-RELEASE_STATUS = SPACE. CLEAR TIM. CONVERT DATE WA_DOC-P_BDATE TIME TIM
INTO TIME STAMP L_S_CUST_DATAX-TIMESTAMP_FROM TIME ZONE TZ. TIM = ''. CONVERT DATE WA_DOC-P_EDATE TIME TIM
INTO TIME STAMP L_S_CUST_DATAX-TIMESTAMP_TO TIME ZONE TZ. APPEND L_S_CUST_DATAX TO L_T_CUST_DATAX.
CLEAR L_S_CUST_DATAX. ENDLOOP. PERFORM ZMNT_COND_RECORDS_CD TABLES L_T_CUST_DATAX
LS_T_RETURN
L_T_COND_SESSION
USING
L_START
L_END
L_HLOG
CHANGING PE_SUBRC.
CHECK PE_SUBRC IS INITIAL. DATA:LV_SESSION LIKE LINE OF L_T_COND_SESSION.
DATA:I_SESSION TYPE /SAPCND/MAINT_SESSION_ID.
READ TABLE L_T_COND_SESSION INTO LV_SESSION INDEX .
I_SESSION = LV_SESSION-SESSION.
* VIII. save the changes
CALL FUNCTION '/SAPCND/MNT_SAVE_OW'
EXPORTING
I_HSESSION = I_SESSION
I_HLOG = L_HLOG
* i_with_commit = 'X'
IMPORTING
E_RESULT = LV_RESULT
EXCEPTIONS
EXC_STOP_WORK =
EXC_RFC =
EXC_UPDATING_DATABASE =
EXC_CREATING_SCALE_FIELDNAME =
EXC_UNEXPECTED_ERROR =
OTHERS = .
IF SY-SUBRC <> OR LV_RESULT > .
ENDIF. COMMIT WORK. PERFORM OUTPUT_RESULT. ELSE. LOOP AT IT_ERR INTO WA_ERR.
WRITE :/ '行:', WA_ERR-INX, WA_ERR-ERR_LOG.
ENDLOOP. ENDIF. *----------------------------------------------------------------------*
***INCLUDE LCRM_MKTPL_COND_IFF93 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form zmnt_cond_records_cd
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ZMNT_COND_RECORDS_CD
TABLES PI_T_CUST_DATAX STRUCTURE ZCRM_MKTPL_COND_IF_CUST_DATAX
PX_T_RETURN STRUCTURE BAPIRET2
L_T_COND_SESSION STRUCTURE CRM_MKTPL_COND_IF_CONDSESSION
USING
PI_START TYPE TIMESTAMP
PI_END TYPE TIMESTAMP
L_HLOG TYPE BALLOGHNDL
CHANGING PE_SUBRC TYPE SY-SUBRC. DATA: L_SUBRC TYPE SY-SUBRC,
L_RESULT TYPE SY-SUBRC,
L_OVERLAP TYPE C,
L_LOCKING TYPE C,
L_T_WORKING_SET TYPE REF TO DATA,
L_T_WORKING_SET_OLD TYPE REF TO DATA,
L_T_VARNUMH_OVERLAP TYPE TABLE OF CRM_MKTPL_COND_IF_VARNUMH,
L_T_RETURN TYPE TABLE OF BAPIRET2. * loop at application
LOOP AT L_T_COND_SESSION.
* ----- get old data from the condition buffer
PERFORM GET_WORKING_SET TABLES PX_T_RETURN
USING L_T_COND_SESSION
SPACE
L_HLOG
CHANGING L_T_WORKING_SET_OLD
L_SUBRC.
CHECK L_SUBRC IS INITIAL. * ----- build working set
PERFORM BUILD_WORKING_SET TABLES PI_T_CUST_DATAX
USING L_T_COND_SESSION
PI_START
PI_END
L_HLOG
L_T_WORKING_SET_OLD
CHANGING L_T_WORKING_SET
L_SUBRC.
CHECK L_SUBRC IS INITIAL. IF NOT L_SUBRC IS INITIAL.
PE_SUBRC = .
EXIT.
ENDIF. * ----- pass new working set to the condition buffer
PERFORM MAINTAIN_CONDITION_RECORDS TABLES PX_T_RETURN
USING L_T_COND_SESSION
L_T_WORKING_SET
L_HLOG
CHANGING L_RESULT
L_SUBRC.
IF NOT L_SUBRC IS INITIAL.
* error in the condition maintenance
PE_SUBRC = .
EXIT.
ELSE.
IF L_RESULT LE .
* everything o.k. -> notify changes and continue CONTINUE. " -> next application
ENDIF.
ENDIF. IF L_RESULT GT .
* problems have occured, possibly due to overlap conflicts
*------ do overlap conflict resolution ENDIF. ENDLOOP. * add messages from condition log to return table
PERFORM ADD_COND_MESSAGES_TO_RETURN TABLES PX_T_RETURN
USING L_HLOG. ENDFORM. " zmnt_cond_records_cd *&---------------------------------------------------------------------*
*& Form get_working_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PX_T_RETURN text
* -->PI_S_COND_SESSION text
* -->PI_INCL_DEL_RECORDS text
* -->PI_HLOG text
* -->PE_T_WORKING_SET text
*----------------------------------------------------------------------*
FORM GET_WORKING_SET
TABLES PX_T_RETURN STRUCTURE BAPIRET2
USING PI_S_COND_SESSION TYPE CRM_MKTPL_COND_IF_CONDSESSION
PI_INCL_DEL_RECORDS TYPE XFELD
PI_HLOG TYPE BALLOGHNDL
CHANGING PE_T_WORKING_SET TYPE REF TO DATA
PE_SUBRC TYPE SY-SUBRC. DATA: LS_ATTRIB_VALUE TYPE /SAPCND/ATTRIB_VALUE_INT,
LT_ATTRIB_VALUE TYPE /SAPCND/T_ATTRIB_VALUE_INT,
L_RESULT TYPE SY-SUBRC,
L_SUPPR_DEL_RECORDS TYPE /SAPCND/BOOLEAN,
L_MSGTEXT(). CLEAR PE_T_WORKING_SET. * Build range for selection
LS_ATTRIB_VALUE-FIELDNAME = 'KAPPL'.
LS_ATTRIB_VALUE-VALUE = PI_S_COND_SESSION-KAPPL.
APPEND LS_ATTRIB_VALUE TO LT_ATTRIB_VALUE.
LS_ATTRIB_VALUE-FIELDNAME = 'KVEWE'.
LS_ATTRIB_VALUE-VALUE = 'PR'.
APPEND LS_ATTRIB_VALUE TO LT_ATTRIB_VALUE. * include/suppress the deleted records
IF PI_INCL_DEL_RECORDS IS INITIAL.
L_SUPPR_DEL_RECORDS = 'X'.
ENDIF. CALL FUNCTION '/SAPCND/MNT_GET_WORKING_SET_OW'
EXPORTING
I_HSESSION = PI_S_COND_SESSION-SESSION
I_HLOG = PI_HLOG
* I_CALL_FIELD_CHECK = ' '
I_SUPPRESS_DELETED_RECORDS = L_SUPPR_DEL_RECORDS
* IT_ATTRIB_SELECTION_EXT =
IT_ATTRIB_VALUE_INT = LT_ATTRIB_VALUE
IMPORTING
ET_WORKING_SET_INT = PE_T_WORKING_SET
* ET_WORKING_SET_EXT =
E_RESULT = L_RESULT
EXCEPTIONS
EXC_STOP_WORK =
EXC_RFC =
EXC_CONV_JAVA =
EXC_ATTR_CONV =
EXC_FIELD_CHECK =
EXC_UPDATING_WORKING_SET =
EXC_NOT_INT_AND_EXT =
EXC_EXTERNAL_ONLY =
EXC_CONVERT_RANGES =
EXC_CREATING_OBJECT_NAMES =
EXC_STOP_WORK_BADI =
EXC_IMPLEMENTATION_MISSING =
EXC_ADDING_DEBUG_TRACE_MSG =
EXC_BAL_LOG =
OTHERS = .
IF SY-SUBRC <> .
PE_SUBRC = SY-SUBRC.
* Collect message from /SAPCND/MNT_GET_WORKING_SET_OW
PERFORM APPEND_RETURN TABLES PX_T_RETURN.
* Send message: System has stopped the processing
MESSAGE E025(CRM_MKTPL_COND_IF)
WITH '/SAPCND/MNT_GET_WORKING_SET_OW'
INTO L_MSGTEXT.
PERFORM APPEND_RETURN TABLES PX_T_RETURN.
ENDIF. ENDFORM. " get_working_set_cd *&---------------------------------------------------------------------*
*& Form build_working_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PI_T_CUST_DATAX text
* -->PI_S_COND_SESSION text
* -->PI_START text
* -->PI_END text
* -->PI_HLOG text
* -->PI_T_WORKING_SET_OLD text
* -->PE_T_WORKING_SET text
*----------------------------------------------------------------------*
FORM BUILD_WORKING_SET
TABLES PI_T_CUST_DATAX STRUCTURE ZCRM_MKTPL_COND_IF_CUST_DATAX
USING PI_S_COND_SESSION TYPE CRM_MKTPL_COND_IF_CONDSESSION
PI_START TYPE TIMESTAMP
PI_END TYPE TIMESTAMP
PI_HLOG TYPE BALLOGHNDL
PI_T_WORKING_SET_OLD TYPE REF TO DATA
CHANGING PE_T_WORKING_SET TYPE REF TO DATA
PE_SUBRC TYPE SY-SUBRC. DATA: L_WS_NAME_BROAD TYPE /SAPCND/WORKING_SET_NAME. DATA: L_WORKING_SET_ITEM TYPE REF TO DATA,
L_WORKING_SET_ITEM_BROAD TYPE REF TO DATA. FIELD-SYMBOLS: <LT_WORKING_SET> TYPE TABLE,
<LT_WORKING_SET_OLD> TYPE TABLE,
<LS_WORKING_SET_ITEM> TYPE ANY,
<LS_WORKING_SET_ITEM_BROAD> TYPE ANY. * get names of working set (broad working set):
CALL FUNCTION '/SAPCND/GEN_WORKING_SET_NAME'
EXPORTING
I_APPLICATION = PI_S_COND_SESSION-KAPPL
IMPORTING
E_WORKING_SET_NAME_INT = L_WS_NAME_BROAD. * get pointer to the imported working set
ASSIGN PI_T_WORKING_SET_OLD->* TO <LT_WORKING_SET_OLD>.
* get pointers to the exporting working sets
CREATE DATA PE_T_WORKING_SET LIKE <LT_WORKING_SET_OLD>.
ASSIGN PE_T_WORKING_SET->* TO <LT_WORKING_SET>. CREATE DATA L_WORKING_SET_ITEM LIKE LINE OF <LT_WORKING_SET_OLD>.
ASSIGN L_WORKING_SET_ITEM->* TO <LS_WORKING_SET_ITEM>. CREATE DATA L_WORKING_SET_ITEM_BROAD TYPE (L_WS_NAME_BROAD). * loop at products/sales_org/distribution_channel/partner_function
LOOP AT PI_T_CUST_DATAX. * fill working set for one item
PERFORM BUILD_WORKING_SET_ITEM USING PI_S_COND_SESSION
PI_T_CUST_DATAX
PI_START
PI_END
PI_HLOG
L_WS_NAME_BROAD
CHANGING L_WORKING_SET_ITEM_BROAD
PE_SUBRC. ASSIGN L_WORKING_SET_ITEM_BROAD->*
TO <LS_WORKING_SET_ITEM_BROAD>.
MOVE-CORRESPONDING <LS_WORKING_SET_ITEM_BROAD>
TO <LS_WORKING_SET_ITEM>.
APPEND <LS_WORKING_SET_ITEM> TO <LT_WORKING_SET>. ENDLOOP. " at pi_t_cust_datax ENDFORM. " build_working_set_cd *&---------------------------------------------------------------------*
*& Form build_working_set_item
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PI_S_COND_SESSION text
* -->PI_S_CUST_DATAX text
* -->PI_START text
* -->PI_END text
* -->PI_HLOG text
* -->PI_WS_NAME text
* -->PE_WORKING_SET_ITEM text
*----------------------------------------------------------------------*
FORM BUILD_WORKING_SET_ITEM
USING PI_S_COND_SESSION TYPE CRM_MKTPL_COND_IF_CONDSESSION
PI_S_CUST_DATAX TYPE ZCRM_MKTPL_COND_IF_CUST_DATAX
PI_START TYPE TIMESTAMP
PI_END TYPE TIMESTAMP
PI_HLOG TYPE BALLOGHNDL
PI_WS_NAME TYPE /SAPCND/WORKING_SET_NAME
CHANGING PE_WORKING_SET_ITEM TYPE REF TO DATA
PE_SUBRC TYPE SY-SUBRC. * internal working sets
FIELD-SYMBOLS: <LS_WORKING_SET_ITEM> TYPE ANY. * field values (in alphabetic order)
FIELD-SYMBOLS:
<BILL_TO_PARTY> TYPE CRMT_BILL_TO_PARTY,
<CLIENT> TYPE MANDT,
<DIS_CHANNEL> TYPE CRMT_DISTRIBUTION_CHANNEL,
<DIVISION> TYPE CRMT_DIVISION,
<HIER_NO_GUID> TYPE BU_HIERNR_GUID,
<HIER_NODE_GUID> TYPE BU_NODE_GUID,
<KAPPL> TYPE /SAPCND/APPLICATION,
<KOTABNR> TYPE /SAPCND/COND_TABLE_ID,
<KSCHL> TYPE /SAPCND/COND_TYPE,
<KVEWE> TYPE /SAPCND/USAGE,
<PARTNER_GUID> TYPE BU_PARTNER_GUID,
<PAYER> TYPE CRMT_PAYER,
<ZZZMODENO> TYPE ZMODENO,
<ZREPCODE> TYPE ZRPCODE,
<KMEIN> TYPE KMEIN,
<KPEIN> TYPE KPEIN,
<KONWA> TYPE KONWA,
<RELEASE_STATUS> TYPE /SAPCND/RELEASE_STATUS,
<KBETR_PRT> TYPE PRCT_COND_RATE,
<PRICE_GRP> TYPE CRMT_PRICE_GRP,
<PRODUCT> TYPE COMT_PRODUCT_GUID,
<SALES_ORG> TYPE CRMT_SALES_ORG,
<SHIP_TO_PARTY> TYPE CRMT_SHIP_TO_PARTY,
<SOLD_TO_PARTY> TYPE CRMT_SOLD_TO_PARTY,
<TIMESTAMP_FROM> TYPE /SAPCND/TIMESTAMP_FROM,
<TIMESTAMP_TO> TYPE /SAPCND/TIMESTAMP_TO,
<HIER_CAT_GUID> TYPE COMT_CATEGORY_GUID,
<VARNUMH> TYPE /SAPCND/COND_TABLE_ENTRY_ID. * create internal working sets
CREATE DATA PE_WORKING_SET_ITEM TYPE (PI_WS_NAME).
ASSIGN PE_WORKING_SET_ITEM->* TO <LS_WORKING_SET_ITEM>. * assignments (in alphabetic order)
ASSIGN COMPONENT 'ZZZMODENO' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <ZZZMODENO>.
ASSIGN COMPONENT 'CLIENT' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <CLIENT>.
ASSIGN COMPONENT 'ZREPCODE' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <ZREPCODE>.
ASSIGN COMPONENT 'DIVISION' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <DIVISION>.
ASSIGN COMPONENT 'HIER_NO_GUID' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <HIER_NO_GUID>.
ASSIGN COMPONENT 'HIER_NODE_GUID' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <HIER_NODE_GUID>.
ASSIGN COMPONENT 'KAPPL' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KAPPL>.
ASSIGN COMPONENT 'KOTABNR' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KOTABNR>.
ASSIGN COMPONENT 'KSCHL' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KSCHL>.
ASSIGN COMPONENT 'KVEWE' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KVEWE>.
ASSIGN COMPONENT 'PARTNER_GUID' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <PARTNER_GUID>.
ASSIGN COMPONENT 'PAYER' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <PAYER>.
ASSIGN COMPONENT 'KMEIN' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KMEIN>.
ASSIGN COMPONENT 'KPEIN' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KPEIN>.
ASSIGN COMPONENT 'KONWA' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KONWA>.
ASSIGN COMPONENT 'PRODUCT' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <PRODUCT>.
ASSIGN COMPONENT 'SALES_ORG' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <SALES_ORG>.
ASSIGN COMPONENT 'SHIP_TO_PARTY' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <SHIP_TO_PARTY>.
ASSIGN COMPONENT 'SOLD_TO_PARTY' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <SOLD_TO_PARTY>.
ASSIGN COMPONENT 'KBETR' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <KBETR_PRT>.
ASSIGN COMPONENT 'PRICE_GRP' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <PRICE_GRP>. ASSIGN COMPONENT 'TIMESTAMP_FROM' OF STRUCTURE
<LS_WORKING_SET_ITEM> TO <TIMESTAMP_FROM>.
ASSIGN COMPONENT 'TIMESTAMP_TO' OF STRUCTURE
<LS_WORKING_SET_ITEM> TO <TIMESTAMP_TO>.
ASSIGN COMPONENT 'VARNUMH' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <VARNUMH>.
ASSIGN COMPONENT 'RELEASE_STATUS' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <RELEASE_STATUS>.
ASSIGN COMPONENT 'HIER_CAT_GUID' OF STRUCTURE <LS_WORKING_SET_ITEM>
TO <HIER_CAT_GUID>. * assign condition record fields
* create new varnumh
CALL FUNCTION 'GUID_CREATE'
IMPORTING
EV_GUID_16 = <VARNUMH>.
* other fields
<CLIENT> = SY-MANDT.
* <TIMESTAMP_FROM> = PI_START.
* <TIMESTAMP_TO> = PI_END.
<KAPPL> = PI_S_CUST_DATAX-KAPPL.
<KVEWE> = PI_S_CUST_DATAX-KVEWE.
<KOTABNR> = PI_S_CUST_DATAX-KOTABNR.
<KSCHL> = PI_S_CUST_DATAX-KSCHL.
<SALES_ORG> = PI_S_CUST_DATAX-SALES_ORG.
* <DIS_CHANNEL> = PI_S_CUST_DATAX-CHANNEL.
* <division> = pi_s_cust_datax-division.
<PRODUCT> = PI_S_CUST_DATAX-PRODUCT_GUID.
<ZZZMODENO> = PI_S_CUST_DATAX-ZZZMODENO.
<ZREPCODE> = PI_S_CUST_DATAX-ZREPCODE.
* <PARTNER_GUID> = PI_S_CUST_DATAX-PARTNER.
* <sold_to_party> = pi_s_cust_datax-sold_to_party.
<KMEIN> = PI_S_CUST_DATAX-KMEIN.
<KPEIN> = PI_S_CUST_DATAX-KPEIN.
<KONWA> = PI_S_CUST_DATAX-KONWA.
<PRICE_GRP> = PI_S_CUST_DATAX-PRICE_GRP.
<KBETR_PRT> = PI_S_CUST_DATAX-KBETR_PRT.
<TIMESTAMP_FROM> = PI_S_CUST_DATAX-TIMESTAMP_FROM.
<TIMESTAMP_TO> = PI_S_CUST_DATAX-TIMESTAMP_TO.
<RELEASE_STATUS> = PI_S_CUST_DATAX-RELEASE_STATUS.
* <HIER_CAT_GUID> = PI_S_CUST_DATAX-HIER_CAT_GUID.
* <ship_to_party> = pi_s_cust_datax-ship_to_party.
* <BILL_TO_PARTY> = PI_S_CUST_DATAX-BILL_TO_PARTY.
* <payer> = pi_s_cust_datax-payer.
* customer hierarchy
* <HIER_NO_GUID> = PI_S_CUST_DATAX-HIERARCHY_GUID.
* <hier_node_guid> = pi_s_cust_datax-HIER_CAT_GUID. ENDFORM. " build_working_set_item_cd *&---------------------------------------------------------------------*
*& Form maintain_condition_records
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PX_T_RETURN text
* -->PI_S_COND_SESSION text
* -->PI_T_WORKING_SET text
* -->PE_RESULT text
* -->PE_SUBRC text
*----------------------------------------------------------------------*
FORM MAINTAIN_CONDITION_RECORDS
TABLES PX_T_RETURN STRUCTURE BAPIRET2
USING PI_S_COND_SESSION TYPE CRM_MKTPL_COND_IF_CONDSESSION
PI_T_WORKING_SET TYPE REF TO DATA
PI_HLOG TYPE BALLOGHNDL
CHANGING PE_RESULT TYPE SY-SUBRC
PE_SUBRC TYPE SY-SUBRC. DATA: L_MSGTEXT(). * By default: everything is okay
CLEAR: PE_RESULT,
PE_SUBRC. CALL FUNCTION '/SAPCND/MNT_MAINTAIN_OW'
EXPORTING
I_HSESSION = PI_S_COND_SESSION-SESSION
I_HLOG = PI_HLOG
* IT_WORKING_SET_EXT =
IT_WORKING_SET_INT = PI_T_WORKING_SET
IMPORTING
E_RESULT = PE_RESULT
EXCEPTIONS
EXC_STOP_WORK =
EXC_DEFAULT_VALUE =
EXC_DEFAULT_CHECK =
EXC_CONV_JAVA =
EXC_RFC =
EXC_UPDATING_WORKING_SET =
EXC_STOP_WORK_BADI =
EXC_IMPLEMENTATION_MISSING =
EXC_DELETING_MSG_LOG =
EXC_ADDING_DEBUG_TRACE_MSG =
EXC_PUT_CONSTANTS =
OTHERS = .
IF SY-SUBRC <> .
PE_SUBRC = SY-SUBRC.
* Collect message from /SAPCND/MNT_MAINTAIN_OW
PERFORM APPEND_RETURN TABLES PX_T_RETURN.
* Send message: System has stopped processing
MESSAGE E025(CRM_MKTPL_COND_IF)
WITH '/SAPCND/MNT_MAINTAIN_OW'
INTO L_MSGTEXT.
PERFORM APPEND_RETURN TABLES PX_T_RETURN.
ENDIF. ENDFORM. " maintain_condition_records *&---------------------------------------------------------------------*
*& Form IMPORT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM IMPORT_DATA .
DATA : ITAB_FILE LIKE ZALSMEX_TABLINE OCCURS WITH HEADER LINE.
REFRESH ITAB_FILE. DATA: LV_DATFM LIKE USR01-DATFM,
LV_YEAR() TYPE C,
LV_MONTH() TYPE C,
LV_DAY() TYPE C.
DATA: ZINX TYPE I.
CLEAR ZINX. CALL FUNCTION 'ZEXCEL_UPLOAD'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = ''
I_BEGIN_ROW = ''
I_END_COL = ''
I_END_ROW = ''
TABLES
INTERN = ITAB_FILE
EXCEPTIONS
INCONSISTENT_PARAMETERS =
UPLOAD_OLE =
OTHERS = . LOOP AT ITAB_FILE FROM . CASE ITAB_FILE-COL. WHEN .
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
SELECT COUNT( * )
FROM COMM_PR_FRG_ROD
WHERE SALES_ORG = ITAB_FILE-VALUE.
IF SY-SUBRC = .
WA_DOC-P_SORG = ITAB_FILE-VALUE.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Sales organization not exist !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Sales organization can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN .
IF ITAB_FILE-VALUE <> ''.
WA_DOC-P_ZZZMODENO = ITAB_FILE-VALUE.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'custom model can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN ."price group
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
SELECT COUNT( * )
FROM CRMC_PRICEGRP
WHERE PRICE_GROUP = ITAB_FILE-VALUE.
IF SY-SUBRC = .
WA_DOC-P_PGRP = ITAB_FILE-VALUE.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Price group not exist !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Price group can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN ."Repair Code
IF ITAB_FILE-VALUE <> ''.
WA_DOC-P_ZREPCODE = ITAB_FILE-VALUE.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Repair Code can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN ."product id
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
CALL FUNCTION 'CONVERSION_EXIT_PRID1_INPUT'
EXPORTING
INPUT = ITAB_FILE-VALUE
IMPORTING
OUTPUT = WA_DOC-P_PROD
EXCEPTIONS
LENGHT_ERROR =
CUSTOMIZING_ERROR =
OTHERS = .
SELECT COUNT( * )
FROM COMM_PRODUCT
WHERE PRODUCT_ID = WA_DOC-P_PROD.
IF SY-SUBRC <> .
CONCATENATE WA_ERR-ERR_LOG
'product not exist !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. ELSE.
CONCATENATE WA_ERR-ERR_LOG
'product can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''. ENDIF. WHEN .
IF ITAB_FILE-VALUE <> '' AND ITAB_FILE-VALUE > '0.00'.
CONDENSE ITAB_FILE-VALUE.
WA_DOC-P_KBETR = ITAB_FILE-VALUE.
* wa_doc-p_KPEIN = itab_file-value.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'amount is not valid !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''. ENDIF.
WHEN .
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
WA_DOC-P_KONWA = ITAB_FILE-VALUE.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Condition currency can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF.
WHEN .
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
IF ITAB_FILE-VALUE CA '-/.'.
SEARCH ITAB_FILE-VALUE FOR '-'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ELSE.
SEARCH ITAB_FILE-VALUE FOR '/'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ELSE.
SEARCH ITAB_FILE-VALUE FOR '.'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ENDIF.
ENDIF.
ENDIF.
IF STRLEN( LV_MONTH ) = .
CONCATENATE '' LV_MONTH INTO LV_MONTH.
ENDIF.
IF STRLEN( LV_DAY ) = .
CONCATENATE '' LV_DAY INTO LV_DAY.
ENDIF.
CONCATENATE LV_YEAR LV_MONTH LV_DAY INTO WA_DOC-P_BDATE.
ELSE.
WA_DOC-P_BDATE = ITAB_FILE-VALUE.
ENDIF.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Valid From can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN .
IF ITAB_FILE-VALUE <> ''.
CONDENSE ITAB_FILE-VALUE.
IF ITAB_FILE-VALUE CA '-/.'.
SEARCH ITAB_FILE-VALUE FOR '-'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ELSE.
SEARCH ITAB_FILE-VALUE FOR '/'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ELSE.
SEARCH ITAB_FILE-VALUE FOR '.'.
IF SY-SUBRC = .
SPLIT ITAB_FILE-VALUE AT '-' INTO LV_YEAR LV_MONTH LV_DAY.
ENDIF.
ENDIF.
ENDIF.
IF STRLEN( LV_MONTH ) = .
CONCATENATE '' LV_MONTH INTO LV_MONTH.
ENDIF.
IF STRLEN( LV_DAY ) = .
CONCATENATE '' LV_DAY INTO LV_DAY.
ENDIF.
CONCATENATE LV_YEAR LV_MONTH LV_DAY INTO WA_DOC-P_EDATE.
ELSE.
WA_DOC-P_EDATE = ITAB_FILE-VALUE.
ENDIF.
ELSE.
CONCATENATE WA_ERR-ERR_LOG
'Valid To can not be initial !'
INTO WA_ERR-ERR_LOG SEPARATED BY ''.
ENDIF. WHEN OTHERS. ENDCASE.
AT END OF ROW.
APPEND WA_DOC TO IT_DOC.
CLEAR WA_DOC.
ZINX = ZINX + .
IF WA_ERR-ERR_LOG IS NOT INITIAL.
WA_ERR-INX = ZINX.
APPEND WA_ERR TO IT_ERR.
CLEAR WA_ERR.
ENDIF.
ENDAT.
ENDLOOP. ENDFORM. "IMPORT_DATA
*&---------------------------------------------------------------------*
*& Form SELECT_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SELECT_FILE . CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',Excel Files,*.xls,All Files,*.*.'()
TITLE = '####'()
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS =
NO_BATCH =
SELECTION_CANCEL =
SELECTION_ERROR =
OTHERS = .
IF SY-SUBRC <> AND SY-SUBRC <> .
MESSAGE E100(ZDEV) WITH '#######'().
ENDIF. ENDFORM. " SELECT_FILE
*&---------------------------------------------------------------------*
*& Form OUTPUT_RESULT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OUTPUT_RESULT . LOOP AT IT_DOC INTO WA_DOC. WRITE:/ '販売組織:', WA_DOC-P_SORG NO-GAP, 'お客様モデル:', WA_DOC-P_ZZZMODENO NO-GAP
,'顧客の区分:',WA_DOC-P_PGRP,'保守コード',WA_DOC-P_ZREPCODE NO-GAP, '製品ID', WA_DOC-P_PROD NO-GROUPING,
'価格', WA_DOC-P_KBETR, '有効開始日', WA_DOC-P_BDATE, '有効終日', WA_DOC-P_EDATE. ENDLOOP. ENDFORM. " OUTPUT_RESULT

CRM 价格批导的更多相关文章

  1. CRM 价格批导2<上一个太多冗余>

    INCLUDE:LCRM_MKTPL_COND_IFF39 *--------------------------------------------------------------------- ...

  2. 采购信息记录批导BAPI

    转自:https://www.cnblogs.com/freeandeasy/p/11810272.html作者的话:   可以批导创建及修改信息记录的主数据.而且可以对条件中的时间段及其数量等级中的 ...

  3. 物料主数据批导bapi

    创建物料主数据,根据模板不同批导原材料,半成品,成品.可根据实际需求对字段进行增删. report zmmr_bapi_mm01 no standard page HEADING. type-POOL ...

  4. VA01销售订单批导问题解决

    1业务场景 事务代码:VA01创建销售订单,VA02修改销售订单 可以通过BAPI_SALESORDER_CREATEFROMDAT2批量创建 可以通过BAPI_SALESORDER_CHANGE批量 ...

  5. BDC批导数据

    1.输入事务代码SHBD进入以下界面: 点击新建记录,创建一个新的BDC录屏记录, 然后根据记录条件进行 BDC录屏代码 perform fill_bdc using ANLKL. call tran ...

  6. CRM系统个性化定制的对企业的优势作用

    伴随着科学技术的不断发展,企业信息化建设也在持续地开展.企业管理模式已经开始由传统模式向信息化转变,并且越来越多的企业开始使用互联网软件来进行辅助管理,这一趋势也让CRM客户管理系统得到快速的发展.市 ...

  7. ABAP 订单-交货单-发货过账自动完成 案例

    *&---------------------------------------------------------------------* *& Report  ZSDR006 ...

  8. SAP 直营验单

    *&---------------------------------------------------------------------* *& Report  ZSDR005 ...

  9. WDA基础十四:ALV字段属性配置表

    ALV配置表管理 一.字段属性配置表 对于可编辑的ALV不用这个,尽可能多的设置一些控制: 单元格类型:默认A,特殊选择 ZLYE_TYPE        E       A       1      ...

随机推荐

  1. 【matlab】笔记_1

    基本操作 ans 最近计算的答案 clc 清除命令行窗口 diary 将命令行窗口文本保存到文件中 矩阵 用逗号 (,) 或空格分隔各行元素. 用分号(;)分隔各列元素. a':装置矩阵. 要执行元素 ...

  2. Python实现机器学习算法:EM算法

    ''' 数据集:伪造数据集(两个高斯分布混合) 数据集长度:1000 ------------------------------ 运行结果: ---------------------------- ...

  3. spring配置freemarker

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  4. _itemmod_extract_enchant

    comment 备注 entry 物品ID CanExtract 1 - 可提取随机FM 0 - 不可提取随机FM,当CanExtract = 1 且有随机FM效果时,随机FM效果会被提取 CanEn ...

  5. logback的使用

    一.logback与log4j的比较(摘自他人博客):     1.更快的实现  Logback的内核重写了,在一些关键执行路径上性能提升10倍以上.而且logback不仅性能提升了,初始化内存加载也 ...

  6. Scrapy基本命令

    全局命令,不用在项目中运行fetch:爬取网页,不依赖爬虫项目直接爬网页信息,并显示爬取过程scrapy命令格式:scrapy 命令名 --参数,可能通过--控制,例如:scrapy fetch -h ...

  7. (转载)Attempting to add QLayout "" to MainWindow "", which already has a layout

    给QWidget或者QDialog设置布局的时候方式很简单.创建好一个布局:mainLayout,然后不停地把各个控件往mainLayout里面放,最后调用setLayout(mainLayout)就 ...

  8. Rest数据服务查询类-根据id查询

    Rest数据服务查询类 需要iserver data服务支持,但请求的时候,不依赖SuperMap js lib包. 构造函数:QueryById=function(p_params): p_para ...

  9. Codeforces 801B - Valued Keys

    B. Valued Keys 题目链接:http://codeforces.com/contest/801/problem/B time limit per test 2 seconds memory ...

  10. Anaconda 简单介绍 -- 环境管理

    前面介绍了 Anaconda 的安装,接下来介绍一下 简单使用,后续并实时更新. 常用操作命令: 环境操作 1.查看环境管理的全部命令帮助: conda env -h 2.查看当前系统下的环境: co ...