ALV( 六 )、OO ALV 框架和布局

OO ALV属于一种SAP UI的框架,是以CFW( Control Framework )为基础实现的:

CL_GUI_OBJECT                                                      Proxy Class for a GUI Object

         |-- CL_FORMPAINTER_BASEWINDOW      SAP Form Painter Window Base Class

         |   |-- CL_FORMPAINTER_BITMAPWINDOW    SAP Form Painter Bitmap Window Class

         |   |-- CL_FORMPAINTER_TEXTWINDOW     SAP Form Painter Text Window Class

         |-- CL_GUI_CONTROL                                     Proxy Class for Control in GUI

         |   |-- CL_DSVAS_GUI_BUSIGRAPH           DSVAS: Proxy for Business Graphic

         |   |-- CL_GFW_GP_PRES_CHART                        GFW: Product--specific section of CL_GUI_GP_PRES (Chart)

         |   |-- CL_GFW_GP_PRES_PIG                     GFW: product specific section for web view

         |   |-- CL_GFW_GP_PRES_SAP                    GFW: product--specific section of CL_GUI_GP_PRES (SAP BUSG)

         |   |-- CL_GUI_ALV_GRID_BASE                 Basis Class for ALV Grid

         |   |   |-- CL_CALENDAR_CONTROL_SCHEDULE      Calendar View (Day, Week, Month)

         |   |   |--CL_GUI_ALV_GRID                           ALV List Viewer

         |   |     |-- CL_ALV_DD_LISTBOX                           D&D List Box

         |   |     |-- CL_BUKF_CAT_GRID                            Key Figures -- Grid of categories

         |   |     |-- CL_BUKF_DSRC_GRID                         Key Figures -- Grid for Data sources

         |   |     |-- CL_BUKF_FILTER_GRID              Key Figures -- Filter for Key Figure

         |   |     |-- CL_BUKF_KF_GRID                               Key Figures -- Grid for Key Figures

         |   |     |-- CL_BUKF_TERMS_GRID                      Key Figures -- Grid for terms

         |   |     |-- CL_FTR_GUI_ENTRY_ALV                  Class: ALV Grid Control for Initial Screen (Without Toolbar)

         |   |     |-- CL_GFW_GP_GRID_ALV                    ALV grid proxy

         |   |-- CL_GUI_AQQGRAPHIC_ADAPT      Network Adapter

         |   |-- CL_GUI_AQQGRAPHIC_CONTROL     BW Basis Class Network Control

         |   |   |-- CL_GUI_AQQGRAPHIC_NETPLAN         Network Control

         |   |-- CL_GUI_BARCHART                             Bar chart wrapper

         |   |-- CL_GUI_BORDERPAINTER                 SAP Border Painter Control Proxy Class

         |   |-- CL_GUI_BTFEDITOR                             SAP BTF Editor Control Proxy Class

         |   |-- CL_GUI_CALENDAR                             Calendar Control Proxy Class

         |   |-- CL_GUI_CHART_ENGINE_WIN       Graphics: Presentation Graphics (SAP GUI for Windows)

         |   |-- CL_GUI_CONTAINER                            Abstract Container for GUI Controls

         |   |   |-- CL_GUI_CONTAINER_INFO         Information on Container Controls

         |   |   |-- CL_GUI_CUSTOM_CONTAINER     Container for Custom Controls in the Screen Area

         |   |   |-- CL_GUI_DIALOGBOX_CONTAINER   Container for Custom Controls in the Screen Area

         |   |   |   |-- CL_ECL_VIEWER_FRAME                  Manage EAI Control in Own Window

         |   |   |   |-- CL_GUI_ECL_VIEWERBOX      ECL Viewer as Dialog Box

         |   |   |-- CL_GUI_DOCKING_CONTAINER    Docking Control Container

         |   |   |-- CL_GUI_EASY_SPLITTER_CONTAINER   Reduced Version of Splitter Container Control

         |   |   |   |-- CL_EU_EASY_SPLITTER_CONTAINER  Internal Test; Do Not Use

         |   |   |-- CL_GUI_GOS_CONTAINER                   Generic Object Services Container

         |   |   |-- CL_GUI_SIMPLE_CONTAINER             Anonymous Container

         |   |   |-- CL_GUI_SPLITTER_CONTAINER    Splitter Control

         |   |-- CL_GUI_ECL_2DCOMPARE               Compare Module for 2D Viewer

         |   |-- CL_GUI_ECL_3DCOMPARE               Compare Module for 3D Viewer

         |   |-- CL_GUI_ECL_3DMEASUREMENT      Measurement Module for 3D Viewer

         |   |-- CL_GUI_ECL_3DSECTIONING           Sectioning Module for 3D Viewer

         |   |-- CL_GUI_ECL_MARKUP                                Markup (Redlining) Component

         |   |-- CL_GUI_ECL_PMI                                           PMI Module for the 3D Viewer

         |   |-- CL_GUI_ECL_PRIMARYVIEWER       Basis Class for ECL Viewers (2D und 3D)

         |   |   |-- CL_GUI_ECL_2DVIEWER               Engineering Client 2D Viewer

         |   |   |-- CL_GUI_ECL_3DVIEWER               Engineering Client 3D Viewer

         |   |-- CL_GUI_ECL_VIEWER                          Proxy Class for Engineering Client Viewer

         |   |-- CL_GUI_FORMPAINTER                     SAP Form Painter Control Proxy Class

         |   |-- CL_GUI_GLT                                            Internal; Do Not Use!

         |   |-- CL_GUI_GP                                             GFW: Superclass of all graphics proxies

         |   |   |-- CL_GUI_GP_GRID                           GFW: Grid proxy

         |   |   |-- CL_GUI_GP_HIER                            GFW: Structure graphics

         |   |   |-- CL_GUI_GP_PRES                           GFW: Business graphic

         |   |-- CL_GUI_GRLT                                         Internal; Do Not Use !! ( restricted license -- see docu)

         |   |-- CL_GUI_HTML_EDITOR                      HTML Editor

         |   |-- CL_GUI_ILIDRAGNDROP_CONTROL           Interactive List: Drag & Drop

         |   |-- CL_GUI_MOVIE                                     SAP Movie Control

         |   |-- CL_GUI_NETCHART                              Network wrapper

         |   |   |-- CL_GFW_GP_HIER_SAP               GFW: Product--specific section of CL_GUI_GP_HIER (NETZ)

         |   |-- CL_GUI_PDFVIEWER                           PDF Viewer

         |   |-- CL_GUI_PICTURE                                  SAP Picture Control

         |   |-- CL_GFW_GP_PRES_WEB                   GFW: product specific section for web view

         |   |-- CL_GUI_RTF_EDITOR                          SAP SAPscript Editor Control

         |   |   |-- CL_GUI_SAPSCRIPT_EDITOR      SAP SAPscript Editor Control

         |   |-- CL_GUI_SELECTOR                               SAPSelector: Control for selecting colors or bitmaps

         |   |-- CL_GUI_SPH_STATUS_CONTROL      SAPphone: Status Event Control

         |   |-- CL_GUI_TABLEPAINTER                     SAP Table Painter Control Proxy Class

         |   |-- CL_GUI_TIMER                                      SAP Timer Control

         |   |-- CL_GUI_TOOLBAR                                         Toolbar Control

         |   |   |-- CL_CCMS_AL_GUI_TOOLBAR              Alerts: GUI Toolbar Used in the Visual Framework

         |   |-- CL_GUI_WCF_WWP                            Internal Tool -- DO NOT USE

         |   |-- CL_KW_AUTOMATION_CONTROL     Helper Class for General Automation Objects

         |   |-- CL_LC_EDITOR_CONTROL                 Lifecycle Editor Control

         |   |   |-- CL_GCM_LCEDITOR_CONTROL           Control for the display of definition life cycles

         |   |-- CL_SOTR_SPELLCHECKER                   Interface with OTR Spellchecker

         |   |-- CL_SRM_BASE_CONTROL                 SRM Control

         |   |   |-- CL_SRM_STACKED_CONTROL             RM Control with Stack

         |   |-- CL_TREE_CONTROL_BASE                 Internal Tree Control Class

         |   |   |--CL_GUI_SIMPLE_TREE(参考《User Dialogs.docx》文档)  Simple Tree Control

         |   |   |-- CL_ITEM_TREE_CONTROL                     Internal Tree Control Class

         |   |     |-- CL_GUI_COLUMN_TREE                     Column Tree Control

         |   |     |   |-- BDMT_CONTROL                              Administers Tree Control for Monitoring

         |   |     |   |-- CL_BUCC_TREE                                  Consistency Checks -- Library Tree

         |   |     |   |-- CL_GFW_COLUMN_TREE             Do not use!!!!!!!!

         |   |     |   |-- CL_GFW_GP_HIER_SAPTREE      GFW: Product--specific section of CL_GUI_GP_HIER

         |   |     |   |-- CL_HU_COLUMN_TREE                 Tree that Displays Handling Units

         |   |     |-- CL_GUI_LIST_TREE                      List Tree Control

         |   |-- C_OI_CONTAINER_CONTROL_PROXY    For Internal Use

         |   |-- SCE_HTML_CONTROL_EVENT_HANDLER   Event Handler for SCE HTML Control

         |   |-- CL_ALV_TREE_BASE                             Basis Class ALV Tree Control

         |   |   |-- CL_GUI_ALV_TREE                          ALV Tree Control

         |   |   |   |-- CL_GCM_WORKLIST_TREE     CM: Worklist

         |   |   |   |-- CL_PT_GUI_TMW_ALV_TREE        Small Modification to CL_GUI_ALV_TREE

         |   |   |-- CL_GUI_ALV_TREE_SIMPLE        Simple ALV Tree

         |   |   |-- CL_SIMPLE_TREE_VIEW_MM                  Simplest Kind of Tree

         |   |-- CL_GUI_ECATT_RECORDER                        SAP eCATT Recorder Control -- To be used by eCATT only!

         |   |-- CL_GUI_TEXTEDIT(参考《User Dialogs.docx》文档) SAP TextEdit Control

         |   |   |-- CL_GCM_TEXTEDIT                         CM: Long text control

         |   |   |-- CL_SOTR_TEXTEDIT                         Edit Control for the OTR

         |   |-- CL_GUI_HTML_VIEWER                     HTML Control Proxy Class

         |    |-- CL_BFW_HTML_VIEWER_POC                   Browser Framework: Proxy for HTML Control

         |    |-- CL_CCMS_BSP_VIEWER                                HTML Control Proxy Class

         |    |   |-- CL_CCMS_AL_OBJ_DET_HTML_VIEWER Alerts: Component That Displays Object Properties with HTML

         |    |-- CL_CCMS_FROG_HTML_VIEWER              CL_GUI_FROG_HTML_VIEWER

         |    |-- CL_SSF_HTML_VIEWER                        Smart Forms: Enhanced HTML Viewer

         |-- CL_GUI_ECL_MATRIX                               Represents a Complete Data Type with 13 Floats

         |-- CL_GUI_RESOURCES                                 GUI Resources (Fonts, Colors, ...)

         |   |-- CL_WF_GUI_RESOURCES                  Getting Front Settings

         |   |-- CL_WF_GUI_RESOURCES_4_HTML            Get Front Settings for HTML Generation

         |-- CL_KW_AUTOMATION_OBJECT          For Internal Use

         |-- CL_TABLEPAINTER_BASETABLE            SAP Table Painter Table Base Class

         |   |-- CL_TABLEPAINTER_TABLE                 SAP Table Painter Table Class

         |   |-- CL_TABLEPAINTER_TEMPLATE        SAP Table Painter Template Class

         |-- C_OI_AUTOMATION_OBJECT               For Internal Use

         |-- CL_GUI_FRONTEND_SERVICES            Frontend services

