SAP 与 扫码枪调用平台 过账功能

1、该程序无筛选屏幕,运行直接进入界面,如下:

 代码如下:

*&---------------------------------------------------------------------*
*&程序描述                    :
*&申请人                      :
*&作者                        :
*&日期                        :2021.03.24
*&---------------------------------------------------------------------*
*&摘要:
*      1.
*      2.
*&---------------------------------------------------------------------*
*&变更记录:                                                           *
*&Date         Developer           ReqNo       Descriptions            *
*& ==========  ==================  ==========  ========================*
*&
*&---------------------------------------------------------------------*
PROGRAM zsdf029.
*--------------------------------------------------------------------*
*                   类型定义
*--------------------------------------------------------------------*
TABLES:lips.
TYPES:
  BEGIN OF ty_lips,
    mark     TYPE c,
    zgzzt    TYPE char5"过账状态
    wbstk    TYPE vbuk-wbstk,
    vbeln    TYPE lips-vbeln,
    posnr    TYPE lips-posnr,
    matnr    TYPE lips-matnr,
    maktx    TYPE makt-maktx,
    zcpgg    TYPE mara-zcpgg,
    werks    TYPE lips-werks,
    lgort    TYPE lips-lgort,
    lfimg    TYPE lips-lfimg,
    zxulie1  TYPE zsdt033-zxulie1,
    zxulie2  TYPE zsdt033-zxulie2,
    zzcno    TYPE zsdt003-zzcno,
    zzshipno TYPE zsdt003-zzshipno,
    zmsg     TYPE c LENGTH 100,
  END OF ty_lips.

*--------------------------------------------------------------------*
*                    内表定义
*--------------------------------------------------------------------*
DATA:
  gt_lips   TYPE TABLE OF ty_lips,
  gs_lips   TYPE          ty_lips,
  lt_zsd033 TYPE TABLE OF zsdt033,
  ls_zsd033 TYPE          zsdt033.
DATA:BEGIN OF ls_post,
     vbeln TYPE lips-vbeln,
     wbstk TYPE vbuk-wbstk,
     zmess TYPE c LENGTH 100,
     END OF ls_post,
     lt_post LIKE STANDARD TABLE OF ls_post.
DATA:BEGIN OF gs_wl,
     vbeln TYPE lips-vbeln,
     zzcno    TYPE zsdt003-zzcno,
     zzshipno TYPE zsdt003-zzshipno,
     END OF gs_wl,
     gt_wl LIKE STANDARD TABLE OF gs_wl.
*                    表声明
*--------------------------------------------------------------------*
*-----常量
DATA:
  gv_time    TYPE i,
  gc_x       TYPE c LENGTH  VALUE 'X',        "X
  gc_status  TYPE slis_formname VALUE 'FRM_PF_STATUS_SET'"FRM_PF_STATUS_SET
  gc_command TYPE slis_formname VALUE 'FRM_USER_COMMAND'.  "FRM_USER_COMMAND
DATA:
  ok_code TYPE sy-ucomm.                        "OK_CODE
*alv相关变量
DATA:
*  GC_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER, "分屏主容器
  gc_grid01 TYPE REF TO cl_gui_alv_grid ,        "ALV List Viewer
  gc_con01  TYPE REF TO cl_gui_custom_container"存放ALV的容器
DATA:
  gs_stbl TYPE lvc_s_stbl.
DATA lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.

INITIALIZATION.
CLEAR lt_f4[].
lt_f4-fieldname  'ZZCNO'.
lt_f4-register   'X'.
APPEND lt_f4.


DEFINE m_refresh_grid.
  GS_STBL-ROW 'X'." 基于行的稳定刷新
  GS_STBL-COL 'X'." 基于列稳定刷新

  CALL METHOD &1->REFRESH_TABLE_DISPLAY
    EXPORTING
    IS_STABLE = GS_STBL.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*&       Class CL_EVT_RECEIVER
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS cl_evt_receiver DEFINITION.
  PUBLIC SECTION.
*   自定义功能
    METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.
*   user_command事件
    METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm.
*   回车事件
    METHODS handle_data_changed_finished  FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.
