output type: zccf program: Z_SGH_LED_PO_OSR

 

*&---------------------------------------------------------------------*
*& 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值