生产订单批量报工

状态栏及屏幕设置见图

*&---------------------------------------------------------------------*
*& Report  ZPPR106
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZPPR106.

TABLES: afko,afpo,aufk.

TYPESBEGIN OF tp_output,
         box    TYPE xfeld,
         aufnr  TYPE afko-aufnr,    " 生产订单
         werks  TYPE afru-werks,    " 工厂
         plnbez TYPE afko-plnbez,   " 物料编码
         maktx  TYPE makt-maktx,    " 物料描述
         wrkst  TYPE mara-wrkst,    " 基本物料
         zcpgg  TYPE mara-zcpgg,    " 规格型号
         gamng  TYPE afko-gamng,    " 生产订单数量
         gmein  TYPE afko-gmein,    " 单位
         lmnga  TYPE afru-lmnga,    " 确认数量
         xmnga  TYPE afru-xmnga,    " 确认废品数量
         rmnga  TYPE afru-rmnga,    " 确认返工数量
*         meinh  TYPE afru-meinh,    " 单位
         isdd   TYPE afru-isdd,     " 执行开始日期
         iedd   TYPE afru-iedd,     " 执行完成日期
         budat  TYPE afru-budat,    " 过账日期
         lmngv  TYPE afvv-lmnga,    " 已确认数量
         xmngv  TYPE afvv-xmnga,    " 已确认废品数量
         rmngv  TYPE afvv-rmnga,    " 已确认返工数量
         ltxa1  TYPE afru-ltxa1,    " 确认文本
         statu  TYPE char50,
         msg    TYPE bapi_msg,      " 消息
         fstyle TYPE lvc_t_styl,
         aufpl  TYPE afko-aufpl,
         objnr  TYPE aufk-objnr,
         ablad  TYPE afpo-ablad,
         rcol   TYPE char4,               "颜色
       END OF tp_output.
DATA: gt_output TYPE STANDARD TABLE OF tp_output.


TYPESBEGIN OF tp_afvv,
         aufpl TYPE afvv-aufpl,
         aplzl TYPE afvv-aplzl,
         gmnga TYPE afvv-gmnga,
         objnr TYPE afvc-objnr,
         lmnga TYPE afvv-lmnga,
         xmnga TYPE afvv-xmnga,
         rmnga TYPE afvv-rmnga,
       END OF tp_afvv.

TYPESBEGIN OF tp_statu,
         objnr TYPE afvc-objnr,
         stat  TYPE jest-stat,
         txt04 TYPE tj02t-txt04,
         txt30 TYPE tj02t-txt30,
       END OF tp_statu.

DATA: gt_fcat TYPE lvc_t_fcat,
      gs_layo TYPE lvc_s_layo.

CONSTANTS: yx VALUE 'X'.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_werks TYPE afru-werks OBLIGATORY DEFAULT '3100'.
SELECT-OPTIONS:s_aufnr FOR afko-aufnr,
               s_fevor FOR afko-fevor,
               s_gstrp FOR afko-gstrp"订单开始日期
               s_gltrp FOR afko-gltrp,"完成日期
               s_auart  FOR aufk-auart"订单类型