*  双击
*    METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
*      IMPORTING e_row e_column.
*F4
*    METHODS handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
*     IMPORTING e_fieldname es_row_no er_event_data.
ENDCLASS.               "CL_EVT_RECEIVER
*&---------------------------------------------------------------------*
*&       Class (Implementation)  cl_evt_receiver
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS cl_evt_receiver IMPLEMENTATION.
  METHOD handle_data_changed_finished.
    CHECK sy-ucomm <> 'BACK'.
    CHECK e_modified 'X'.

**   数据改变
*    PERFORM FRM_DATA_CHANGED
*      USING ET_GOOD_CELLS.
  ENDMETHOD.

  METHOD handle_toolbar.
    DATA: ls_toolbar TYPE stb_button.
    DATA: lr_fcode TYPE RANGE OF ui_func.
    DATA: ls_fcode LIKE LINE OF lr_fcode.

    ls_fcode-sign 'I'.
    ls_fcode-option 'EQ'.
    "排除无用按键
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_append_row .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_copy .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_copy_row.
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_cut.
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_insert_row.
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_move_row .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_paste .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_undo .
    APPEND ls_fcode TO lr_fcode.
    ls_fcode-low = cl_gui_alv_grid=>mc_fc_loc_delete_row  .
    APPEND ls_fcode TO lr_fcode.

    DELETE e_object->mt_toolbar WHERE function IN lr_fcode.

    CLEAR ls_toolbar.
    MOVE TO ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.


  METHOD handle_user_command.
    DATA:
      lt_rows  TYPE lvc_t_roid,
      ls_rows  TYPE lvc_s_roid,
      ls_style TYPE lvc_s_styl,
      lt_style TYPE lvc_t_styl.

    CASE e_ucomm.
      WHEN ''.


    ENDCASE.

    m_refresh_grid gc_grid01.
  ENDMETHOD.

*  METHOD handle_onf4.
*    DATA: ls_modi TYPE lvc_s_modi,
*          lt_ret_tab TYPE TABLE OF ddshretval,
*          ls_ret_tab TYPE ddshretval.
*    DATA:BEGIN OF ls_zwuliu,
*         zwuliu TYPE zsdt034-zwuliu,
*         END OF ls_zwuliu,
*         lt_zwuliu LIKE STANDARD TABLE OF ls_zwuliu.
*    SELECT zwuliu
*      INTO TABLE lt_zwuliu
*      FROM zsdt034.
*    FIELD-SYMBOLS <modtab> TYPE lvc_t_modi.
*    IF e_fieldname = 'ZZCNO'. "我们自定义搜索的字段名
*      READ TABLE gt_lips INTO gs_lips INDEX es_row_no-row_id.
*      CHECK sy-subrc = 0.
***  这里可以添加代码以对lt_hitlist内表进行填充
*      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*        EXPORTING
*          retfield        = 'ZZCNO'
*          value_org       = 'S'
*        TABLES
*          value_tab       = lt_zwuliu
**          return_tab      = lt_ret_tab
*        EXCEPTIONS
*          parameter_error = 1
*          no_values_found = 2
*          OTHERS          = 3.
**      IF sy-subrc = 0.
****  Update the value in ALV cell
**        READ TABLE lt_ret_tab INTO ls_ret_tab INDEX 1.
**        IF sy-subrc = 0. " User didn't cancel
**          ls_modi-row_id = es_row_no-row_id.
**          ls_modi-fieldname = e_fieldname.
**          ls_modi-value = ls_ret_tab-fieldval.
**          ASSIGN er_event_data->m_data->* TO <modtab>.
**          APPEND ls_modi TO <modtab>.
**        ENDIF.
**      ENDIF.
***  Inform ALV Grid that event 'onf4' has been processed
*      er_event_data->m_event_handled = 'X'.
*    ENDIF.
*  ENDMETHOD.                    "handle_onf4

*  METHOD handle_double_click.
*    CONDENSE e_row     NO-GAPS.
*    CONDENSE e_column  NO-GAPS.
*    MESSAGE i001(00) WITH '双击事件->行号:' e_row  '、列名:' e_column.
*  ENDMETHOD.
ENDCLASS.               "cl_evt_receiver


*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  DATA:
    lc_evt_receiver TYPE REF TO   cl_evt_receiver,
    lt_extab        LIKE TABLE OF sy-ucomm WITH HEADER LINE.
  SET PF-STATUS 'STA_001' EXCLUDING lt_extab.