汪正军博客OO ALV

其中包括:

LVC_S_FACT,LVC_S_LAYO的介绍,

set_table_for_first_display方法的介绍,

隐藏标准工具栏,

refresh_table_display的参数( 可设置滚动条和布局和字段目录 ),

工具栏新增自定义按钮,

容器,

常用方法:get_current_cell获取鼠标所在网格位置;get_frontend_layout;get_frontend_fieldcat;get_selected_cells;

get_selected_columns;refresh_table_display;

常用事件:double_click双击;hotspot_click单击热点;增加button;数据变化data_changed(_finished);按钮单击事件button_click;刷新布局;HTTP超链接;下拉框;单元格风格;

对于data_changed事件,有时候希望对编辑错误的数据特殊显示,可以参照如下:

标准程序  BCALV_EDIT_03

SPLITER容器的用法:

*&---------------------------------------------------------------------*
*& Report  YTEST_OOALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ytest_ooalv MESSAGE-ID ys.
TYPE-POOLS: slis.
TABLES:yexpiv06,yiet07,yiet071,ywjsedi_vcasn_h,ywjsedi_vcasn_i.

INCLUDE yiauth00.
INCLUDE yiauth01.

SELECTION-SCREEN:BEGIN OF BLOCK blk1.
PARAMETERS:rd_1 RADIOBUTTON GROUP rd1 DEFAULT 'X' USER-COMMAND rd ,
           rd_2 RADIOBUTTON GROUP rd1,
           rd_3 RADIOBUTTON GROUP rd1,
           rd_4 RADIOBUTTON GROUP rd1.
PARAMETERS: p_pakg LIKE yiet07-pakgcode MODIF ID g1.
PARAMETERS: p_asn TYPE char08 MODIF ID g1.
SELECT-OPTIONS: s_pakg FOR ywjsedi_vcasn_h-pakgcode MODIF ID g2.
SELECT-OPTIONS: s_date FOR ywjsedi_vcasn_h-asn_date MODIF ID g2.
SELECTION-SCREEN: SKIP.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN COMMENT (79) text-001 MODIF ID g3.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN:END OF BLOCK blk1.

*----------------------------------------------------------------------*
*       CLASS z_alv_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_alv_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS: handler_user_command FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm.
    METHODS: handler_data_changed_finished FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.
    METHODS: handler_double_click FOR EVENT double_click OF cl_gui_alv_grid
      IMPORTING e_row e_column es_row_no.
    METHODS: handler_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object e_interactive.
ENDCLASS.                    "z_alv_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS z_alv_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_alv_event_receiver IMPLEMENTATION.

  METHOD handler_data_changed_finished.
    PERFORM data_changed_finished USING er_data_changed.
  ENDMETHOD.                    "handler_data_changed_finished

  METHOD handler_double_click.
    PERFORM double_click USING e_row e_column es_row_no.
  ENDMETHOD.                    "handler_double_click

  METHOD handler_user_command.
    PERFORM handle_user_command USING e_ucomm.
  ENDMETHOD.                    "handler_user_command

  METHOD handler_toolbar.
    IF rd_3 = 'X'.
      PERFORM add_toolbar USING e_object.
    ENDIF.
  ENDMETHOD.                    "handler_toolbar

ENDCLASS.                    "z_alv_event_receiver IMPLEMENTATION

DATA:lv_flag(1) TYPE c,
     lv_flag1(1) TYPE c,
     lv_answer(1) TYPE c,
     lv_dn TYPE yexpiv06-refxdocu.

DATA: lv_fc_code TYPE syst-subrc,
      lv_message TYPE string.

DATA: save_code TYPE sy-ucomm,
      ok_code TYPE sy-ucomm.

DATA:ldt_yexpiv06 TYPE TABLE OF yexpiv06,
     lds_yexpiv06 LIKE LINE OF ldt_yexpiv06.
