Calculate lead time on the grounds of factory calender
FUNCTION zzebp_change_sc_deliv_date.
- "----------------------------------------------------------------------
- "*"Local Interface:
- " IMPORTING
- " REFERENCE(IV_OBJECT_ID) TYPE CRMT_OBJECT_ID_DB
- " EXPORTING
- " REFERENCE(EV_SUCCESS) TYPE CHAR01
- " REFERENCE(ET_ITEMS) TYPE BBPT_PD_SC_ITEM_D
- " EXCEPTIONS
- " SC_NOT_FOUND
- " FACTORY_CALENDAR_ERROR
- "----------------------------------------------------------------------
DATA: ls_sc_header TYPE bbp_pds_sc_header_d,
ls_sc_upd_header TYPE bbp_pds_sc_header_u,
lt_items TYPE bbpt_pd_sc_item_d,
ls_item LIKE LINE OF lt_items,
ls_bbp_pdigp TYPE bbp_pdigp,
lv_date TYPE scal-date,
lv_factory_date TYPE scal-facdate,
lv_workingday_indicator TYPE scal-indicator,
lv_date_tmp TYPE sy-datum,
lv_index TYPE i,
lv_changed_flag(1) TYPE c,
lt_messages TYPE bbpt_pds_messages,
lv_update_flag(1) TYPE c.
ev_success = 'X'.
CALL FUNCTION 'BBP_PD_SC_GETDETAIL'
EXPORTING
i_object_id = iv_object_id
i_with_itemdata = 'X'
IMPORTING
e_header = ls_sc_header
TABLES
e_item = lt_items.
IF NOT ls_sc_header IS INITIAL.
CLEAR lv_changed_flag.
LOOP AT lt_items INTO ls_item.
lv_index = sy-tabix.
CLEAR: ls_bbp_pdigp,
lv_date,
lv_factory_date,
lv_workingday_indicator.
SELECT SINGLE *
INTO ls_bbp_pdigp
FROM bbp_pdigp
WHERE guid = ls_item-guid.
IF sy-subrc = 0.
- Check if the item is a catelog item, if so then add the lead time...
lv_date_tmp = ls_item-deliv_date.
lv_workingday_indicator = '+'.
IF NOT ls_bbp_pdigp-leadtime IS INITIAL.
lv_date_tmp = sy-datum.
ELSE.
lv_date_tmp = ls_item-deliv_date.
ENDIF.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
correct_option = '+'
date = lv_date_tmp
factory_calendar_id = 'ZA'
IMPORTING
date = lv_date
factorydate = lv_factory_date
workingday_indicator = lv_workingday_indicator
EXCEPTIONS
calendar_buffer_not_loadable = 1
correct_option_invalid = 2
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
OTHERS = 7.
IF sy-subrc = 0.
IF NOT lv_date IS INITIAL.
ls_item-deliv_date = lv_date.
IF NOT ls_bbp_pdigp-leadtime IS INITIAL.
lv_factory_date = lv_factory_date + ls_bbp_pdigp-leadtime.
CLEAR lv_date_tmp.
CALL FUNCTION 'FACTORYDATE_CONVERT_TO_DATE'
EXPORTING
factorydate = lv_factory_date
factory_calendar_id = 'ZA'
IMPORTING
date = lv_date_tmp. "Actual date
IF NOT lv_date_tmp IS INITIAL.
ls_item-deliv_date = lv_date_tmp.
ENDIF.
ENDIF.
MODIFY lt_items FROM ls_item INDEX lv_index.
lv_changed_flag = 'X'.
ENDIF.
ELSE.
CLEAR ev_success.
RAISE factory_calendar_error.
ENDIF.
ENDIF.
ENDLOOP.
IF lv_changed_flag = 'X'.
et_items[] = lt_items[].
ENDIF.
ELSE.
CLEAR ev_success.
ENDIF.
ENDFUNCTION.
- Axel's blog
- Login to post comments



