EDUCAÇÃO E TECNOLOGIA

Handling Unit (HU) Label Printing Through PPF in SAP EWM

Introduction

All of you know The SAP EWM PPF(Post Processing Framework) is a tool for the generic execution of functions and processes. It provides a uniform interface for triggering actions, such as printing labels or sending messages or faxes…etc.

Now I want to determine in order to print the Handling Unit(HU) label through PPF(Post Processing Framework) in SAP EWM.

Note: The attached source code is not only used in this scenario only, it was used with other                        scenarios also. Like the HU related data stored in table and displayed as report.                                  But now I am only projection  how to print a HU adobe form label through PPF concept.

Overview:-

 1) Application /SCWM/WME in transaction SPPFCADM

 2) Select Action Profile /SCWM/HU

 3) Select Action Definition ZHU_SHIPPING_LABEL.

 4) Implementation Name

 5) Interface Name

 6) Write the source code to print a label

7) How to print a label through /SCWM/PACK Transaction

Steps:-

1) Application /SCWM/WME in transaction SPPFCADM.

2) Select Action Profile /SCWM/HU.

3) Select Action Definition ZHU_SHIPPING_LABEL.

4) Implementation Name ZPRINT_SHIPPING_LABEL.

5) Interface Name ZIF_EXEC_METHODCALL_PPF and Name of Implementing Class                             ZHU_PRINT_SHIPPING_LABEL.

6)  Write the code to print the label