DATA:ldt_asn_h TYPE TABLE OF ywjsedi_vcasn_h,
     lds_asn_h LIKE LINE OF ldt_asn_h,
     ldt_asn_i TYPE TABLE OF ywjsedi_vcasn_i,
     lds_asn_i LIKE LINE OF ldt_asn_i,
     ldt_asn_i_per TYPE TABLE OF ywjsedi_vcasn_i,
     lds_asn_i_per LIKE LINE OF ldt_asn_i_per.

TYPES: BEGIN OF ts_asn_h_s.
        INCLUDE TYPE ywjsedi_vcasn_h.
TYPES: message(150),
       END OF ts_asn_h_s.

DATA:ldt_asn_h_s TYPE TABLE OF ts_asn_h_s,
     lds_asn_h_s LIKE LINE OF ldt_asn_h_s,
     ldt_asn_i_s TYPE TABLE OF ywjsedi_vcasn_i,
     lds_asn_i_s LIKE LINE OF ldt_asn_i_s.

DATA: lt_index TYPE lvc_t_row,
      ls_index TYPE lvc_s_row,
      lt_row TYPE lvc_t_roid,
      ls_row TYPE lvc_s_roid.

DATA:BEGIN OF lds_asn1.
        INCLUDE STRUCTURE ywjsedi_vcasn_i.
DATA:msg_log(150) TYPE c,
     pakgcode LIKE ywjsedi_vcasn_h-pakgcode,
     msg_type LIKE ywjsedi_vcasn_h-msg_type,
     asn_number LIKE ywjsedi_vcasn_h-asn_number,
     trans_doc LIKE ywjsedi_vcasn_h-trans_doc,
     trans_ref LIKE ywjsedi_vcasn_h-trans_ref,
     buyer_id LIKE ywjsedi_vcasn_h-buyer_id,
     buyer_name LIKE ywjsedi_vcasn_h-buyer_name,
     seller_id LIKE ywjsedi_vcasn_h-seller_id,
     supply_addr LIKE ywjsedi_vcasn_h-supply_addr,
     consignor LIKE ywjsedi_vcasn_h-consignor,
     carrier LIKE ywjsedi_vcasn_h-carrier,
     dock_code LIKE ywjsedi_vcasn_h-dock_code,
     country LIKE ywjsedi_vcasn_h-country,
     asn_date LIKE ywjsedi_vcasn_h-asn_date,
     asn_time LIKE ywjsedi_vcasn_h-asn_time,
     dispatch_date LIKE ywjsedi_vcasn_h-dispatch_date,
     dispatch_time LIKE ywjsedi_vcasn_h-dispatch_time,
     conee_code LIKE ywjsedi_vcasn_h-conee_code,
     END OF lds_asn1,
     ldt_asn1 LIKE TABLE OF lds_asn1.

DATA:gt_fieldcat TYPE lvc_t_fcat,
     gs_fieldcat TYPE lvc_s_fcat,
     gs_layout TYPE lvc_s_layo,
     col_pos TYPE i,
     gt_exclude TYPE ui_functions.

DATA:gt_fieldcat_i TYPE lvc_t_fcat,
     gs_fieldcat_i TYPE lvc_s_fcat,
     gs_layout_i TYPE lvc_s_layo,
     col_pos_i TYPE i.

DATA: go_grid_h TYPE REF TO cl_gui_alv_grid,
      go_grid_i TYPE REF TO cl_gui_alv_grid.
DATA: go_container TYPE REF TO cl_gui_docking_container,
      go_splitter TYPE REF TO cl_gui_splitter_container,
      go_ref_h TYPE REF TO cl_gui_container,
      go_ref_i TYPE REF TO cl_gui_container.

DATA:go_handler TYPE REF TO z_alv_event_receiver.
DATA:lit_dyn TYPE TABLE OF dynpread.

DEFINE append_alv_fcat.
  add 1 to col_pos.
  gs_fieldcat-col_pos = col_pos.
  gs_fieldcat-fieldname = &1.
  gs_fieldcat-reptext = &2.
  gs_fieldcat-no_out = &3.
  gs_fieldcat-edit = &4.
  append gs_fieldcat to gt_fieldcat.

END-OF-DEFINITION.

DEFINE check_initial.
  if &1 is initial.
    concatenate lds_asn1-msg_log &2 into lds_asn1-msg_log separated by '、'.
  endif.
END-OF-DEFINITION.

DEFINE check_initial2.
  if &1 is initial.
    concatenate lds_asn_h_s-message &2 into lds_asn_h_s-message separated by '、'.
    lv_error = 'X'.
  endif.
END-OF-DEFINITION.

DEFINE check_initial3.
  if &1 is initial.
    concatenate lds_asn_h_s-message &2 into lds_asn_h_s-message separated by '、'.
    lv_error = 'X'.
    lv_error1 = 'X'.
*    exit.
  endif.
END-OF-DEFINITION.

DEFINE append_alv_fcat_i.
  add 1 to col_pos_i.
  gs_fieldcat_i-col_pos = col_pos_i.
  gs_fieldcat_i-fieldname = &1.
  gs_fieldcat_i-reptext = &2.
  gs_fieldcat_i-no_out = &3.
  gs_fieldcat_i-edit = &4.
  gs_fieldcat_i-outputlen = &5.
  append gs_fieldcat_i to gt_fieldcat_i.

END-OF-DEFINITION.

INITIALIZATION.


AT SELECTION-SCREEN OUTPUT.

  IF rd_3 = 'X'.

    LOOP AT SCREEN.
      IF screen-group1 = 'G1'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G2'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G3'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.

  ELSEIF rd_1 = 'X' OR rd_2 = 'X'.
    LOOP AT SCREEN.
      IF screen-group1 = 'G1'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G2'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G3'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSEIF rd_4 = 'X'.

    LOOP AT SCREEN.
      IF screen-group1 = 'G1'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G2'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ELSEIF screen-group1 = 'G3'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.

  ENDIF.

START-OF-SELECTION.
  IF rd_3 = 'X'.
    PERFORM check_send.
    CALL SCREEN 0002.
  ELSE.
    PERFORM check_auth.
    PERFORM check_data.

    IF rd_1 = 'X'. "Maintain ASN
      CALL SCREEN 0001.
    ELSEIF rd_2 = 'X'.  "check ASN, not send
      PERFORM check_asn.
      PERFORM build_fieldcat.
      PERFORM show_check.
    ELSEIF rd_4 = 'X'.
      PERFORM reverse.
    ENDIF.

  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_auth .

  IF p_pakg IS INITIAL AND p_asn IS INITIAL.
    MESSAGE s000 WITH 'Please input packing number or ASN number'.
    STOP.
  ENDIF.

  IF p_pakg IS NOT INITIAL AND p_asn IS INITIAL.
    SELECT SINGLE * FROM yiet07 WHERE pakgcode = p_pakg.
    IF sy-subrc = 0.
      lv_flag = '0'.
    ELSE.
      SELECT SINGLE * FROM yiet071  WHERE pakgcode = p_pakg.
      IF sy-subrc = 0.
        lv_flag = '3'.
      ELSE.
        MESSAGE s000 WITH 'No packing list found,Please check!'.
        STOP.
      ENDIF.
    ENDIF.

    SELECT * FROM yexpiv06 WHERE dono = p_pakg.
      PERFORM check_single_plant USING yexpiv06-werks.
      IF sy-subrc <> 0.
        MESSAGE s000 WITH 'You have no auth for plant:' yexpiv06-werks.
        STOP.
      ENDIF.
    ENDSELECT.

  ELSEIF p_pakg IS INITIAL AND p_asn IS NOT INITIAL.
    lv_dn = '81' && p_asn.
    SELECT * FROM yexpiv06 INTO TABLE ldt_yexpiv06 WHERE refxdocu = lv_dn.

    LOOP AT ldt_yexpiv06 INTO lds_yexpiv06.
      PERFORM check_single_plant USING lds_yexpiv06-werks.

      p_pakg = lds_yexpiv06-dono.

      IF sy-subrc <> 0.
        MESSAGE s000 WITH 'You have no auth for plant:' lds_yexpiv06-werks.
        STOP.
      ENDIF.

      SELECT SINGLE * FROM yiet07 WHERE pakgcode = p_pakg.
      IF sy-subrc = 0.
        lv_flag = '0'.
      ELSE.
        SELECT SINGLE * FROM yiet071  WHERE pakgcode = p_pakg.
        IF sy-subrc = 0.
          lv_flag = '3'.
        ELSE.
          MESSAGE s000 WITH 'No packing list found,Please check!'.
          STOP.
        ENDIF.
      ENDIF.
    ENDLOOP.

  ELSEIF p_pakg IS NOT INITIAL AND p_asn IS NOT INITIAL.

    lv_dn = '81' && p_asn.
    SELECT SINGLE * FROM yiet07 WHERE pakgcode = p_pakg.
    IF sy-subrc = 0.
      lv_flag = '0'.
    ELSE.
      SELECT SINGLE * FROM yiet071  WHERE pakgcode = p_pakg.
      IF sy-subrc = 0.
        lv_flag = '3'.
      ELSE.
        MESSAGE s000 WITH 'No packing list found,Please check!'.
        STOP.
      ENDIF.
    ENDIF.

    SELECT * FROM yexpiv06 WHERE dono = p_pakg AND  refxdocu = lv_dn.

      PERFORM check_single_plant USING yexpiv06-werks.
      IF sy-subrc <> 0.
        MESSAGE s000 WITH 'You have no auth for plant:' yexpiv06-werks.
        STOP.
      ENDIF.

    ENDSELECT.

    IF sy-subrc <> 0.
      MESSAGE s000 WITH 'Packing not matched ASN number,please check!'.
      STOP.
    ENDIF.

  ENDIF.