*  PERFORM  

IF gc_con01 IS NOT BOUND.
*   创建容器对象    
CREATE OBJECT gc_con01      
EXPORTING        container_name 
'GC_CON01'.  
ENDIF.  

IF gc_grid01 IS NOT BOUND.
*   创建ALV OO表格对象    
CREATE OBJECT gc_grid01      
EXPORTING        i_parent 
= gc_con01.  
ENDIF.

* 设置事件  
IF lc_evt_receiver IS NOT BOUND.    
CREATE OBJECT lc_evt_receiver.  
ENDIF.  

CALL METHOD gc_grid01->register_edit_event    
EXPORTING      i_event_id 
= cl_gui_alv_grid=>mc_evt_modified.
* 回车事件  
CALL METHOD gc_grid01->register_edit_event    
EXPORTING      i_event_id 
= cl_gui_alv_grid=>mc_evt_enter.
* 绑定事件  
SET HANDLER lc_evt_receiver->handle_toolbar FOR gc_grid01.  
SET HANDLER lc_evt_receiver->handle_user_command FOR gc_grid01.
*  SET HANDLER lc_evt_receiver->handle_double_click FOR gc_grid01.
*  SET HANDLER lc_evt_receiver->handle_data_changed FOR gc_grid01.  
SET HANDLER lc_evt_receiver->handle_data_changed_finished FOR gc_grid01.
*  SET HANDLER lc_evt_receiver->handle_onf4 FOR gc_grid01.
*
*  CALL METHOD gc_grid01->register_f4_for_fields
*     EXPORTING
*       it_f4 = lt_f4[].


* 展示ALV  
PERFORM frm_alv_display.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& 展示ALV
*&---------------------------------------------------------------------*
FORM frm_alv_display .  
DATA:    ls_layout   
TYPE lvc_s_layo,    ls_variant  
TYPE disvariant,    lt_fieldcat 
TYPE lvc_t_fcat,    ls_fieldcat 
TYPE lvc_s_fcat.  

DEFINE m_fieldcat.    
CLEAR LS_FIELDCAT.    LS_FIELDCAT
-FIELDNAME = &1.                  "字段ID
*    LS_FIELDCAT-COLTEXT   = &2.                  "列标题    LS_FIELDCAT
-SCRTEXT_S     = &2.    LS_FIELDCAT
-SCRTEXT_M     = &2.    LS_FIELDCAT
-SCRTEXT_L    = &2.    LS_FIELDCAT
-REF_TABLE = &3.                  "参考表名称    LS_FIELDCAT
-REF_FIELD = &4.                  "参考字段名称    LS_FIELDCAT
-OUTPUTLEN = &5.                  "输出字段长度 (影响ALV中的筛选功能)    LS_FIELDCAT
-EDIT      = &6.                  "可编辑    LS_FIELDCAT
-DO_SUM   = &7.     "F4AVAILABL    LS_FIELDCAT
-CHECKBOX    = &8.    
APPEND LS_FIELDCAT TO LT_FIELDCAT.  
END-OF-DEFINITION.  m_fieldcat  
'MARK' '选择' '' '' '' 'X' '' 'X'.  m_fieldcat  
'ZGZZT' '过账状态' '' '' '' '' '' ''.  m_fieldcat  
'VBELN' '销售交货单' 'LIPS' 'VBELN' '' '' '' ''.  m_fieldcat  
'POSNR' '交货单行号' 'LIPS' 'POSNR' '' '' '' ''.  m_fieldcat  
'MATNR' '物料号' 'LIPS' 'MATNR' '' '' '' ''.  m_fieldcat  
'MAKTX' '物料描述' 'MAKT' 'MAKTX' '' '' '' ''.  m_fieldcat  
'ZCPGG' '规格型号' 'MARA' 'ZCPGG' '' '' '' ''.  m_fieldcat  
'WERKS' '工厂' 'LIPS' 'WERKS' '' '' '' ''.  m_fieldcat  
'LGORT' '库位' 'LIPS' 'LGORT' '' '' '' ''.  m_fieldcat  
'LFIMG' '交货数量' 'LIPS' 'LFIMG' '' '' '' ''.  m_fieldcat  
'ZXULIE1' '开始序列号' 'ZSDT033' 'ZXULIE1' '' 'X' '' ''.  m_fieldcat  
'ZXULIE2' '结束序列号' 'ZSDT033' 'ZXULIE2' '' 'X' '' ''.  m_fieldcat  
'ZZCNO' '物流公司' 'ZSDT034' 'ZWULIU' '20' 'X' '' ''.  m_fieldcat  
'ZZSHIPNO' '货运单号' '' '' '40' 'X' '' ''.  m_fieldcat  
'ZMSG' '消息' '' '' '' '' '' ''.