METHOD ZIF_EXEC_METHODCALL_PPF~EXECUTE. Data: e_carrier type /scwm/de_tsp, e_tu type /scwm/tunit, e_first_deliv type /scwm/dlv_header_out_prd_str, gt_odn type table of /scwm/dlv_header_out_prd_str, gt_hu type table of /scwm/tt_huhdr_int, gt_hu_pick type table of /scwm/tt_whohu, gt_hu_item type table of /scwm/tt_huitm_int, gt_odn_item type table of /scwm/dlv_item_out_prd_tab.
DATA: lt_shipper type table of adrc, ls_shipper type adrc, lt_shipto type table of adrc, ls_shipto type adrc, addrnumber type char10.
Data: e_label type zle_struct_ship_label, st_label_shipping type zle_struct_ship_label, wa_but000 type but000, nb_hu type i, dat type d.
Data: ls_doc_params type SFPDOCPARAMS, lv_function_name tYPE RS38L_FNAM. "is_doc_params is filled when click on print icon button in pack transaction. ls_doc_params = is_doc_params. "it_huhdr_int internal table is filled when click on print icon button. READ TABLE it_huhdr_int INTO @data(wa_huhdr) INDEX 1. REFRESH : gt_odn, gt_hu, gt_hu_pick, gt_hu_item, gt_odn_item. CLEAR : e_carrier, e_tu, e_first_deliv. *We will get (Transport unit number, outbound delivery numbers, carrier name and after different check get HU header and item). CALL FUNCTION 'ZGET_DATA_FROM_HU' EXPORTING i_hu = wa_huhdr-huident IMPORTING e_carrier = e_carrier e_tu = e_tu e_first_deliv = e_first_deliv TABLES gt_odn = gt_odn gt_hu = gt_hu gt_hu_pick = gt_hu_pick gt_hu_item = gt_hu_item gt_odn_item = gt_odn_item. "Adobe form name iv_form_name = 'ZSHIPPING_LABEL' **********************************************************
REFRESH lt_shipper, lt_shipto.
CLEAR : ls_shipto, ls_shipper, e_label, wa_but000, nb_hu. "shipper address
READ TABLE gt_odn INTO @data(wa_header) INDEX 1.
gt_party = wa_header-partyloc. READ TABLE gt_party INTO @data(wa_party) WITH KEY party_role = 'SO'.
IF wa_party-addressid IS NOT INITIAL.
addrnumber = wa_party-addressid.
ELSE.
addrnumber = wa_party-addressid_md.
ENDIF. SELECT * FROM adrc INTO TABLE lt_shipper WHERE addrnumber = addrnumber.
READ TABLE lt_shipper INTO ls_shipper WITH KEY nation = 'E'.
IF NOT sy-subrc IS INITIAL.
READ TABLE lt_shipper INTO ls_shipper WITH KEY nation = space.
ENDIF. e_label-sender_name1 = ls_shipper-name1.
e_label-sender_name2 = ls_shipper-city2.
concatenate ls_shipper-street ls_shipper-house_num1 into e_label-sender_street separated by space. e_label-sender_street2 = ls_shipper-str_suppl1.
e_label-sender_postal_code = ls_shipper-post_code1.
e_label-sender_city = ls_shipper-city1.
e_label-sender_country = ls_shipper-country. "shipto address
READ TABLE gt_party INTO wa_party_ship WITH KEY party_role = 'STPRT'.
IF wa_party_ship-addressid IS NOT INITIAL.
addrnumber = wa_party_ship-addressid. *determine name for shipto
SELECT * FROM adrc INTO TABLE lt_shipto WHERE addrnumber = addrnumber.
READ TABLE lt_shipto INTO ls_shipto WITH KEY nation = 'E'.
IF NOT sy-subrc IS INITIAL.
READ TABLE lt_shipto INTO ls_shipto WITH KEY nation = space.
ENDIF. e_label-rec_name1 = ls_shipto-name1.
e_label-rec_name2 = ls_shipto-city2.
e_label-rec_street = ls_shipto-street.
e_label-rec_street2 = ls_shipto-str_suppl1.
e_label-rec_postal_code = ls_shipto-post_code1.
e_label-rec_city = ls_shipto-city1.
e_label-rec_country = ls_shipto-country. select single * into wa_but000 from but000 where partner = e_tu-tsp.
if wa_but000-type = '2'. e_label-carrier_name1 = wa_but000-name_org1. e_label-carrier_name2 = wa_but000-name_org2.
else. e_label-carrier_name1 = wa_but000-name_first. e_label-carrier_name2 = wa_but000-name_last.
endif. e_label-tu_num = e_tu-tu_num.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT' exporting input = e_label-tu_num importing output = e_label-tu_num. concatenate dat+6(2) dat+4(2) dat+0(4) into e_label-ship_date
separated by '.'. e_label-hu_weight = wa_huhdr-g_weight.
e_label-hu_unit = wa_huhdr-unit_gw. describe table gt_hu lines nb_hu. read table gt_hu with key huident = wa_huhdr-huident.
if sy-subrc = 0. e_label-zzcurr_nbpacks = sy-tabix.
endif. e_label-zztotal_nbpacks = nb_hu. st_label_shipping = e_label.
**************************************************************
CONCATENATE iv_lgnum wa_huhdr-huident INTO xs_output_params-covtitle SEPARATED BY space. * Start pdf printing process TRY. CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' EXPORTING i_name = iv_form_name IMPORTING e_funcname = lv_function_name. CATCH cx_fp_api INTO lc_fp_api. MESSAGE e082(/scwm/print) WITH iv_form_name INTO mtext. RAISE error. ENDTRY. *--No print preview needed xs_output_params-nodialog = abap_true. CALL FUNCTION 'FP_JOB_OPEN' CHANGING ie_outputparams = xs_output_params EXCEPTIONS cancel = 1 usage_error = 2 system_error = 3 internal_error = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO mtext. RAISE error. ENDIF. CALL FUNCTION lv_function_name EXPORTING /1bcdwb/docparams = ls_doc_params st_label_shipping = st_label_shipping IMPORTING /1bcdwb/formoutput = es_form_output EXCEPTIONS usage_error = 1 system_error = 2 internal_error = 3 OTHERS = 4. IF sy-subrc <> 0.
* Implement suitable error handling here ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO mtext. RAISE error. ENDIF. CALL FUNCTION 'FP_JOB_CLOSE' EXCEPTIONS usage_error = 1 system_error = 2 internal_error = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO mtext. RAISE error. ENDIF. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" FUNCTION zget_data_from_hu.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_HU) TYPE /SCWM/DE_HUIDENT
*" VALUE(I_TAKE_TEXT) TYPE CHAR1 OPTIONAL
*" VALUE(I_ALL_PICKHU) TYPE CHAR1 OPTIONAL
*" REFERENCE(IV_LGNUM) TYPE /SCWM/LGNUM OPTIONAL
*" REFERENCE(IS_HUHDR) TYPE /SCWM/HUHDR OPTIONAL
*" EXPORTING
*" VALUE(E_CARRIER) TYPE /SCWM/DE_TSP
*" VALUE(E_TU) TYPE /SCWM/TUNIT
*" VALUE(E_FIRST_DELIV) TYPE /SCWM/DLV_HEADER_OUT_PRD_STR
*" TABLES
*" GT_ODN TYPE /SCWM/DLV_HEADER_OUT_PRD_TAB OPTIONAL
*" GT_HU TYPE /SCWM/TT_HUHDR_INT OPTIONAL
*" GT_HU_PICK TYPE /SCWM/TT_WHOHU OPTIONAL
*" GT_HU_ITEM TYPE /SCWM/TT_HUITM_INT OPTIONAL
*" GT_ODN_ITEM TYPE /SCWM/DLV_ITEM_OUT_PRD_TAB OPTIONAL
*" GT_IDENT TYPE /SCWM/TT_IDENT_INT OPTIONAL
*" GT_ODN_ALL_TU TYPE /SCWM/TT_DOCID OPTIONAL
*"---------------------------------------------------------------------- DATA: ls_exclude TYPE /scwm/dlv_query_excl_str. gt_who TYPE TABLE OF /scwm/who. wa_who TYPE /scwm/who. CLEAR ls_exclude. IF is_huhdr-guid_hu IS NOT INITIAL.
* perfect select by guid HU SELECT SINGLE * INTO wa_huhdr FROM /scwm/huhdr WHERE guid_hu = is_huhdr-guid_hu. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ELSEIF iv_lgnum IS NOT INITIAL.
* not perfect but not Sh... select huidnet and warehouse SELECT SINGLE * INTO wa_huhdr FROM /scwm/huhdr WHERE huident = i_hu AND lgnum = iv_lgnum. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ELSE.
* Risk of wrong selection if dupplicate huident in the table SELECT SINGLE * INTO wa_huhdr FROM /scwm/huhdr WHERE huident = i_hu. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ENDIF. CHECK sy-subrc = 0. ls_guid_hu-guid_hu = wa_huhdr-guid_hu. APPEND ls_guid_hu TO it_guid_hu. CALL FUNCTION '/SCWM/HU_GT_FILL' EXPORTING iv_appl = wmegc_huappl_wme it_guid_hu = it_guid_hu IMPORTING et_huhdr = et_huhdr et_ident = et_ident et_reference = et_huref et_tree = et_hutree et_huitm = et_huitm EXCEPTIONS error = 1 OTHERS = 2. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. gt_ident[] = et_ident. gt_hu_item[] = et_huitm. REFRESH : gt_header,gt_item_idn,gt_return,gt_docid,gt_odn[], gt_odn_item[]. CLEAR wa_docid. LOOP AT et_huitm INTO wa_huitm. CHECK wa_huitm-qdocid IS NOT INITIAL. wa_docid-docid = wa_huitm-qdocid. wa_docid-itemid = wa_huitm-qitmid. wa_docid-doccat = wa_huitm-qdoccat . APPEND wa_docid TO gt_docid. CLEAR wa_docid. ENDLOOP. IF i_take_text IS INITIAL. ls_exclude-head_text = 'X'. ls_exclude-head_textline = 'X'. ls_exclude-item_text = 'X'. ls_exclude-item_textline = 'X'. ENDIF. CALL FUNCTION '/SCWM/WHR_QUERY' EXPORTING it_docid = gt_docid is_exclude_data = ls_exclude IMPORTING et_whr_headers = gt_odn[] et_whr_items = gt_odn_item[] et_return = gt_return. CLEAR wa_huitm. READ TABLE et_huitm INTO wa_huitm INDEX 1. READ TABLE gt_odn INTO wa_header INDEX 1. e_first_deliv = wa_header. * get pick hu REFRESH : gt_ordim_o, gt_hu_pick, gt_who. IF gt_odn[] IS NOT INITIAL. SELECT * INTO TABLE gt_ordim_o FROM /scwm/ordim_o FOR ALL ENTRIES IN gt_odn WHERE rdoccat = gt_odn-doccat AND rdocid = gt_odn-docid. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ENDIF. DELETE gt_ordim_o WHERE lgnum NE wa_huhdr-lgnum. IF gt_ordim_o[] IS NOT INITIAL. * for Process PPP SELECT * INTO TABLE gt_who FROM /scwm/who FOR ALL ENTRIES IN gt_ordim_o WHERE lgnum = gt_ordim_o-lgnum AND who = gt_ordim_o-who. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. LOOP AT gt_who INTO wa_who. * check process PPP IF wa_who-topwhoid IS NOT INITIAL .
** PPP SELECT * APPENDING TABLE gt_hu_pick FROM /scwm/whohu WHERE lgnum = wa_who-lgnum AND who = wa_who-topwhoid. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ELSE. SELECT * APPENDING TABLE gt_hu_pick FROM /scwm/whohu WHERE lgnum = wa_who-lgnum AND who = wa_who-who. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. ENDIF. ENDLOOP. ENDIF. SORT gt_hu_pick BY lgnum huid. DELETE ADJACENT DUPLICATES FROM gt_hu_pick COMPARING lgnum huid. ** find tu attached to delivery CLEAR wa_tu_del. SELECT SINGLE * INTO wa_tu_del FROM /scwm/tu_dlv WHERE docno = wa_header-docno AND doccat = wa_header-doccat. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF.
* CHECK sy-subrc = 0. CLEAR wa_unit. SELECT SINGLE * INTO wa_unit FROM /scwm/tunit WHERE tu_num = wa_tu_del-tu_num. e_tu = wa_unit. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. * retrieve all hu in TU SELECT * INTO TABLE gt_tu_del FROM /scwm/tu_dlv WHERE tu_num = wa_tu_del-tu_num. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. SORT gt_tu_del BY top_huident. DELETE ADJACENT DUPLICATES FROM gt_tu_del COMPARING docid. " TOP_HUIDENT.
* delete gt_tu_del WHERE TOP_HUIDENT IS INITIAL. CLEAR hu_tracking. REFRESH gt_hu. REFRESH lt_docid_read. IF gt_tu_del IS NOT INITIAL. LOOP AT gt_tu_del INTO wa_tu_del. ls_docid-docid = wa_tu_del-docid. APPEND ls_docid TO lt_docid_read. CLEAR ls_docid. ENDLOOP. SORT lt_docid_read. DELETE ADJACENT DUPLICATES FROM lt_docid_read. CALL FUNCTION '/SCWM/DLV_GET_HUS_FOR_DELIVERY' EXPORTING iv_doccat = wa_tu_del-doccat it_docid = lt_docid_read IMPORTING et_high = lt_high et_huref = lt_huref et_ident = lt_ident et_huhdr = lt_huhdr et_huitm = lt_huitm et_hutree = lt_hutree EXCEPTIONS error = 1 OTHERS = 2. IF sy-subrc NE 0. sy-subrc = sy-subrc. ENDIF. gt_hu[] = lt_huhdr[]. gt_odn_all_tu[] = lt_docid_read[]. ENDIF. ENDFUNCTION. ENDMETHOD.

7) How to print a label through /SCWM/PACK Transaction

Printing

7.1) Execute the transaction /SCWM/PACK in EWM.7.2) Upon executing the transaction code /SCWM/PACK, it displays the below screen.

7.3) Enter the warehouse number G100, work center 1000 and Handling unit number                           76663456789270980. Click on Execute.

7.4) After execution, the below screen is displayed and put a cursor on handling unit number 76663456789270980(Green highlighted color) and double click on it and click on Print Icon Button in application tool bar.

7.5) Once the Print icon button is clicked, then source code is triggered and handling unit label is printed.

7.6) Go to SP01 transaction.

7.7) Execute the transaction and will see the label.

7.8) HU related required information is printed on adobe form HU label.

Note:  print the HU label either manually /SCWM/PACK/ or automatically or through RF after
the HU number is generated.In our case we use /SCWM/PACK transaction.

Conclusion: It can be concluded that the SAP EWM PPF is a tool for scheduling and monitoring          actions like printing, email, fax, workflows, etc. Action determination and processing can be done either automatically or by scheduling a job. This is like the NACE functionality in ERP, which is used to trigger the program and forms to execute any action in an application. Similarly, in EWM, the PPF plays that role but in a greater aspect.