ENDFORM.                    " CHECK_AUTH
*&---------------------------------------------------------------------*
*&      Form  CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_data.

  SELECT * FROM ywjsedi_vcasn_h INTO TABLE ldt_asn_h
    WHERE pakgcode = p_pakg.

  SELECT * FROM ywjsedi_vcasn_i INTO TABLE ldt_asn_i
    FOR ALL ENTRIES IN ldt_asn_h
    WHERE vbeln = ldt_asn_h-vbeln.

  IF ldt_asn_h IS INITIAL OR ldt_asn_i IS INITIAL.
    MESSAGE s000 WITH 'ASN data not found, please check'.
    STOP.
  ENDIF.

  READ TABLE ldt_asn_h INDEX 1 INTO lds_asn_h.

  IF lds_asn_h-send_flag = 'S' AND rd_1 = 'X'.
    MESSAGE s000 WITH 'ASN data already sent, maintain is not allowed'.
    STOP.
  ENDIF.

  IF lds_asn_h-prnt_flag = space AND rd_2 = 'X'.
    MESSAGE s000 WITH 'The label not printed yet, please print first.'.
    STOP.
  ENDIF.

  IF lds_asn_h-send_flag <> 'S' AND rd_4 = 'X'.
    MESSAGE s000 WITH 'The ASN data not sent yet, reverse is not allowed.'.
    STOP.
  ENDIF.

ENDFORM.                    " CHECK_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_ASN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_asn .

  DATA:lv_field(20) TYPE c,
       lv_tabname(30) TYPE c.

  LOOP AT ldt_asn_i INTO lds_asn_i.
    CLEAR: lds_asn1,lds_asn_h.

    MOVE-CORRESPONDING lds_asn_i TO lds_asn1.
    READ TABLE ldt_asn_h WITH KEY vbeln = lds_asn_i-vbeln INTO lds_asn_h.

    IF sy-subrc = 0.
      MOVE-CORRESPONDING lds_asn_h TO lds_asn1.
*************************判斷相應欄位是否為空
      check_initial lds_asn1-msg_type 'Message Type'.
      check_initial lds_asn1-trans_doc 'Transport Document Num'.
      check_initial lds_asn1-asn_number 'ASN NO.'.
      check_initial lds_asn1-buyer_id 'Buyer ID'.
      check_initial lds_asn1-buyer_name 'Consignee Name'.
      check_initial lds_asn1-conee_code 'Consignee Code'.
      check_initial lds_asn1-seller_id 'Seller'.
      check_initial lds_asn1-supply_addr 'Seller Address'.
      check_initial lds_asn1-consignor 'Consignor'.
      check_initial lds_asn1-carrier 'Carrier'.
      check_initial lds_asn1-dock_code 'Dock Code'.
      check_initial lds_asn1-country 'Country Code'.
      check_initial lds_asn1-asn_date 'ASN Date'.
      check_initial lds_asn1-dispatch_date 'Dispatch Date'.
      check_initial lds_asn1-part_no 'Customer Material'.
      check_initial lds_asn1-part_desc 'Description'.
      check_initial lds_asn1-qty_shp 'Ship QTY'.
      check_initial lds_asn1-uom 'Sales Unit'.
      check_initial lds_asn1-wght_netx 'Net Weight'.
      check_initial lds_asn1-wght_gros 'Gross Weight'.
      check_initial lds_asn1-line_feed 'Line Feed'.
      check_initial lds_asn1-bstnk 'PO Number'.
      check_initial lds_asn1-pakg_code 'Package Code'.
      check_initial lds_asn1-pakg_type 'Package Type'.
      check_initial lds_asn1-qty_tot 'Pack qty total'.
      check_initial lds_asn1-pakg_type 'Marking Type'.
      check_initial lds_asn1-pakg_id 'Label Num'.

*      IF lds_asn1-asn_time IS INITIAL.
*        CONCATENATE lds_asn1-msg_log 'ASN Time' INTO lds_asn1-msg_log SEPARATED BY '、'.  "LIAN MARK 20190115
*      ENDIF.
*      IF lds_asn1-dispatch_time IS INITIAL.
*        CONCATENATE lds_asn1-msg_log 'Dispatch Time' INTO lds_asn1-msg_log SEPARATED BY '、'.  "LIAN MARK 20190115
*      ENDIF.
      IF lds_asn1-pakg_num IS INITIAL AND lds_asn1-pakg_type <> 'S'.
        CONCATENATE lds_asn1-msg_log 'Number of packages' INTO lds_asn1-msg_log SEPARATED BY '、'.
      ENDIF.
      IF lds_asn1-qty_pack IS INITIAL AND lds_asn1-pakg_type = 'S'.  "lian change 20200415
        CONCATENATE lds_asn1-msg_log 'Pack qty per' INTO lds_asn1-msg_log SEPARATED BY '、'.
      ENDIF.
*************************判斷相應欄位是否為空

      IF lds_asn1-msg_log IS NOT INITIAL.
        CONCATENATE 'Some fields are empty:' lds_asn1-msg_log INTO lds_asn1-msg_log SEPARATED BY space.
      ENDIF.

      APPEND lds_asn1 TO ldt_asn1.
    ENDIF.

  ENDLOOP.

*  IF p_send ='X'. "send
*    CLEAR: lv_flag1.
*    LOOP AT ldt_asn1 INTO lds_asn1 WHERE msg_log <> space.
*      lv_flag1 = 'X'.
*    ENDLOOP.
*
*    IF lv_flag1 = 'X'.
*      PERFORM build_fieldcat.
*      PERFORM show_check.
*    ELSE.
*      CALL FUNCTION 'POPUP_TO_CONFIRM'
*        EXPORTING
*          titlebar        = 'Warning'
**         DIAGNOSE_OBJECT = ' '
*          text_question   = 'The data will be sent to customer,Are you sure to do this ?'
*          start_column    = 25
*          start_row       = 6
*        IMPORTING
*          answer          = lv_answer.
*
*      CASE lv_answer.
*        WHEN '1'.
*          CALL FUNCTION 'YWJSEDI_SEND_ASN'
**           EXPORTING
**             check_flag       = 'X'
*           IMPORTING
*             return_code       = lv_fc_code
*             message           = lv_message
*           TABLES
*             it_asn_h          = ldt_asn_h
*             it_asn_i          = ldt_asn_i.
*
*          PERFORM build_fieldcat.
*          PERFORM show_check.
*
*        WHEN OTHERS.
*          LEAVE TO SCREEN 0.
*      ENDCASE.
*
*    ENDIF.