* 布局设置  
CLEAR ls_layout.  ls_layout
-zebra      'X'.    "斑马线  ls_layout
-cwidth_opt 'X'.    "最优宽
*  ls_layout-box_fname = 'MARK'.
*  LS_LAYOUT-SEL_MODE   = 'D'.
*  LS_LAYOUT-GRID_TITLE = '采购订单明细'.  ls_variant
-report    = sy-repid.  

CALL METHOD gc_grid01->set_table_for_first_display    
EXPORTING      i_save                        
'A'      is_layout                     
= ls_layout      is_variant                    
= ls_variant    
CHANGING      it_outtab                     
= gt_lips[]      it_fieldcatalog               
= lt_fieldcat[]    
EXCEPTIONS      invalid_parameter_combination 
1      program_error                 
2      too_many_lines                
3      
OTHERS                        4.  

IF sy-subrc NE 0.    
MESSAGE 'ALV创建失败' TYPE 'S' DISPLAY LIKE 'E'.  
ENDIF.

*    CALL METHOD gc_grid01->register_edit_event
*       EXPORTING
*        i_event_id = cl_gui_alv_grid=>mc_evt_modified.


ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.  
DATA: save_ok TYPE sy-ucomm.  save_ok 

= ok_code.  
CLEAR ok_code.  
CLEAR sy-ucomm.  
CASE save_ok.    
WHEN '&SAVE'.
*     维护时保存
*      PERFORM frm_save_wh.    
WHEN '&EXIT'.      
LEAVE PROGRAM.    
WHEN '&BACK'.      
LEAVE TO SCREEN 0.    
WHEN '&CANCEL'.      
LEAVE TO SCREEN 0.
*   回车时    
WHEN ''.      
PERFORM frm_get_alv_data.
*   销售出库过账    
WHEN 'POST'.      
PERFORM frm_post_date.
*   刷新    
WHEN 'REFRESH'.      
IF lips-vbeln IS NOT INITIAL.        
CLEAR lips-vbeln.      
ENDIF.      
PERFORM frm_wuliu_data"根据交货单号自动填充物流信息      
"扫码枪双击
*    WHEN 'DCLICK'.
*      PERFORM frm_get_alv_data.      
"保存    
WHEN 'ZSAVE'.      
IF gt_lips IS NOT INITIAL.        
READ TABLE gt_lips INTO gs_lips WITH KEY mark 'X'.        
IF sy-subrc <> 0.           
MESSAGE '请选择你要保存的数据' TYPE 'E'.        
ENDIF.        
CLEAR:lt_zsd033,ls_zsd033.        
LOOP AT gt_lips INTO gs_lips WHERE mark 'X'.          
MOVE-CORRESPONDING gs_lips TO ls_zsd033.          ls_zsd033
-zvbeln = gs_lips-vbeln.          ls_zsd033
-zposnr = gs_lips-posnr.          
APPEND ls_zsd033 TO lt_zsd033.        
ENDLOOP.        
IF lt_zsd033[] IS NOT INITIAL.          
MODIFY zsdt033 FROM TABLE lt_zsd033.          
IF sy-subrc 0.             
LOOP AT gt_lips INTO gs_lips WHERE mark 'X'.                gs_lips
-zmsg '保存成功'.                
MODIFY gt_lips FROM gs_lips TRANSPORTING zmsg.             
ENDLOOP.          
ENDIF.        
ENDIF.      
ENDIF.     
WHEN 'GV_SEL'.       
LOOP AT gt_lips INTO gs_lips.          gs_lips
-mark 'X'.          
MODIFY gt_lips FROM gs_lips TRANSPORTING mark.       
ENDLOOP.     
WHEN 'GV_NSEL'.       
LOOP AT gt_lips INTO gs_lips WHERE mark 'X'.          gs_lips
-mark ''.          
MODIFY gt_lips FROM gs_lips TRANSPORTING mark.       
ENDLOOP.  
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_alv_data .  
IF lips-vbeln IS NOT INITIAL.    
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'      
EXPORTING        
input  = lips-vbeln      
IMPORTING        
output = lips-vbeln.    

