*&---------------------------------------------------------------------*
*& Report Z_SGH_LED_PO_OSR
*&---------------------------------------------------------------------*
* Automate PO to GR/GI process for Consignment Fill-Up *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Date: Aug. 1, 2023 *
*& Author: LSULI *
*& Title: Automate PO to GR/GI process for Consignment Fill-Up *
*&---------------------------------------------------------------------*
* CHANGE HISTORY:
* Request# Who Date Description Of Change
* MRDK982127 LSULI 8/1/2023 Initial Version.
* MRDK983613 ALIM 10/11/2023 Bug Fix - Proper Variable Clear
* ========== ========== ========== ===================================
REPORT z_sgh_led_po_osr.
INCLUDE zsgh_led_po_osr_top.
TABLES: nast.
DATA: retcode LIKE sy-subrc, "Returncode
xscreen(1) TYPE c.
CONSTANTS: c_error TYPE symsgty VALUE 'E',
c_zsd_zccf TYPE symsgid VALUE 'ZSD_ZCCF'.
FORM entry USING return_code TYPE i
us_screen TYPE c.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDFORM.
FORM processing.
IF nast-objky+10 NE space.
l_vbeln = nast-objky+16(10).
ELSE.
l_vbeln = nast-objky.
ENDIF.
* Get details from Delivery
SELECT a~vbeln,
a~kunag,
a~kunnr,
b~posnr,
b~matnr,
b~werks,
b~uepos,
b~vgbel,
b~charg,
b~lfimg,
b~meins,
b~vgpos,
b~pstyv
INTO TABLE @DATA(it_deliv)
FROM likp AS a
JOIN lips AS b
ON a~vbeln EQ b~vbeln
WHERE a~vbeln EQ @l_vbeln
AND a~vbeln NOT IN
( SELECT delno1
FROM zsd_consign_log
WHERE delno1 EQ @l_vbeln
AND progress = 'COMPLETED ALL' ). " IF PO is already created, it will not create again.
LOOP AT it_deliv ASSIGNING FIELD-SYMBOL(<x_all>).
MOVE-CORRESPONDING <x_all> TO ls_input.
APPEND ls_input TO lt_input.
* Assign the correct sloc for Osram China or Malaysia
IF sy-index EQ c_1.
IF <x_all>-kunnr CS 'OSR01CR'.
l_lgort = 'OOWX'.
ELSEIF <x_all>-kunnr CS 'OSR02CR'.
l_lgort = 'OOPA'.
* ELSE.
* l_lgort = 'OOPA'.
ENDIF.
ENDIF.
ENDLOOP.
* Retrieve data from log table to check if initial run or to continue where it was left off.
SELECT SINGLE
delno1,
pono,
grdoc,
grdocyr,
batchflag,
delno2,
gidoc,
gidocyr,
progress
INTO @DATA(x_log)
FROM zsd_consign_log
WHERE delno1 EQ @l_vbeln
AND progress <> 'COMPLETED ALL'.
IF sy-subrc EQ 0.
IF x_log-progress EQ 'PO CREATION SUCCESS'.
PERFORM create_gr.
PERFORM copy_batch.
PERFORM create_do.
PERFORM perform_do_change.
PERFORM perform_do_pgi.
ELSEIF x_log-progress EQ 'GR COMPLETED' AND x_log-batchflag CS 'N'.
PERFORM copy_batch.
PERFORM create_do.
PERFORM perform_do_change.
PERFORM perform_do_pgi.
ELSEIF x_log-progress EQ 'GR COMPLETED' AND x_log-batchflag CS 'Y'.
PERFORM create_do.
PERFORM perform_do_change.
PERFORM perform_do_pgi.
ELSEIF x_log-progress EQ 'DELIVERY CREATED'.
PERFORM perform_do_change.
PERFORM perform_do_pgi.
ELSEIF x_log-progress EQ 'DELIVERY ASSIGN'.
PERFORM perform_do_pgi.
ELSE.
EXIT.
ENDIF.
ELSE.
PERFORM validation.
PERFORM create_po .
PERFORM create_gr.
PERFORM copy_batch.
PERFORM create_do.
PERFORM perform_do_change.
PERFORM perform_do_pgi.
ENDIF.
CLEAR: l_vbeln, l_lgort, wa_osr, ls_input, w_poheaderx, w_poheader, v_count, l_pono,
x_header_ret, v_ponumber, x_bapi_items, l_grdoc, l_delv_no.
REFRESH: lt_input, it_delv_data, it_itemc, it_itemspl, it_vbpok, t_return, it_return, lt_return, it_bapi_items,
it_bapi_item, it_mseg, it_return_gr_b, it_ret, t_poitem, t_poitemx, t_poschedule, t_poschedulex, it_request,
it_create.
ENDFORM.
FORM f_protocol_update USING pv_msgid TYPE symsgid "Message ID
pv_msgty TYPE symsgty "Message Type
pv_msgno TYPE symsgno "Message Number
pv_msgv1 TYPE symsgv "Message Variable 1
pv_msgv2 TYPE symsgv "Message Variable 2
pv_msgv3 TYPE symsgv "Message Variable 3
pv_msgv4 TYPE symsgv. "Message Variable 4
IF pv_msgty = c_error.
retcode = 1.
ENDIF.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = pv_msgid
msg_nr = pv_msgno
msg_ty = pv_msgty
msg_v1 = pv_msgv1
msg_v2 = pv_msgv2
msg_v3 = pv_msgv3
msg_v4 = pv_msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM validation.
* Retrieve consignment fill-up order
SELECT SINGLE vgbel, vgpos, matnr, lfimg
INTO @DATA(x_vbeln_sp)
FROM lips
WHERE vbeln = @l_vbeln
AND uepos = ''
.
SELECT SINGLE vbelv ,posnn
INTO @DATA(x_order_ex)
FROM vbfa
WHERE vbeln = @x_vbeln_sp-vgbel
AND vbtyp_n = @c_c
AND vbtyp_v = @c_c
.
IF sy-subrc EQ 0.
*Retrieve consignment fill-up order detail
SELECT SINGLE vbeln , posnr ,matnr, kwmeng
INTO @DATA(x_inte_order)
FROM vbap
WHERE vbeln = @x_vbeln_sp-vgbel
AND posnr = @x_vbeln_sp-vgpos
AND matnr = @x_vbeln_sp-matnr.
IF sy-subrc EQ 0. " Check the internal line match for the external line in maintail table
SELECT COUNT(*)
INTO @DATA(lv_cnt2)
FROM zsd_consign_ls
WHERE vbeln = @x_inte_order-vbeln
AND posnr = @x_inte_order-posnr
AND matnr = @x_inte_order-matnr
AND kwmeng EQ @x_inte_order-kwmeng
.
v_count = lv_cnt2 .
IF lv_cnt2 = 0 . " Check the internal line match for the external line
clear v_count .
SELECT COUNT(*)
INTO @DATA(lv_cnt)
FROM vbap
WHERE vbeln = @x_order_ex-vbelv
AND posnr = @x_inte_order-posnr
AND matnr = @x_inte_order-matnr
AND kwmeng EQ @x_inte_order-kwmeng
.
v_count = lv_cnt .
endif.
ENDIF.
IF v_count EQ 0 .
* Update Nast
l_msg_ty = c_e.
l_msg_no = '' .
l_msg_id = c_zsd_zccf.
l_msg_v1 = 'Internal order is not match external order ,please check your order line '.
PERFORM f_protocol_update USING l_msg_id
l_msg_ty
l_msg_no
l_msg_v1
''
''
''.
EXIT.
ENDIF.
ENDIF.
ENDFORM.
FORM send_email.
DATA: lv_subject TYPE so_obj_des,
lv_text TYPE so_text255,
L_MARK TYPE CHAR20,
lt_sender TYPE TABLE OF ad_smtpadr.
DATA send_request TYPE REF TO cl_bcs.
DATA recipient TYPE REF TO if_recipient_bcs.
DATA main_text TYPE bcsy_text.
DATA bcs_exception TYPE REF TO cx_bcs.
DATA document TYPE REF TO cl_document_bcs.
DATA l_sender TYPE REF TO cl_sapuser_bcs.
DATA sent_to_all TYPE os_boolean.
lv_text = 'CREE Automation of Consignment fill-up message'.
* TRY.
* -------- create persistent send request ------------------------
send_request = cl_bcs=>create_persistent( ).
APPEND 'Hi,' TO main_text.
APPEND '' TO main_text.
APPEND lv_text TO main_text.
APPEND '' TO main_text.
APPEND 'Thank you!' TO main_text.
L_MARK = 'COMPLETED ALL' .
* select
* DELNO1 , PONO
* INTO @DATA(ls_list)
* from ZSD_CONSIGN_LOG .
* READ TABLE lt_input into x_input WITH KEY .
* READ TABLE ZSD_CONSIGN_LOG INTO wa_msa WITH KEY remark NE 'COMPLETED ALL' .
IF sy-subrc EQ 0.
CONCATENATE 'ERROR_OSRAM_AUTO_LTST ('
sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum(4) ')'
INTO lv_subject.
ELSE.
CONCATENATE 'OSRAM_AUTO_LTST('
sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum(4) ')'
INTO lv_subject.
ENDIF.
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = main_text
i_subject = lv_subject ).
send_request->set_document( document ).
l_sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD send_request->set_sender
EXPORTING
i_sender = l_sender.
* Set Receiver
SELECT low FROM tvarvc INTO TABLE lt_sender WHERE name = 'Z_OSRAMSTATUS_MAIL'. "Read STVARVC Address List
LOOP AT lt_sender INTO DATA(wa_sender).
recipient = cl_cam_address_bcs=>create_internet_address( wa_sender ).
send_request->add_recipient( recipient ).
ENDLOOP.
CALL METHOD send_request->set_send_immediately( 'X' ).
* ---------- send document ---------------------------------------
sent_to_all = send_request->send( i_with_error_screen = 'X' ).
COMMIT WORK.
IF sent_to_all IS INITIAL.
MESSAGE i500(sbcoms) WITH 222."l_address.
ELSE.
MESSAGE s022(so).
ENDIF.
* CATCH cx_bcs INTO bcs_exception.
* MESSAGE i865(so) WITH bcs_exception->error_type.
* ENDTRY.
ENDFORM.
FORM create_po .
* Get the tax code
SELECT eina~infnr,
eina~matnr,
eina~lifnr,
eine~ekorg,
eine~esokz,
eine~werks,
eine~netpr,
eine~mwskz
FROM eina
INNER JOIN eine
ON eina~infnr EQ eine~infnr
INTO TABLE @DATA(it_eina)
WHERE
eina~lifnr = 'IC86'
AND eina~loekz EQ @space
AND ein