ENDFORM.                    " CHECK_ASN
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcat .

  gs_layout-zebra             = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-stylefname        = 'STYLE'.

  REFRESH gt_fieldcat.
  append_alv_fcat 'MSG_LOG' 'Message Log' '' ''.
  append_alv_fcat 'VBELN' 'Delivery' '' ''.
  append_alv_fcat 'POSNR' 'ITEM' ' ' ''.
  append_alv_fcat 'PLTXNOXX' 'Pallet No' '' ''.
  append_alv_fcat 'CTNXNOXX' 'Carton No' '' ''.
  append_alv_fcat 'MATNR' 'Material' '' ''.
  append_alv_fcat 'PAKGCODE' 'Packing No.' '' ''.
  append_alv_fcat 'MSG_TYPE' 'Message Type' '' ''.
  append_alv_fcat 'ASN_NUMBER' 'ASN NO.' '' ''.
  append_alv_fcat 'TRANS_DOC' 'Transport Document Num' '' ''.
  append_alv_fcat 'TRANS_REF' 'Conveyance Ret Num' '' ''.
  append_alv_fcat 'BUYER_ID' 'Buyer ID' '' '' .
  append_alv_fcat 'BUYER_NAME' 'Consignee Name' '' ''.
  append_alv_fcat 'CONEE_CODE' 'Consignee Code' '' ''.
  append_alv_fcat 'SELLER_ID' 'Seller' '' ''.
  append_alv_fcat 'SUPPLY_ADDR' 'Seller Address' ' ' ''.
  append_alv_fcat 'CONSIGNOR' 'Consignor' '' ''.
  append_alv_fcat 'CARRIER' 'Carrier' '' ''.
  append_alv_fcat 'DOCK_CODE' 'Dock Code' '' ''.
  append_alv_fcat 'COUNTRY' 'Country Code' '' ''.
  append_alv_fcat 'ASN_DATE' 'ASN Date' '' ''.
  append_alv_fcat 'ASN_TIME' 'ASN Time' '' ''.
  append_alv_fcat 'DISPATCH_DATE' 'Dispatch Date' '' ''.
  append_alv_fcat 'DISPATCH_TIME' 'Dispatch Time' '' ''.
  append_alv_fcat 'PART_NO' 'Customer Material' '' ''.
  append_alv_fcat 'PART_DESC' 'Description' '' ''.
  append_alv_fcat 'ENG_NO' 'Engineer Change' '' ''.
  append_alv_fcat 'QTY_SHP' 'Ship QTY' '' ''.
  append_alv_fcat 'UOM' 'Sales Unit' '' ''.
  append_alv_fcat 'WGHT_NETX' 'Net Weight' '' ''.
  append_alv_fcat 'WGHT_GROS' 'Gross Weight' '' ''.
  append_alv_fcat 'REVISION_NO' 'Revision Number' '' ''.
  append_alv_fcat 'LINE_FEED' 'Line Feed' ' ' ''.
  append_alv_fcat 'BSTNK' 'PO Number' '' ''.
  append_alv_fcat 'PAKG_NUM' 'Number of Packages' '' ''.
  append_alv_fcat 'PAKG_CODE' 'Packaging Code' '' ''.
  append_alv_fcat 'QTY_PACK' 'Pack qty per' '' ''.
  append_alv_fcat 'QTY_TOT' 'Pack qty total' '' ''.
  append_alv_fcat 'PAKG_TYPE' 'Package Type' '' ''.
  append_alv_fcat 'PAKG_ID_M' 'Master Label Num' '' ''.
  append_alv_fcat 'BATCH_NO' 'Batch Num' '' ''.
  append_alv_fcat 'PAKG_ID' 'Label Num' '' ''.
ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  SHOW_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_check .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      is_layout_lvc   = gs_layout
      it_fieldcat_lvc = gt_fieldcat
      i_save          = 'A'
    TABLES
      t_outtab        = ldt_asn1
    EXCEPTIONS
      program_error   = 1
      OTHERS          = 2.


ENDFORM.                    " SHOW_CHECK
*&---------------------------------------------------------------------*
*&      Module  STATUS_0002  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0001 OUTPUT.

  SET PF-STATUS 'STATUS_0001'.
  SET TITLEBAR 'TITLE_0001'.

  PERFORM build_fieldcat_main.

  PERFORM initial_screen_data.

ENDMODULE.                 " STATUS_0002  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT_MAIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcat_main .

  READ TABLE ldt_asn_h INDEX 1 INTO lds_asn_h.
  READ TABLE ldt_asn_i INDEX 1 INTO lds_asn_i.

  gs_layout-zebra             = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-stylefname        = 'STYLE'.

  REFRESH gt_fieldcat.
  IF rd_3 = 'X'.
    append_alv_fcat 'MESSAGE' 'Message Log.' '' ''.
  ENDIF.
  append_alv_fcat 'PAKGCODE' 'Packing List.' '' ''.
  append_alv_fcat 'ASN_NUMBER' 'ASN NO.' '' ''.
  append_alv_fcat 'ASN_DATE' 'ASN Date' '' ''.
  append_alv_fcat 'ASN_TIME' 'ASN Time' '' ''.
  append_alv_fcat 'DISPATCH_DATE' 'Dispatch Date' '' ''.
  append_alv_fcat 'DISPATCH_TIME' 'Dispatch Time' '' ''.
  IF rd_1 = 'X'.
    append_alv_fcat 'TRANS_DOC' 'Transport Document Num' '' 'X'.
    append_alv_fcat 'TRANS_REF' 'Conveyance Ret Num' '' 'X'.
*  IF lds_asn_h-buyer_id IS NOT INITIAL.
*    append_alv_fcat 'BUYER_ID' 'Buyer ID' '' ' ' .
*  ELSE.
    append_alv_fcat 'BUYER_ID' 'Buyer ID' '' 'X' .
*  ENDIF.
  ELSE.
    append_alv_fcat 'TRANS_DOC' 'Transport Document Num' '' ' '.
    append_alv_fcat 'TRANS_REF' 'Conveyance Ret Num' '' ' '.
    append_alv_fcat 'BUYER_ID' 'Buyer ID' '' ' ' .
  ENDIF.
  append_alv_fcat 'BUYER_NAME' 'Buyer Name' '' ''.
  IF rd_1 = 'X'.     "lian add 20200504
    append_alv_fcat 'CONEE_CODE' 'Consignee Code' '' 'X' .
  ELSE.
    append_alv_fcat 'CONEE_CODE' 'Consignee Code' '' ' ' .
  ENDIF.
  append_alv_fcat 'SELLER_ID' 'Seller ID' '' ''.
  append_alv_fcat 'SUPPLY_ADDR' 'Seller Address' ' ' ''.
  append_alv_fcat 'CONSIGNOR' 'Consignor' '' ''.
  IF rd_1 = 'X'.
    append_alv_fcat 'CARRIER' 'Carrier' '' 'X'.
  ELSE.
    append_alv_fcat 'CARRIER' 'Carrier' '' ' '.
  ENDIF.
  append_alv_fcat 'DOCK_CODE' 'Dock Code' '' ''.
  append_alv_fcat 'COUNTRY' 'Country Code' '' ''.
  IF rd_3 = 'X'.
    append_alv_fcat 'SEND_FLAG' 'Send flag.' '' ''.
    append_alv_fcat 'SEND_USER' 'Send user' '' ''.
    append_alv_fcat 'SEND_DATE' 'Send date' '' ''.
    append_alv_fcat 'SEND_TIME' 'Send Time' '' ''.
    append_alv_fcat 'UDF01' 'idoc number' '' ''.
    append_alv_fcat 'UDF02' 'Reverse log' '' ''.
  ENDIF.

  gs_layout_i-zebra             = 'X'.
  gs_layout_i-cwidth_opt = 'X'.
  gs_layout_i-stylefname        = 'STYLE'.
  gs_layout_i-no_toolbar = 'X' 

  REFRESH gt_fieldcat_i.