SELECT a~vbeln a~posnr a~matnr c~maktx           b
~zcpgg a~werks a~lgort a~lfimg           d
~zxulie1 d~zxulie2 e~zzcno e~zzshipno f~wbstk      
APPENDING CORRESPONDING FIELDS OF TABLE gt_lips      
FROM lips AS a      INNER 
JOIN mara AS b ON a~matnr = b~matnr      INNER 
JOIN makt AS ON b~matnr c~matnr AND c~spras '1'      
LEFT JOIN zsdt033 AS d ON a~vbeln = d~zvbeln AND a~posnr = d~zposnr      
LEFT JOIN zsdt003 AS e ON a~vbeln = e~vbeln AND a~posnr = e~posnr      
LEFT JOIN vbuk AS f ON a~vbeln = f~vbeln      
WHERE a~vbeln = lips-vbeln.      

CLEAR lips-vbeln.      
SORT gt_lips BY vbeln posnr matnr.      
DELETE ADJACENT DUPLICATES FROM gt_lips COMPARING vbeln posnr matnr.      

LOOP AT gt_lips INTO gs_lips.          
IF gs_lips-wbstk 'A'.             gs_lips
-zgzzt '未过账'.             
ELSEIF gs_lips-wbstk 'C'.               gs_lips
-zgzzt '已过账'.          
ENDIF.          
MODIFY gt_lips FROM gs_lips TRANSPORTING zgzzt.      
ENDLOOP.  

ENDIF.
ENDFORM.                    " FRM_GET_ALV_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_POST_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_post_date .  
DATA: ls_header_data    LIKE          bapiobdlvhdrcon,        ls_header_control 
LIKE          bapiobdlvhdrctrlcon,        lt_return         
LIKE TABLE OF bapiret2 WITH HEADER LINE,        c_return          
LIKE TABLE OF bapiret2 WITH HEADER LINE.  
DATA:lt_item LIKE TABLE OF bapiobdlvitemcon WITH HEADER LINE"交货单项目  
DATA:lt_zsd003 TYPE TABLE OF zsdt003,       ls_zsd003 
TYPE zsdt003.  
DATA:lv_flg TYPE c.  
DATA:lv_mess TYPE c LENGTH 100.  
CLEAR lv_flg.  
IF gt_lips[] IS NOT INITIAL.    
PERFORM frm_check_data.    
LOOP AT lt_post INTO ls_post.        ls_header_data
-deliv_numb = ls_post-vbeln.        ls_header_control
-deliv_numb = ls_post-vbeln.        ls_header_control
-post_gi_flg 'X'."过账状态        ls_header_control
-volume_flg 'X'"量的确认        ls_header_control
-deliv_date_flg 'X'"确认交货日期        

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'          
EXPORTING            header_data    
= ls_header_data            header_control 
= ls_header_control            delivery       
= ls_post-vbeln
*           TECHN_CONTROL  =
*           HEADER_DATA_SPL                  =
*           HEADER_CONTROL_SPL               =          
TABLES
*           HEADER_PARTNER =
*           HEADER_PARTNER_ADDR              =
*           HEADER_DEADLINES                 =
*           ITEM_DATA      =
*           ITEM_CONTROL   =
*           HANDLING_UNIT_SERNO              =            
return         = lt_return.        
READ TABLE lt_return WITH KEY type 'E'.        
IF sy-subrc 0.          
CLEAR lv_mess.          
LOOP AT lt_return WHERE type 'E' .              lv_mess 
= lv_mess && lt_return-message.          
ENDLOOP.          
CONDENSE lv_mess NO-GAPS.          
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.           ls_post
-wbstk 'A'"过账失败  未过账状态        