*               s_ablad FOR afpo-ablad.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN:
  COMMENT 1(20TEXT-sys FOR FIELD p_syst1             MODIF ID fnr,
  POSITION 33.
PARAMETERS:
  p_syst1 LIKE tj02t-txt04                           MODIF ID fnr,
  p_sysh1 LIKE jest-stat                    NO-DISPLAY.
SELECTION-SCREEN
  POSITION 46.
PARAMETERS:
  p_kz_e1   LIKE rcosa-excl1                           MODIF ID fnr.
SELECTION-SCREEN:
  COMMENT 40(5TEXT-exc FOR FIELD p_kz_e1             MODIF ID fnr,
  COMMENT 52(3TEXT-and FOR FIELD p_syst2             MODIF ID fnr,
    POSITION 58.
PARAMETERS:
  p_syst2 LIKE tj02t-txt04                           MODIF ID fnr,
  p_sysh2 LIKE jest-stat                    NO-DISPLAY.
SELECTION-SCREEN
    POSITION 71.

PARAMETERS:
  p_kz_e2   LIKE rcosa-excl1                           MODIF ID fnr.
SELECTION-SCREEN:
    COMMENT 65(5TEXT-exc FOR FIELD p_kz_e2             MODIF ID fnr.

SELECTION-SCREEN END   OF LINE.

SELECTION-SCREEN END OF BLOCK blk1.


INITIALIZATION.
  PERFORM frm_init_fcat.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_syst1.
  PERFORM val_req_status IN PROGRAM ppio_entry IF FOUND USING 'P_SYST1' CHANGING p_syst1 p_sysh1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_syst2.
  PERFORM val_req_status IN PROGRAM ppio_entry IF FOUND USING 'P_SYST2' CHANGING p_syst2 p_sysh2.

AT SELECTION-SCREEN ON p_syst1.
  PERFORM system_state_check IN PROGRAM ppio_entry IF FOUND USING yx CHANGING p_syst1 p_sysh1.

AT SELECTION-SCREEN ON p_syst2.
  PERFORM system_state_check IN PROGRAM ppio_entry IF FOUND USING yx CHANGING p_syst2 p_sysh2.


START-OF-SELECTION.
  PERFORM frm_get_data.

END-OF-SELECTION.
  PERFORM frm_show_data.


FORM frm_init_fcat.
  DATA: ls_fcat TYPE lvc_s_fcat.
  gs_layo-zebra 'X'.
  gs_layo-cwidth_opt 'X'.
  gs_layo-box_fname 'BOX'.
  gs_layo-stylefname 'FSTYLE'.
  gs_layo-info_fname 'RCOL'.

  DEFINE mro_fcat.
    CLEAR: ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-coltext = &2.
    ls_fcat-scrtext_l = &2.
    ls_fcat-scrtext_m = &2.
    ls_fcat-scrtext_s = &2.
    ls_fcat-no_zero 'X'.
    TRANSLATE ls_fcat-fieldname TO UPPER CASE.
    IF &3 NE space.
      ls_fcat-ref_field = ls_fcat-fieldname.
      ls_fcat-ref_table = &3.
      TRANSLATE ls_fcat-ref_table TO UPPER CASE.
    ENDIF.
    IF &1 EQ 'aufnr'" OR &1 EQ 'aufnr'.
      ls_fcat-hotspot 'X'.
      ls_fcat-key 'X'.
    ENDIF.
    ls_fcat-edit = &4.
    TRANSLATE ls_fcat-ref_table TO UPPER CASE.
    APPEND ls_fcat TO gt_fcat.
  END-OF-DEFINITION.

  mro_fcat 'aufnr' '生产订单' 'afko' space.
  mro_fcat 'werks' '工厂' space space.
  mro_fcat 'plnbez' '物料编码' space space.  mro_fcat 
'maktx' '物料描述' space space.  mro_fcat 
'wrkst' '基本物料' space space.  mro_fcat 
'zcpgg' '产品规格' space space.  mro_fcat 
'gamng' '生产订单数量' 'afko' space.  mro_fcat 
'gmein' '单位' 'afko' space.  mro_fcat 
'lmnga' '确认数量' 'afru' 'X'.  mro_fcat 
'xmnga' '确认废品数量' 'afru' 'X'.  mro_fcat 
'rmnga' '确认返工数量' 'afru' 'X'.  mro_fcat 
'ablad' '卸货点' 'afpo' space.  mro_fcat 
'isdd' '执行开始日期' 'afru' 'X'.  mro_fcat 
'iedd' '执行完成日期' 'afru' 'X'.  mro_fcat 
'budat' '过账日期' 'afru' 'X'.  mro_fcat 
'lmngv' '已确认数量' 'afvv' space.  mro_fcat 
'xmngv' '已确认废品数量' 'afvv' space.  mro_fcat 
'rmngv' '已确认返工数量' 'afvv' space.  mro_fcat 
'ltxa1' '确认文本' 'afru' 'X'.  mro_fcat 
'statu' '系统状态' space space.  mro_fcat 
'msg' '消息' space space.

ENDFORM.



*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .  
DATA result3 TYPE string.  
DATA c_test3 TYPE string.  
DATA c_test6 TYPE string.                              "add by pengxz 20180903  
DATA result2(4TYPE c.  
DATA result TYPE string.  

CONSTANTS:c_test TYPE string VALUE '002920|000178|002154|002154|002850|000178|000487|000054|003091|002553'.  
CONSTANTS:c_zfc TYPE string VALUE 'sap_'.  
DATA:c_test1 TYPE string .  
DATA: lv_timestamp TYPE timestamp"UTC Time Stamp in Short Form (YYYYMMDDhhmmss)  
GET TIME STAMP FIELD lv_timestamp.  
DATA: lv_timestamp1 TYPE string .  c_test1 
= c_zfc && lv_timestamp .  

CONSTANTS:c_test2 TYPE string VALUE 'SAP消息通知'.  
DATA: ls_style  TYPE lvc_s_styl.  
DATA: lv_stprs TYPE stprs .  
DATA: ls_output LIKE LINE OF gt_output,        lv_delfag 
TYPE xfeld,        lv_index  
LIKE sy-tabix.  

DATA: lt_afvv  TYPE STANDARD TABLE OF tp_afvv,        ls_afvv  
LIKE LINE OF lt_afvv,        lt_statu 

TYPE STANDARD TABLE OF tp_statu,        ls_statu 
LIKE LINE OF lt_statu,        lt_jest  

TYPE STANDARD TABLE OF jest,        ls_jest  
LIKE LINE OF lt_jest.  

RANGES: rg_aufpl FOR afko-aufpl,          rg_objnr 
FOR aufk-objnr,          rg_stati 
FOR jest-stat,          rg_state 
FOR jest-stat.  

IF p_sysh1 NE space.    
IF p_kz_e1 EQ space.      rg_stati
-sign 'I'.      rg_stati
-option 'EQ'.      rg_stati
-low = p_sysh1.      
APPEND rg_stati.    
ELSE.      rg_state
-sign 'I'.      rg_state
-option 'EQ'.      rg_state
-low = p_sysh1.      
APPEND rg_state.    
ENDIF.  
ENDIF.  

IF p_sysh2 NE space.    
IF p_kz_e2 EQ space.      rg_stati
-sign 'I'.      rg_stati
-option 'EQ'.      rg_stati
-low = p_sysh2.      
APPEND rg_stati.    
ELSE.      rg_state
-sign 'I'.      rg_state
-option 'EQ'.      rg_state
-low = p_sysh2.      
APPEND rg_state.    
ENDIF.  
ENDIF.  

"排除技术性完成的,已删除的,已关闭的,已报工的  
CLEAR: rg_state .  rg_state
-sign 'I'.  rg_state
-option 'EQ'.  rg_state
-low 'I0045'.  
APPEND rg_state.  

CLEAR: rg_state .  rg_state
-sign 'I'.  rg_state
-option 'EQ'.  rg_state
-low 'I0013'.  
APPEND rg_state.  

CLEAR: rg_state .  rg_state
-sign 'I'.  rg_state
-option 'EQ'.  rg_state
-low 'I0046'.  
APPEND rg_state.  

CLEAR: rg_state .  rg_state
-sign 'I'.  rg_state
-option 'EQ'.  rg_state
-low 'I0009'.  
APPEND rg_state.

*  CLEAR: rg_state .
*  rg_state-sign = 'I'.
*  rg_state-option = 'EQ'.
*  rg_state-low = 'I0010'.
*  APPEND rg_state.  

SELECT afko~aufnr afpo~matnr as plnbez makt~maktx mara~wrkst mara~zcpgg aufk~werks         afko
~gamng afko~gmein afko~aufpl aufk~objnr afpo~ablad    
INTO CORRESPONDING FIELDS OF TABLE gt_output    
FROM afko   INNER 
JOIN afpo      
ON afko~aufnr EQ afpo~aufnr   INNER 
JOIN aufk      
ON afko~aufnr EQ aufk~aufnr   INNER 
JOIN makt      
ON afpo~matnr EQ makt~matnr     
AND makt~spras EQ sy-langu   INNER 
JOIN mara ON afpo~matnr EQ mara~matnr   
WHERE afko~aufnr IN s_aufnr     
AND afko~fevor IN s_fevor     
AND afko~gstrp IN s_gstrp     
AND afko~gltrp IN s_gltrp     
AND aufk~auart IN s_auart     
AND aufk~werks EQ p_werks     
AND aufk~autyp EQ '10'     
AND aufk~loekz EQ space.  

CHECK sy-subrc EQ 0.  
LOOP AT gt_output INTO ls_output.    
IF rg_aufpl[] IS INITIAL OR ls_output-aufpl NOT IN rg_aufpl.      rg_aufpl
-sign 'I'.      rg_aufpl
-option 'EQ'.      rg_aufpl
-low = ls_output-aufpl.      
APPEND rg_aufpl.    
ENDIF.    

IF rg_objnr[] IS INITIAL OR ls_output-objnr NOT IN rg_objnr.      rg_objnr
-sign 'I'.      rg_objnr
-option 'EQ'.      rg_objnr
-low = ls_output-objnr.      
APPEND rg_objnr.    
ENDIF.  
ENDLOOP.  

IF rg_objnr[] IS NOT INITIAL.    
SELECT jest~objnr jest~stat tj02t~txt04 tj02t~txt30           tj02
~nodis      
INTO CORRESPONDING FIELDS OF TABLE lt_statu      
FROM jest INNER JOIN tj02t        
ON jest~stat EQ tj02t~istat       
AND tj02t~spras EQ sy-langu     INNER 
JOIN tj02        
ON jest~stat EQ tj02~istat       
AND tj02~nodis EQ space     
WHERE jest~objnr IN rg_objnr       
AND jest~inact EQ space     
ORDER BY jest~objnr ASCENDING tj02t~txt04 DESCENDING.  
ENDIF.  

IF rg_aufpl[] IS NOT INITIAL.    
SELECT afvv~aufpl afvv~aplzl afvv~gmnga afvc~objnr           afvv
~lmnga afvv~xmnga afvv~rmnga      
INTO CORRESPONDING FIELDS OF TABLE lt_afvv      
FROM afvv INNER JOIN afvc        
ON afvv~aufpl EQ afvc~aufpl       
AND afvv~aplzl EQ afvc~aplzl     
WHERE afvv~aufpl IN rg_aufpl       
AND NOT EXISTS SELECT * FROM jest WHERE objnr EQ afvc~objnr AND stat EQ 'I0013' AND inact EQ space )     
ORDER BY afvv~aufpl ASCENDING afvv~aplzl DESCENDING.  
ENDIF.  


LOOP AT gt_output INTO ls_output.    lv_index 
= sy-tabix.    
CLEAR: lv_delfag.    
READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_output-aufpl.    
IF sy-subrc EQ 0.      ls_output
-lmngv = ls_afvv-lmnga.      ls_output
-xmngv = ls_afvv-xmnga.      ls_output
-rmngv = ls_afvv-rmnga.    
ENDIF.    ls_output
-isdd = sy-datum.    ls_output
-iedd = sy-datum.    ls_output
-budat = sy-datum.    ls_output
-lmnga = ls_output-gamng ( ls_output-lmngv + ls_output-xmngv + ls_output-rmngv ).    
LOOP AT lt_statu INTO ls_statu WHERE objnr EQ ls_output-objnr" AND stat IN rg_stat.      
IF ls_output-statu EQ space.        ls_output
-statu = ls_statu-txt04.      
ELSE.        
CONCATENATE ls_output-statu ls_statu-txt04 INTO ls_output-statu SEPARATED BY space.      
ENDIF.    
ENDLOOP.    

" 排除范围内    
IF rg_state[] IS NOT INITIAL.      
CLEAR: lv_delfag.      
LOOP AT rg_state.        
READ TABLE lt_statu WITH KEY objnr = ls_output-objnr stat = rg_state-low TRANSPORTING NO FIELDS.        
IF sy-subrc EQ 0.          lv_delfag 
'X'.          
EXIT.        
ENDIF.      
ENDLOOP.      
IF lv_delfag EQ 'X'.        
DELETE gt_output INDEX lv_index.        
CONTINUE.      
ENDIF.    
ENDIF.    

" 只查询范围内    
IF rg_stati[] IS NOT INITIAL.      
CLEAR: lv_delfag.      
LOOP AT rg_stati.        
READ TABLE lt_statu WITH KEY objnr = ls_output-objnr stat = rg_stati-low TRANSPORTING NO FIELDS.        
IF sy-subrc NE 0.          lv_delfag 
'X'.          
EXIT.        
ENDIF.      
ENDLOOP.      
IF lv_delfag EQ 'X'.        
DELETE gt_output INDEX lv_index.        
CONTINUE.      
ENDIF.    
ENDIF.    

CLEAR: lv_stprs .
*    SELECT SINGLE stprs INTO lv_stprs FROM mbew WHERE matnr = ls_output-plnbez AND bwkey = '1000' .

*    IF lv_stprs = 0 OR lv_stprs IS INITIAL .
*      ls_output-msg = 'W:物料无标准成本,无法报工自动入库' .
*      CLEAR: ls_output-fstyle, ls_output-fstyle[].
*      ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
*      INSERT ls_style INTO TABLE ls_output-fstyle.
*    ENDIF .

*    IF ls_output-msg = 'W:物料无标准成本,无法报工自动入库' .
*      ls_output-rcol = 'C610' .
*    ENDIF .    

MODIFY gt_output FROM ls_output INDEX lv_index.  
ENDLOOP.  
CLEAR: c_test6 .  
LOOP AT gt_output INTO ls_output WHERE rcol 'C610'.    
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'      
EXPORTING        
input  = ls_output-aufnr      
IMPORTING        
output = ls_output-aufnr.    result 
= ls_output-aufnr && '*' && ls_output-plnbez.    
IF c_test6 EQ space.      c_test6 
= result.      
CLEAR result.    
ELSE.      
"CONCATENATE '下列工单物料无标准成本'c_test3 result '成本核算后,请仓库再入库,谢谢!'INTO c_test3.      
CONCATENATE c_test6 ';'result INTO c_test6.    
ENDIF.    
CLEAR: ls_output .  
ENDLOOP.

*  IF c_test6 IS NOT INITIAL .
*    CLEAR: c_test3 .
*    CONCATENATE '下列工单物料无标准成本''('c_test6 ')''成本核算后,请再报工入库,谢谢!' INTO c_test3.
*
*    CLEAR: result3 .
*    CALL FUNCTION 'ZWXCP_MESSAGE'
*      EXPORTING
*        l_userid      = c_test
*        l_messageid   = c_test1
*        l_title       = c_test2
*        l_description = c_test3
*      IMPORTING
*        e_c           = result3.
*  ENDIF .
ENDFORM.


*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_show_data .  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    
EXPORTING      i_callback_program       
= sy-repid      i_callback_pf_status_set 
'FRM_SET_STATUS'      i_callback_user_command  
'FRM_USER_COMMAND'      is_layout_lvc            
= gs_layo      it_fieldcat_lvc          
= gt_fcat      i_save                   
'A'    
TABLES      t_outtab                 
= gt_output    
EXCEPTIONS      program_error            
1      
OTHERS                   2.  
IF sy-subrc <> 0.
* Implement suitable error handling here  
ENDIF.
ENDFORM.


FORM frm_set_status USING rt_extab TYPE slis_t_extab.  
SET PF-STATUS 'ZPF_001'.  

DATA: lo_grid TYPE REF TO cl_gui_alv_grid.  
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
IMPORTING      e_grid 
= lo_grid.  

CALL METHOD lo_grid->register_edit_event    
EXPORTING      i_event_id 
= cl_gui_alv_grid=>mc_evt_modified.  
IF sy-subrc <> 0.  
ENDIF.

ENDFORM.


FORM frm_user_command USING r_ucomm LIKE sy-ucomm                            rs_selfield 
TYPE slis_selfield.  
IF r_ucomm  EQ '&CHDR'.    
PERFORM frm_prohdr_create.    rs_selfield
-refresh 'X'.  
ELSEIF r_ucomm EQ '&IC1'.    
IF rs_selfield-fieldname EQ 'AUFNR' AND rs_selfield-value NE space.      
SET PARAMETER ID 'ANR' FIELD rs_selfield-value.      
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.    
ENDIF.  
ENDIF.

ENDFORM.


FORM frm_prohdr_create.  

DATA: ls_output LIKE LINE OF gt_output,        ls_style  
TYPE lvc_s_styl,        lv_index  
LIKE sy-tabix.  
DATA: ls_return TYPE bapiret1,        lt_detrtn 
TYPE STANDARD TABLE OF bapi_coru_return,        ls_detrtn 
LIKE LINE OF lt_detrtn,        lt_hdrlev 
TYPE STANDARD TABLE OF bapi_pp_hdrlevel,        ls_hdrlev 
LIKE LINE OF lt_hdrlev.  
DATA:lt_merry TYPE VALUE 'X'.  
CLEAR: ls_return, lt_hdrlev, lt_hdrlev[].  
LOOP AT gt_output INTO ls_output WHERE box 'X' AND msg ''.    lv_index 
= sy-tabix.    
CHECK ls_output-fstyle[] IS INITIAL.    
CLEAR: ls_hdrlev, lt_hdrlev[], lt_detrtn, lt_detrtn[], ls_return.    ls_hdrlev

-orderid = ls_output-aufnr.        " 订单号    ls_hdrlev
-fin_conf '1'.                   " 自动最终确认    ls_hdrlev
-postg_date = ls_output-budat.     " 过账日期    ls_hdrlev
-conf_text = ls_output-ltxa1.      " 确认文本    ls_hdrlev
-conf_quan_unit = ls_output-gmein" 单位    ls_hdrlev
-exec_start_date = ls_output-isdd" 确认执行开始日期    ls_hdrlev
-exec_fin_date = ls_output-iedd.   " 确认执行完成日期    ls_hdrlev
-yield = ls_output-lmnga.          " 确认数量    ls_hdrlev
-scrap = ls_output-xmnga.          " 确认废品数量    ls_hdrlev
-rework = ls_output-rmnga.         " 确认返工数量    
APPEND ls_hdrlev TO lt_hdrlev.


*  IF lt_hdrlev[] IS INITIAL.
*    MESSAGE e208(00) WITH '请选择还未报工的订单数据'.
*    RETURN.
*  ENDIF.
*  CHECK lt_hdrlev[] IS NOT INITIAL.    
CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_HDR'      
IMPORTING        
return        = ls_return      
TABLES        athdrlevels   
= lt_hdrlev        detail_return 
= lt_detrtn.    

IF ls_return-type 'S' OR ls_return-type EQ space.      
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
EXPORTING          
wait 'X'.    
ELSE.      
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    
ENDIF.

*    LOOP AT gt_output INTO ls_output WHERE box = 'X'.
*    
LOOP AT lt_detrtn INTO ls_detrtn FROM 1.      ls_output
-msg = ls_detrtn-message.    
ENDLOOP.    
IF ls_return-type 'S' OR ls_return-type EQ space.      
CLEAR: ls_output-fstyle, ls_output-fstyle[].      ls_style
-style = cl_gui_alv_grid=>mc_style_disabled.      
INSERT ls_style INTO TABLE ls_output-fstyle.    
ENDIF.    
MODIFY gt_output FROM ls_output INDEX lv_index.    
CLEAR: ls_output, ls_detrtn, ls_return .    
CLEAR: lt_detrtn, lt_detrtn[] .
*    ENDLOOP.  
ENDLOOP.
ENDFORM.

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