*  append_alv_fcat_i 'PAKGCODE' 'Packing List.' '' '' 10.
  append_alv_fcat_i 'PLTXNOXX' 'Pallet No' '' '' 5.
  append_alv_fcat_i 'CTNXNOXX' 'Carton No' '' '' 5.
  append_alv_fcat_i 'MATNR' 'Material' '' '' 18.
  append_alv_fcat_i 'PART_NO' 'Customer Material' '' '' 35.
  append_alv_fcat_i 'PART_DESC' 'Description' '' '' 40.
  append_alv_fcat_i 'ENG_NO' 'Engineer Change' '' '' 14.
  append_alv_fcat_i 'QTY_SHP' 'Ship QTY' '' '' 10.
  append_alv_fcat_i 'UOM' 'Sales Unit' '' '' 3.
  append_alv_fcat_i 'WGHT_NETX' 'Net Weight' '' '' 4.
  append_alv_fcat_i 'WGHT_GROS' 'Gross Weight' '' '' 4.
  append_alv_fcat_i 'REVISION_NO' 'Revision Number' '' '' 14.
  IF rd_1 = 'X'.
*  IF lds_asn_i-line_feed IS NOT INITIAL. "lian add 20200409
*    append_alv_fcat_i 'LINE_FEED' 'Line Feed' ' ' '' 12.
*  ELSE.
    append_alv_fcat_i 'LINE_FEED' 'Line Feed' ' ' 'X' 12.
*  ENDIF.
*  IF lds_asn_i-bstnk IS NOT INITIAL.
*    append_alv_fcat_i 'BSTNK' 'PO Number' '' '' 35.
*  ELSE.
    append_alv_fcat_i 'BSTNK' 'PO Number' '' 'X' 35.
*  ENDIF.
  ELSEIF rd_3 = 'X'.
    append_alv_fcat_i 'LINE_FEED' 'Line Feed' ' ' ' ' 12.
    append_alv_fcat_i 'BSTNK' 'PO Number' '' ' ' 35.
  ENDIF.
  append_alv_fcat_i 'PAKG_NUM' 'Number of Packages' '' '' 10.
  append_alv_fcat_i 'PAKG_CODE' 'Packaging Code' '' '' 17.
  append_alv_fcat_i 'QTY_PACK' 'Pack qty per' '' '' 10.
  append_alv_fcat_i 'QTY_TOT' 'Pack qty total' '' '' 10.
  append_alv_fcat_i 'PAKG_TYPE' 'Package Type' '' '' 1.
  append_alv_fcat_i 'PAKG_ID_M' 'Master Label Num' '' '' 9.
  append_alv_fcat_i 'BATCH_NO' 'Batch Num' '' '' 9.
  append_alv_fcat_i 'PAKG_ID' 'Label Num' '' '' 9.

ENDFORM.                    " BUILD_FIELDCAT_MAIN
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0001 INPUT.
  save_code = ok_code.
  CLEAR: ok_code.
  CASE save_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      PERFORM save_db.
  ENDCASE.

  PERFORM set_layout_cwidth_opt.
  go_grid_h->refresh_table_display( ).
  go_grid_i->refresh_table_display( ).
ENDMODULE.                 " USER_COMMAND_0001  INPUT
*&---------------------------------------------------------------------*
*&      Form  INITIAL_SCREEN_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM initial_screen_data .

  IF go_grid_h IS INITIAL.

    CREATE OBJECT go_container
      EXPORTING
        parent    = cl_gui_container=>default_screen
        side      = cl_gui_docking_container=>dock_at_top
        extension = 1200.

    CREATE OBJECT go_splitter
      EXPORTING
        parent  = go_container
        rows    = 2
        columns = 1.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 1  " Row
        column    = 1  " Column
      RECEIVING
        container = go_ref_h.

    CREATE OBJECT go_grid_h
      EXPORTING
        i_parent = go_ref_h.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 2  " Row
        column    = 1  " Column
      RECEIVING
        container = go_ref_i.

    CREATE OBJECT go_grid_i
      EXPORTING
        i_parent = go_ref_i.

  ENDIF.

  IF go_handler IS INITIAL.
    CREATE OBJECT go_handler.
  ENDIF.

  PERFORM deleta_func_code TABLES gt_exclude.

  IF go_handler IS NOT INITIAL.
    SET HANDLER go_handler->handler_double_click FOR go_grid_h.
    SET HANDLER go_handler->handler_data_changed_finished FOR go_grid_h.
    SET HANDLER go_handler->handler_data_changed_finished FOR go_grid_i.
    SET HANDLER go_handler->handler_user_command FOR go_grid_h.
    SET HANDLER go_handler->handler_toolbar FOR go_grid_h.

    CALL METHOD go_grid_h->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD go_grid_h->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.

    CALL METHOD go_grid_i->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD go_grid_i->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.
  ENDIF.

  IF rd_1 = 'X'.
    CALL METHOD go_grid_h->set_table_for_first_display
      EXPORTING
        i_save                        = 'U'
        is_layout                     = gs_layout
        it_toolbar_excluding          = gt_exclude[]
      CHANGING
        it_outtab                     = ldt_asn_h
        it_fieldcatalog               = gt_fieldcat[]
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ELSEIF rd_3 = 'X'.
    CALL METHOD go_grid_h->set_table_for_first_display
      EXPORTING
        i_save                        = 'U'
        is_layout                     = gs_layout
        it_toolbar_excluding          = gt_exclude[]
      CHANGING
        it_outtab                     = ldt_asn_h_s
        it_fieldcatalog               = gt_fieldcat[]
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ENDIF.

  CALL METHOD go_grid_i->set_table_for_first_display
    EXPORTING
      i_save                        = 'U'
      is_layout                     = gs_layout_i
      it_toolbar_excluding          = gt_exclude[]
    CHANGING
      it_outtab                     = ldt_asn_i_per
      it_fieldcatalog               = gt_fieldcat_i[]
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

  IF ldt_asn_i_per IS INITIAL.
    CALL METHOD go_grid_i->set_visible
      EXPORTING
        visible = space.
    CALL METHOD go_ref_i->set_visible
      EXPORTING
        visible = space.
  ENDIF.

ENDFORM.                    " INITIAL_SCREEN_DATA
*&---------------------------------------------------------------------*
*&      Form  DATA_CHANGED_FINISHED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ER_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM data_changed_finished  USING    lo_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

  DATA:ls_change TYPE lvc_s_modi.
  FIELD-SYMBOLS: <fs_data_h> LIKE LINE OF ldt_asn_h,
                 <fs_data_i> LIKE LINE OF ldt_asn_i_per.
  FIELD-SYMBOLS:<f_t_alv_data> TYPE any,
                   <f_t_alv_data_field> TYPE any.
*  IF lo_er_data_changed->mt_mod_cells[] IS NOT INITIAL.
*
*    LOOP AT lo_er_data_changed->mt_mod_cells INTO ls_change.
*
*      IF ls_change-fieldname = 'BSTNK'. "ITEM
*
*        READ TABLE ldt_asn_i_per INDEX ls_change-row_id ASSIGNING <fs_data_i>.
*
*        IF sy-subrc = 0.
*
*          ASSIGN COMPONENT ls_change-fieldname OF STRUCTURE <fs_data_i> TO <f_t_alv_data_field>.
*
*          IF sy-subrc = 0.
*
*            <f_t_alv_data_field> = ls_change-value.
*
*          ENDIF.
*
*        ENDIF.
*
*      ELSE.
*
*        READ TABLE ldt_asn_h INDEX ls_change-row_id ASSIGNING <fs_data_h>.
*
*        IF sy-subrc = 0.
*
*          ASSIGN COMPONENT ls_change-fieldname OF STRUCTURE <fs_data_h> TO <f_t_alv_data_field>.
*
*          IF sy-subrc = 0.
*
*            <f_t_alv_data_field> = ls_change-value.
*
*          ENDIF.
*
*        ENDIF.
*
*      ENDIF.
*
*    ENDLOOP.
*
*  ENDIF.