ELSE.          
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'            
EXPORTING              
wait   'X'            
IMPORTING              
return = c_return.            ls_post
-wbstk 'C'."已过账        
ENDIF.        ls_post
-zmess = lv_mess.        
MODIFY lt_post FROM ls_post TRANSPORTING wbstk zmess.    
ENDLOOP.    
LOOP AT gt_lips INTO gs_lips WHERE mark 'X'.        
READ TABLE lt_post INTO ls_post WITH KEY vbeln = gs_lips-vbeln"更新过账状态        
IF sy-subrc 0.            gs_lips
-zmsg = ls_post-zmess.           
IF ls_post-wbstk 'C'"过账成功 更新表
*              SELECT * INTO TABLE lt_zsd003
*                FROM zsdt003
*               WHERE vbeln = gs_lips-vbeln
*                  AND posnr = gs_lips-posnr.                ls_zsd003


-vbeln = gs_lips-vbeln.                ls_zsd003
-posnr = gs_lips-posnr.                ls_zsd003
-zzcno = gs_lips-zzcno"物流公司                ls_zsd003
-zzshipno = gs_lips-zzshipno."货运单号                
APPEND ls_zsd003 TO lt_zsd003.                
CLEAR ls_zsd003.             gs_lips
-wbstk ='C'.             gs_lips
-zgzzt '已过账'.             gs_lips
-zmsg '过账成功'.             

ELSE.               gs_lips
-wbstk 'A'.               gs_lips
-zgzzt '未过账'.            
ENDIF.        
ENDIF.            
MODIFY gt_lips FROM gs_lips TRANSPORTING wbstk zgzzt zmsg.            
CLEAR gs_lips.    
ENDLOOP.    

IF lt_zsd003[] IS NOT INITIAL.        
MODIFY zsdt003 FROM TABLE lt_zsd003.       
IF sy-subrc 0.          
COMMIT WORK.          
ELSE.            
ROLLBACK WORK.       
ENDIF.    
ENDIF.  
ENDIF.
ENDFORM.                    " FRM_POST_DATE
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_check_data .  
READ TABLE gt_lips INTO gs_lips WITH KEY mark 'X'.  
IF sy-subrc <> 0.      
MESSAGE '请选择你要过账的数据' TYPE 'E'.  
ENDIF.  
LOOP AT gt_lips INTO gs_lips WHERE mark 'X'.     
IF gs_lips-zxulie1 IS INITIAL OR gs_lips-zxulie2 IS INITIAL OR gs_lips-zzcno IS INITIAL OR gs_lips-zzshipno IS INITIAL.        
MESSAGE '请先完善开始序列号、结束序列号、物流公司、货运单号信息后才能过账' TYPE 'E'.     
ENDIF.     
IF gs_lips-wbstk 'C'.        
MESSAGE gs_lips-vbeln && ',单号已过账,不允许重复过账' TYPE 'E'.     
ENDIF.     ls_post
-vbeln = gs_lips-vbeln"可以过账内表     
APPEND ls_post TO lt_post.     
CLEAR:gs_lips,ls_post.  
ENDLOOP.
ENDFORM.                    " FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_WULIU_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_wuliu_data .
LOOP AT gt_lips INTO gs_lips.  
IF gs_lips-wbstk NE 'C' AND ( gs_lips-zzcno IS NOT INITIAL AND gs_lips-zzshipno IS NOT INITIAL ).    
MOVE-CORRESPONDING gs_lips TO gs_wl.    
APPEND gs_wl TO gt_wl.    
CLEAR:gs_lips,gs_wl.  
ENDIF.
ENDLOOP.

SORT gt_wl.
DELETE ADJACENT DUPLICATES FROM gt_wl COMPARING ALL FIELDS.
LOOP AT gt_lips INTO gs_lips.   
IF gs_lips-wbstk NE 'C' AND ( gs_lips-zzcno IS INITIAL OR gs_lips-zzshipno IS INITIAL ).      
READ TABLE gt_wl INTO gs_wl WITH KEY vbeln = gs_lips-vbeln.      
IF sy-subrc 0.          gs_lips
-zzcno = gs_wl-zzcno.          gs_lips
-zzshipno = gs_wl-zzshipno.      
ENDIF.   
ENDIF.   
MODIFY gt_lips FROM gs_lips TRANSPORTING zzcno zzshipno.
ENDLOOP.
ENDFORM.                    " FRM_WULIU_DATA

 2、GUI STATUS

3、屏幕号100  条码录入输入框属性设置双击响应

社会很单纯,复杂的是人
原文地址:https://www.cnblogs.com/coderfarmer/p/14686402.html