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
其中包括:
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