ENDFORM.                    " DATA_CHANGED_FINISHED
*&---------------------------------------------------------------------*
*&      Form  DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW_ID  text
*      -->P_E_COLUMN_ID  text
*      -->P_ES_ROW_NO  text
*----------------------------------------------------------------------*
FORM double_click  USING    p_e_row_id
                            p_e_column_id
                            p_es_row_no TYPE lvc_s_roid.
  IF rd_1 = 'X'.
    READ TABLE ldt_asn_h INDEX p_es_row_no-row_id INTO lds_asn_h.
    ldt_asn_i_per = ldt_asn_i.
    DELETE ldt_asn_i_per WHERE vbeln <> lds_asn_h-vbeln.
  ELSE.
    READ TABLE ldt_asn_h_s INDEX p_es_row_no-row_id INTO lds_asn_h_s.
    ldt_asn_i_per = ldt_asn_i_s.
    DELETE ldt_asn_i_per WHERE vbeln <> lds_asn_h_s-vbeln.
  ENDIF.

  CALL METHOD go_grid_i->set_visible
    EXPORTING
      visible = 'X'.
  CALL METHOD go_ref_i->set_visible
    EXPORTING
      visible = 'X'.

  PERFORM set_layout_cwidth_opt.
  go_grid_i->refresh_table_display( ).

ENDFORM.                    " DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  SAVE_DB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_db .

  REFRESH:ldt_asn_h_s,ldt_asn_i_s.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      titlebar        = 'Warning'
*     DIAGNOSE_OBJECT = ' '
      text_question   = 'The data will be update.  Are you sure to do this ?'
      start_column    = 25
      start_row       = 6
    IMPORTING
      answer          = lv_answer.

  ldt_asn_h_s = ldt_asn_h.
  ldt_asn_i_s = ldt_asn_i.

  CASE lv_answer.
    WHEN '1'.
      CALL FUNCTION 'YWJSEDI_SAVE_ASN'
        EXPORTING
          iv_flag_c   = 'M'
        IMPORTING
          return_code = lv_fc_code
          message     = lv_message
        TABLES
          it_asn_h    = ldt_asn_h
          it_asn_i    = ldt_asn_i_per.

    WHEN OTHERS.
      LEAVE TO SCREEN 0.
  ENDCASE.

  IF lv_fc_code = 0.
    MESSAGE s000 WITH 'Update successful.'.
  ELSE.
    MESSAGE s000 WITH 'Update fail'.
  ENDIF.

ENDFORM.                    " SAVE_DB
*&---------------------------------------------------------------------*
*&      Form  REVERSE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM reverse.
  DATA:lv_udf02 TYPE ywjsedi_vcasn_h-udf02.
  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      titlebar        = 'Warning'
*     DIAGNOSE_OBJECT = ' '
      text_question   = 'The ASN data already sent, sent status will be cleared.  Are you sure to do this ?'
      start_column    = 25
      start_row       = 6
    IMPORTING
      answer          = lv_answer.

  CASE lv_answer.
    WHEN '1'.
      lv_udf02 = sy-datum && '-' && sy-uzeit && '-' && 'R'.

      UPDATE ywjsedi_vcasn_h SET send_flag = 'R'
                                 send_user = sy-uname
                                 send_date = sy-datum
                                 send_time = sy-uzeit
                                 udf02 = lv_udf02
                             WHERE vbeln = lds_asn_h-vbeln.

      MESSAGE s000 WITH 'The send status is cleared, please review data and send again.'.

    WHEN OTHERS.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDFORM.                    " REVERSE
*&---------------------------------------------------------------------*
*&      Form  DELETA_FUNC_CODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM deleta_func_code TABLES pt_exclude TYPE ui_functions.
  DATA:ps_exclude TYPE ui_func.
  REFRESH:pt_exclude.
  CLEAR:ps_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_url_copy_to_clipboard.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_mb_paste.
  APPEND ps_exclude TO pt_exclude.
  ps_exclude = cl_gui_alv_grid=>mc_fc_print_back.
  APPEND ps_exclude TO pt_exclude.

ENDFORM.                    " DELETA_FUNC_CODE
*&---------------------------------------------------------------------*
*&      Form  CHECK_SEND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_send .
  DATA: lr_werks TYPE RANGE OF yexpiv06-werks,
        ls_werks LIKE LINE OF lr_werks.

  IF s_date[] IS INITIAL AND s_pakg[] IS INITIAL.
    MESSAGE s000 WITH 'please input packing number or ASN date' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

  SELECT * FROM ywjsedi_vcasn_h INTO TABLE ldt_asn_h_s WHERE pakgcode IN s_pakg AND asn_date IN s_date.

  IF ldt_asn_h_s IS INITIAL.
    MESSAGE s000 WITH 'ASN data not found, please check' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

  SELECT * FROM ywjsedi_vcasn_i INTO TABLE ldt_asn_i_s
    FOR ALL ENTRIES IN ldt_asn_h_s
    WHERE vbeln = ldt_asn_h_s-vbeln.

  SELECT werks AS low INTO CORRESPONDING FIELDS OF TABLE lr_werks
    FROM  yexpiv06
    FOR ALL ENTRIES IN ldt_asn_h_s
    WHERE dono = ldt_asn_h_s-pakgcode.

  ls_werks = 'IEQ'.
  MODIFY lr_werks FROM ls_werks TRANSPORTING sign option WHERE sign = space.

  IF lr_werks IS NOT INITIAL.
    PERFORM check_plant_range TABLES lr_werks .
  ENDIF.

ENDFORM.                    " CHECK_SEND
*&---------------------------------------------------------------------*
*&      Form  SEND_ASN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM send_asn .
  DATA: lv_error(1),
        lv_fail(1),
        lv_error1(1),
        lv_tabix TYPE sy-tabix,
        lv_docnum TYPE edidc-docnum.
  REFRESH: lt_index,lt_row,ldt_asn_h,ldt_asn_i.
  CLEAR:lv_error,lv_fail.

  CALL METHOD go_grid_h->get_selected_rows
    IMPORTING
      et_index_rows = lt_index
      et_row_no     = lt_row.

  IF lines( lt_row ) IS INITIAL.
    MESSAGE s000 WITH 'Please select one row of data at lease!' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  LOOP AT lt_row INTO ls_row.
    READ TABLE ldt_asn_h_s INDEX ls_row-row_id INTO lds_asn_h_s.
    CLEAR:lds_asn_h_s-message,lv_error.
    IF lds_asn_h_s-send_flag = 'S'.
      lds_asn_h_s-message = 'The ASN data has been sent'.
      MODIFY ldt_asn_h_s FROM lds_asn_h_s INDEX sy-tabix.
      lv_fail = 'X'.
      MESSAGE s000 WITH 'The ASN data has been sent not allowed to send again,' 'please select!' DISPLAY LIKE 'E'.
      CONTINUE.
    ENDIF.
    IF lds_asn_h_s-prnt_flag = space.
      lds_asn_h_s-message = 'The label not printed yet'.
      MODIFY ldt_asn_h_s FROM lds_asn_h_s INDEX sy-tabix.
      lv_fail = 'X'.
      MESSAGE s000 WITH 'The label not printed yet, please print first.' DISPLAY LIKE 'E'.
      CONTINUE.
    ENDIF.
    check_initial2 lds_asn_h_s-msg_type 'Message Type'.
    check_initial2 lds_asn_h_s-trans_doc 'Transport Document Num'.
    check_initial2 lds_asn_h_s-asn_number 'ASN NO.'.
    check_initial2 lds_asn_h_s-buyer_id 'Buyer ID'.
    check_initial2 lds_asn_h_s-buyer_name 'Consignee Name'.
    check_initial2 lds_asn_h_s-conee_code 'Consignee Code'.
    check_initial2 lds_asn_h_s-seller_id 'Seller'.
    check_initial2 lds_asn_h_s-supply_addr 'Seller Address'.
    check_initial2 lds_asn_h_s-consignor 'Consignor'.
    check_initial2 lds_asn_h_s-carrier 'Carrier'.
    check_initial2 lds_asn_h_s-dock_code 'Dock Code'.
    check_initial2 lds_asn_h_s-country 'Country Code'.
    check_initial2 lds_asn_h_s-asn_date 'ASN Date'.
    check_initial2 lds_asn_h_s-dispatch_date 'Dispatch Date'.
    CLEAR:lv_error1.
    LOOP AT ldt_asn_i_s INTO lds_asn_i_s WHERE vbeln = lds_asn_h_s-vbeln.
      check_initial3 lds_asn_i_s-part_no 'Customer Material'.
      check_initial3 lds_asn_i_s-part_desc 'Description'.
      check_initial3 lds_asn_i_s-qty_shp 'Ship QTY'.
      check_initial3 lds_asn_i_s-uom 'Sales Unit'.
      check_initial3 lds_asn_i_s-wght_netx 'Net Weight'.
      check_initial3 lds_asn_i_s-wght_gros 'Gross Weight'.
      check_initial3 lds_asn_i_s-line_feed 'Line Feed'.
      check_initial3 lds_asn_i_s-bstnk 'PO Number'.
      check_initial3 lds_asn_i_s-pakg_code 'Package Code'.
      check_initial3 lds_asn_i_s-pakg_type 'Package Type'.
      check_initial3 lds_asn_i_s-qty_tot 'Pack qty total'.
      check_initial3 lds_asn_i_s-pakg_type 'Marking Type'.
      check_initial3 lds_asn_i_s-pakg_id 'Label Num'.
      IF lds_asn_i_s-pakg_num IS INITIAL AND lds_asn_i_s-pakg_type <> 'S'.
        CONCATENATE lds_asn_h_s-message 'Number of packages' INTO lds_asn_h_s-message SEPARATED BY '、'.
        lv_error1 = 'X'.
        lv_error = 'X'.
      ENDIF.
      IF lds_asn_i_s-qty_pack IS INITIAL AND lds_asn_i_s-pakg_type = 'S'.  "lian change 20200415
        CONCATENATE lds_asn_h_s-message 'Pack qty per' INTO lds_asn_h_s-message SEPARATED BY '、'.
        lv_error = 'X'.
        lv_error1 = 'X'.
      ENDIF.
      IF lv_error1 = 'X'.
        EXIT.
      ENDIF.
    ENDLOOP.

    IF lv_error = 'X'.
      CONCATENATE 'Some fields are empty:' lds_asn_h_s-message INTO lds_asn_h_s-message SEPARATED BY space.
      MODIFY ldt_asn_h_s FROM lds_asn_h_s INDEX sy-tabix.
      lv_fail = 'X'.
    ENDIF.

  ENDLOOP.

  CHECK lv_fail <> 'X'.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      titlebar      = 'Warning'
      text_question = 'The data will be sent to customer,Are you sure to do this ?'
      start_column  = 25
      start_row     = 6
    IMPORTING
      answer        = lv_answer.

  CHECK  lv_answer = '1'.

  LOOP AT lt_row INTO ls_row.
    READ TABLE ldt_asn_h_s INDEX ls_row-row_id INTO lds_asn_h_s.
    lv_tabix = sy-tabix.

    CALL FUNCTION 'YWJSEDI_SEND_ASN'
      EXPORTING
        check_flag  = space
        iv_vbeln    = lds_asn_h_s-vbeln
      IMPORTING
        return_code = lv_fc_code
        message     = lv_message
        ev_docnum   = lv_docnum.

    IF lv_fc_code = 0. "succcessful
      lds_asn_h_s-udf01 = lv_docnum.
      lds_asn_h_s-send_date = sy-datum.
      lds_asn_h_s-send_time = sy-uzeit.
      lds_asn_h_s-send_user = sy-uname.
      lds_asn_h_s-send_flag = 'S'.
      lds_asn_h_s-message = lv_message.

    ELSE. "fail
      lds_asn_h_s-message = lv_message.
      lds_asn_h_s-send_flag = 'F'.
      lds_asn_h_s-send_date = sy-datum.
      lds_asn_h_s-send_time = sy-uzeit.
      lds_asn_h_s-send_user = sy-uname.
    ENDIF.
    MODIFY ldt_asn_h_s FROM lds_asn_h_s INDEX ls_row-row_id.

    UPDATE ywjsedi_vcasn_h SET udf01 = lds_asn_h_s-udf01
                               send_date = lds_asn_h_s-send_date
                               send_time = lds_asn_h_s-send_time
                               send_user = lds_asn_h_s-send_user
                               send_flag = lds_asn_h_s-send_flag
                           WHERE vbeln = lds_asn_h_s-vbeln.

  ENDLOOP.


ENDFORM.                    " SEND_ASN
*&---------------------------------------------------------------------*
*&      Module  STATUS_0002  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0002 OUTPUT.

  SET PF-STATUS 'STATUS_0002'.
  SET TITLEBAR 'TITLE_0002'.
  PERFORM build_fieldcat_main.
  PERFORM initial_screen_data.

ENDMODULE.                 " STATUS_0002  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0002  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0002 INPUT.
  save_code = ok_code.
  CLEAR: ok_code.
  CASE save_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.

  PERFORM set_layout_cwidth_opt.
  go_grid_h->refresh_table_display( ).
  go_grid_i->refresh_table_display( ).
ENDMODULE.                 " USER_COMMAND_0002  INPUT
*&---------------------------------------------------------------------*
*&      Form  ADD_TOOLBAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_OBJECT  text
*----------------------------------------------------------------------*
FORM add_toolbar  USING lo_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA: ls_toolbar TYPE stb_button.
  CLEAR:ls_toolbar.
  ls_toolbar-butn_type = 3.
  APPEND ls_toolbar TO lo_object->mt_toolbar.

  ls_toolbar-butn_type = 0.
  ls_toolbar-function = 'SEND'.
  ls_toolbar-quickinfo = 'Send ASN to Volvo'.
  ls_toolbar-text = 'Send'.
  ls_toolbar-icon = '@MC@'.
  APPEND ls_toolbar TO lo_object->mt_toolbar.
  CLEAR ls_toolbar.
  MOVE 3 TO ls_toolbar-butn_type.
  APPEND ls_toolbar TO lo_object->mt_toolbar.


ENDFORM.                    " ADD_TOOLBAR
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command  USING    p_ucomm.

  CASE p_ucomm.
    WHEN 'SEND'.
      PERFORM send_asn.
  ENDCASE.

  PERFORM set_layout_cwidth_opt.
  CALL METHOD go_grid_h->refresh_table_display.

ENDFORM.                    " HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_CWIDTH_OPT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_cwidth_opt .

  go_grid_h->get_frontend_layout(
    IMPORTING
      es_layout = gs_layout ).
  gs_layout-cwidth_opt = 'X'.
  go_grid_h->set_frontend_layout( is_layout = gs_layout ).

  go_grid_i->get_frontend_layout(
    IMPORTING
      es_layout = gs_layout_i ).
  gs_layout_i-cwidth_opt = 'X'.
  go_grid_i->set_frontend_layout( is_layout = gs_layout_i ).

ENDFORM.                    " SET_LAYOUT_CWIDTH_OPT

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值