ABAP-批导采购订单

*&---------------------------------------------------------------------*
*& Report ZMMR_034
*&---------------------------------------------------------------------*
*& Responsibility
*&---------------------------------------------------------------------*
*& Program Name  : 采购订单批量导入
*& Date written  : 2018.04.07
*& Author's name : Li Jun
*& Last update   : 2018.04.11
*& Program title : 采购订单批量导入
*& Project Name  : 安全集团
*& Version       : Ver.1.0
*&---------------------------------------------------------------------*
*& Description   : (Incl. Related Function Area and System)
*&---------------------------------------------------------------------*
*& Change History
*&---------------------------------------------------------------------*
*& Date        | Programmer | Corr. # | Description
*&
*&
*&---------------------------------------------------------------------*
REPORT zmmr_034.

*----------------------------------------------------------------------*
*           INCLUDE                                                    *
*----------------------------------------------------------------------*
INCLUDE <list>.
INCLUDE <icon>.

*----------------------------------------------------------------------*
*           CONSTANTS                                                  *
*----------------------------------------------------------------------*
CONSTANTS :
* 常量定义
  BEGIN OF gc_con,
    dow(4TYPE c                VALUE 'FC01',     "下载按钮
    objid  TYPE wwwdatatab-objid VALUE 'ZMMR_034'"SAP WWW 网关对象名
    waers  TYPE ekko-waers       VALUE 'CNY',      "货币码
  END OF gc_con,

* EXCEL文件行和列
  BEGIN OF gc_line,
    begin_row TYPE i     VALUE '5',     "起始行
    begin_col TYPE i     VALUE '2',     "起始单元格
    end_row   TYPE i     VALUE '65535'"终了行
    end_col   TYPE i     VALUE '45',    "终了单元格
  END OF gc_line,

* 科目分配类别
  BEGIN OF gc_knttp,
    p TYPE eban-knttp VALUE 'P',      "项目
    s TYPE eban-knttp VALUE 'S',      "展会类
    a TYPE eban-knttp VALUE 'A',      "资产
    k TYPE eban-knttp VALUE 'K',      "成本中
  END OF gc_knttp.

*----------------------------------------------------------------------*
*           TABLES                                                    *
*----------------------------------------------------------------------*
TABLES sscrfields.

*----------------------------------------------------------------------*
*           TYPES                                                      *
*----------------------------------------------------------------------*
TYPESBEGIN OF ty_upload,
         icon   TYPE string,     "状态
         remark TYPE string,     "消息
         number TYPE i,          "序号
         bedat  TYPE string,      "凭证日期
         bsart  TYPE string,      "采购订单类型
         lifnr  TYPE string,      "供应商编码
         waers  TYPE string,      "货币
         bukrs  TYPE string,      "公司代码
         ekorg  TYPE string,      "采购组织
         ekgrp  TYPE string,      "采购组
         zterm  TYPE string,      "付款条件
         ebeln  TYPE string,      "采购订单号
         ebelp  TYPE string,      "采购订单行项目
         werks  TYPE string,      "工厂
         knttp  TYPE string,      "科目分配类别
         matnr  TYPE string,      "物料编码
         txz01  TYPE string,      "物料描述
         matkl  TYPE string,      "物料组
         menge  TYPE string,      "采购数量
         meins  TYPE string,      "订单单位
         netwr  TYPE string,       "净价
         peinh  TYPE string,      " 价格单位
         bprme  TYPE string,      " 订单价格单位(采购)
         mwskz  TYPE string,      "税码
         eindt  TYPE string,      "交货日期
         lgort  TYPE string,      " 库存地点
         uebtk  TYPE string,      " 标识:允许未限制的过量交货
         retpo  TYPE string,      " 退货标识
         kostl  TYPE string,      "成本中心
         anln1  TYPE string,      "固定资产编号
         sakto  TYPE string,      "总账科目
         zcgpp  TYPE string,       " 采购品牌
         kschl1 TYPE string,   " 条件类型1
         kbetr1 TYPE string,   " 条件金额1
         kpein1 TYPE string,   " 条件定价单位1
         kschl2 TYPE string,   " 条件类型2
         kbetr2 TYPE string,   " 条件金额2
         kpein2 TYPE string,   " 条件定价单位2
         kschl3 TYPE string,   " 条件类型3
         kbetr3 TYPE string,   " 条件金额3
         kpein3 TYPE string,   " 条件定价单位3
         kschl4 TYPE string,   " 条件类型4
         kbetr4 TYPE string,   " 条件金额4
         kpein4 TYPE string,   " 条件定价单位4
         kschl5 TYPE string,   " 条件类型5
         kbetr5 TYPE string,   " 条件金额5
         kpein5 TYPE string,   " 条件定价单位5
*         filed01 TYPE string,     "项目01
*         filed02 TYPE string,     "项目02
*         filed03 TYPE string,     "项目03
*         filed04 TYPE string,     "项目04
*         filed05 TYPE string,     "项目05
*         filed06 TYPE string,     "项目06
*         filed07 TYPE string,     "项目07
*         filed08 TYPE string,     "项目08
*         filed09 TYPE string,     "项目09
*         filed10 TYPE string,     "项目10
*         filed11 TYPE string,     "项目11
*         filed12 TYPE string,     "项目12
*         filed13 TYPE string,     "项目13
*         filed14 TYPE string,     "项目14
*         filed15 TYPE string,     "项目15
*         filed16 TYPE string,     "项目16
*         filed17 TYPE string,     "项目17
*         filed18 TYPE string,     "项目18
*         filed19 TYPE string,     "项目19
*         filed20 TYPE string,     "项目20
*         filed21 TYPE string,     "项目21
*         filed22 TYPE string,     "项目22
*         filed23 TYPE string,     "项目23
*         filed24 TYPE string,     "项目24
*         filed25 TYPE string,     "项目25
*         filed26 TYPE string,     "项目26
*         filed27 TYPE string,     "项目27
*         filed28 TYPE string,     "项目28
*         filed29 TYPE string,     "项目29
*         filed30 TYPE string,     "项目30
*         filed31 TYPE string,     "项目31
*         filed32 TYPE string,     "项目32
*         filed33 TYPE string,     "项目33
*         filed34 TYPE string,     "项目34
*         filed35 TYPE string,     "项目35
*         filed36 TYPE string,     "项目36
*         filed37 TYPE string,     "项目37
*         filed38 TYPE string,     "项目38
*         filed39 TYPE string,     "项目39
*         filed40 TYPE string,     "项目40
*         filed41 TYPE string,     "项目41
*         filed42 TYPE string,     "项目42
*         filed43 TYPE string,     "项目43
*         filed44 TYPE string,     "项目44
       END OF ty_upload.

TYPESBEGIN OF ty_alv,
         sel    TYPE char1,
         bedat  TYPE ekko-bedat,      "凭证日期
         bsart  TYPE ekko-bsart,      "采购订单类型
         lifnr  TYPE ekko-lifnr,      "供应商编码
         waers  TYPE ekko-waers,      "货币
         bukrs  TYPE ekko-bukrs,      "公司代码
         ekorg  TYPE ekko-ekorg,      "采购组织
         ekgrp  TYPE ekko-ekgrp,      "采购组
         zterm  TYPE ekko-zterm,      "付款条件
         ebeln  TYPE ekko-ebeln,      "采购订单号
         ebelp  TYPE ekpo-ebelp,      "采购订单行项目
         werks  TYPE ekpo-werks,      "工厂
         knttp  TYPE ekpo-knttp,      "科目分配类别
         matnr  TYPE ekpo-matnr,      "物料编码
         txz01  TYPE ekpo-txz01,      "物料描述
         matkl  TYPE ekpo-matkl,      "物料组
         menge  TYPE ekpo-menge,      "采购数量
         meins  TYPE ekpo-meins,      "订单单位
         netwr  TYPE komp-netwr,       "净价
         peinh  TYPE ekpo-peinh,      " 价格单位
         bprme  TYPE ekpo-bprme,      " 订单价格单位(采购)
         mwskz  TYPE ekpo-mwskz,      "税码
         eindt  TYPE eket-eindt,      "交货日期
         lgort  TYPE ekpo-lgort,      " 库存地点
         uebtk  TYPE ekpo-uebtk,      " 标识:允许未限制的过量交货
         retpo  TYPE ekpo-retpo,      " 退货标识
         kostl  TYPE ekkn-kostl,      "成本中心
         anln1  TYPE ekkn-anln1,      "固定资产编号
         sakto  TYPE ekkn-sakto,      "总账科目
*        posid  TYPE prps-posid,      " WBS元素
         zcgpp  TYPE ekpo-zcgpp,     " 采购品牌
         kschl1 TYPE komv-kschl,     " 条件类型1
         kbetr1 TYPE komv-kbetr,     " 条件金额1
         kpein1 TYPE komv-kpein,     " 条件定价单位1
         kschl2 TYPE komv-kschl,     " 条件类型2
         kbetr2 TYPE komv-kbetr,     " 条件金额2
         kpein2 TYPE komv-kpein,     " 条件定价单位2
         kschl3 TYPE komv-kschl,     " 条件类型3
         kbetr3 TYPE komv-kbetr,     " 条件金额3
         kpein3 TYPE komv-kpein,     " 条件定价单位3
         kschl4 TYPE komv-kschl,     " 条件类型4
         kbetr4 TYPE komv-kbetr,     " 条件金额4
         kpein4 TYPE komv-kpein,     " 条件定价单位4
         kschl5 TYPE komv-kschl,     " 条件类型5
         kbetr5 TYPE komv-kbetr,     " 条件金额5
         kpein5 TYPE komv-kpein,     " 条件定价单位5
*        aufnr  TYPE ekkn-aufnr,     " 内部订单
*        ernam  TYPE eban-ernam,     " 创建人
*        zxmbh  TYPE ekpo-zxmbh,     " 项目编号
*        zkhbm  TYPE ekpo-zkhbm,     " 客户编码
*        zcgfl  TYPE ekpo-zcgfl,     " 采购分类         
type   TYPE bapiret2-type,         
icon   TYPE icon-id,        " 状态         remark 
TYPE string,         " 消息         
number TYPE i,              " 序号       
END OF ty_alv.
*----------------------------------------------------------------------*
*           DATA                                                       *
*----------------------------------------------------------------------*
* 全局内表定义
DATA: gt_upload      TYPE STANDARD TABLE OF ty_upload"上传      gt_alv         
TYPE STANDARD TABLE OF ty_alv,    "出力      gt_alv2        
TYPE STANDARD TABLE OF ty_alv,    "出力      gt_fieldcat    
TYPE slis_t_fieldcat_alv,         "ALV控制      gt_sort        
TYPE slis_t_sortinfo_alv,         "ALV排序

* 全局构造定义      gs_fieldcat    
TYPE slis_fieldcat_alv,           "ALV控制      gs_layout      
TYPE slis_layout_alv,             "ALV布局      g_function_key 
TYPE smp_dyntxt.                  "功能按钮

*----------------------------------------------------------------------*
*           SELECTION-SCREEN                                           *
*----------------------------------------------------------------------*
* 工具栏
SELECTION-SCREEN FUNCTION KEY 1.
* 数据导入
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-t01.
* 选择导入文件
PARAMETERS p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk01.

* 号码选择
SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-t02.
PARAMETERS: rb_nei RADIOBUTTON GROUP gu1"内部给号            rb_wai 
RADIOBUTTON GROUP gu1"外部给号
SELECTION-SCREEN END OF BLOCK blk02.
*----------------------------------------------------------------------*
*           DEFINE                                                     *
*----------------------------------------------------------------------*
*出力字段设置
DEFINE mcr_set_fieldcat.  gs_fieldcat

-tabname    = &1.  " 需要输出的内表名  gs_fieldcat
-fieldname  = &2.  " 需要输出的内表的字段名  gs_fieldcat
-seltext_l  = &3.  " 字段的描述-长字段标签  gs_fieldcat
-col_pos    = &4.  " 字段的位置  
APPEND gs_fieldcat TO gt_fieldcat.  
CLEAR  gs_fieldcat.

END-OF-DEFINITION.
*----------------------------------------------------------------------*
*           INITIALIZATION                                             *
*----------------------------------------------------------------------*
INITIALIZATION.
* 工具栏添加下载模板按钮  
CLEAR g_function_key.  g_function_key
-icon_id   = icon_export.  g_function_key
-icon_text '下载模版'.  g_function_key
-quickinfo '下载模版'.  sscrfields
-functxt_01    = g_function_key.

*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN                                        *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

* 按下下载模板按钮时  
IF sy-ucomm 'FC01'.
*   模板下载校验    
PERFORM sub_download_templet.
* 按下回车或执行按钮时  
ELSE.
*   文件必输校验    
PERFORM sub_file_obligatory.  
ENDIF.

*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN  ON VALUE-REQUEST                      *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 选择文件搜索帮助  
PERFORM sub_set_file_f4 CHANGING p_file.

*----------------------------------------------------------------------*
*           START-OF-SELECTION                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.
* 批量导入数据  
PERFORM sub_upload_data.

* 检查数据  
PERFORM sub_check_data.

* alv显示  
PERFORM sub_display_data.

*&---------------------------------------------------------------------*
*&       Form SUB_DOWNLOAD_TEMPLET
*&---------------------------------------------------------------------*
*&       模板下载
*&---------------------------------------------------------------------*
FORM sub_download_templet.

* 局部变量定义  
DATA:lo_objdata     TYPE wwwdatatab,             "表 WWWDATA 的内容       lo_mime        
TYPE w3mime,                 "MIME 数据容器       lc_fullpath    
TYPE string VALUE 'c:\',     "文件路径       lc_path        
TYPE string VALUE 'c:\',     "文件路径       lc_name        
TYPE string,                 "文件名称       ls_destination 
TYPE rlgrap-filename,        "文件名       ls_objnam      
TYPE string,                 "SAP WWW 网关对象名       l_rc           
TYPE sy-subrc,               "返回码       ls_errtxt      
TYPE string,                 "错误消息       l_dest         
TYPE sapb-sappfad.           "SAP 存档链接文件路径

* 模板下载路径名  lc_name 
TEXT-001.  
CALL METHOD cl_gui_frontend_services=>file_save_dialog    
EXPORTING      window_title              
'模板下载'      default_extension         
'xlsx'      default_file_name         
= lc_name    
CHANGING      filename                  
= lc_name      path                      
= lc_path      fullpath                  
= lc_fullpath    
EXCEPTIONS      cntl_error                
1      error_no_gui              
2      not_supported_by_gui      
3      invalid_default_file_name 
4      
OTHERS                    5.
* 没有选择路径  
IF lc_fullpath ''.    
MESSAGE  '请选择正确的路径!' TYPE 'E'.  
ELSE.
*-  路径名    l_dest 
= lc_fullpath.    

SELECT SINGLE           relid                   
"IMPORT/EXPORT 记录中的区域           objid                   
"SAP WWW 网关对象名      
FROM wwwdata      
INTO CORRESPONDING FIELDS OF lo_objdata     
WHERE srtf2 0      
AND relid 'MI'      
AND objid = gc_con-objid.    

IF sy-subrc <> OR lo_objdata-objid IS INITIAL.      
CONCATENATE '模板文件:' gc_con-objid                  
'不存在,请用TCODE:SMW0进行加载' INTO ls_errtxt.      
MESSAGE e001(00WITH ls_errtxt.    
ENDIF.    ls_destination 

= l_dest.    
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'      
EXPORTING        
key         = lo_objdata        destination 
= ls_destination      
IMPORTING        rc          
= l_rc.    
IF l_rc <> 0.      
MESSAGE '模板下载失败' TYPE 'E'.    
ENDIF.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_FILE_OBLIGATORY
*&---------------------------------------------------------------------*
*       文件必输校验
*----------------------------------------------------------------------*
FORM sub_file_obligatory .
* 文件必输校验  
IF p_file IS INITIAL.    
MESSAGE '请选择导入的文件' TYPE 'E'.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_SET_FILE_F4
*&---------------------------------------------------------------------*
*       选择导入文件的检索帮助
*----------------------------------------------------------------------*
*      -->O_FILE  文件路径
*----------------------------------------------------------------------*
FORM sub_set_file_f4 CHANGING o_file TYPE rlgrap-filename.
* 局部变量定义  
DATA l_filename TYPE rlgrap-filename.    "文件名  
CLEAR l_filename.
* 选择文件搜索帮助  
CALL FUNCTION 'WS_FILENAME_GET'    
EXPORTING      def_path         
= o_file      
mask             ',*.xlsx,*.XLSX,*.xls,*.XLS.'      
mode             '0'      
title            TEXT-999    
IMPORTING      filename         
= l_filename    
EXCEPTIONS      inv_winsys       
1      no_batch         
2      selection_cancel 
3      selection_error  
4      
OTHERS           5.
* 如果选择了文件  
IF sy-subrc AND l_filename IS NOT INITIAL.    o_file 
= l_filename.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_UPLOAD_DATA
*&---------------------------------------------------------------------*
*       文件上传
*----------------------------------------------------------------------*
FORM sub_upload_data .
* 局部变量的定义  
DATA: lt_excel    TYPE TABLE OF alsmex_tabline,  "具有 Excel 数据的表行        ls_excel    
TYPE alsmex_tabline,           "具有 Excel 数据的表行        ls_upload   
TYPE ty_upload,                "上传构造        l_begin_row 
TYPE i,                        "起始行        l_end_row   
TYPE i,                        "终了行        l_begin_col 
TYPE i,                        "起始列        l_end_col   
TYPE i,                        "终了列        l_index     
TYPE i,                        "项目位置        l_number    
TYPE i.                        "上传文件行数  

CLEAR gt_upload.
* 选择文件后做后续处理  
CHECK p_file IS NOT INITIAL.

* 把文件的数据变成内表  
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    
EXPORTING      filename                
= p_file      i_begin_col             
= gc_line-begin_col      i_begin_row             
= gc_line-begin_row      i_end_col               
= gc_line-end_col      i_end_row               
= gc_line-end_row    
TABLES      intern                  
= lt_excel    
EXCEPTIONS      inconsistent_parameters 
1      upload_ole              
2      
OTHERS                  3.

* 处理内表数据  
CLEAR ls_excel.  
LOOP AT lt_excel INTO ls_excel.    l_index 
= ls_excel-col + 3.    
ASSIGN COMPONENT l_index OF STRUCTURE ls_upload TO FIELD-SYMBOL(<f>).    

TRY.        
MOVE ls_excel-value TO <f>.      
CATCH cx_root INTO DATA(cx).        ls_upload
-remark = cx->get_text).        ls_upload
-icon   = icon_led_red.    
ENDTRY.    

AT END OF row.      ls_upload
-icon = icon_yellow_light.      l_number 
= l_number + 1.      ls_upload
-number = l_number.      
APPEND ls_upload TO gt_upload.      
CLEAR ls_upload.    
ENDAT.  
ENDLOOP.

* 上传数据不存在  
IF gt_upload IS INITIAL.    
MESSAGE TEXT-m04 TYPE 'S' DISPLAY LIKE 'E'.    
LEAVE LIST-PROCESSING.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_CHECK_DATA
*&---------------------------------------------------------------------*
*&      检查数据
*&---------------------------------------------------------------------*
FORM sub_check_data .  

DATA: ls_upload TYPE ty_upload,  "上传数据        ls_alv    
TYPE ty_alv.     "预览画面数据  

LOOP AT gt_upload INTO ls_upload.    
CLEAR ls_alv.
*   检查前的保存处理    
PERFORM sub_save_data USING    ls_upload                          
CHANGING ls_alv.
*   凭证日期    
PERFORM sub_check_bedat USING    ls_upload-bedat                            
CHANGING ls_alv.
*   采购订单类型    
PERFORM sub_check_bsart USING    ls_upload-bsart                            
CHANGING ls_alv.
*   供应商编码    
PERFORM sub_check_lifnr USING    ls_upload-lifnr                            
CHANGING ls_alv.
*   货币    
PERFORM sub_check_waers USING    ls_upload-waers                            
CHANGING ls_alv.
*   公司代码    
PERFORM sub_check_bukrs USING    ls_upload-bukrs                            
CHANGING ls_alv.
*   采购组织    
PERFORM sub_check_ekorg USING    ls_upload-ekorg                            
CHANGING ls_alv.
*   采购组    
PERFORM sub_check_ekgrp USING    ls_upload-ekgrp                            
CHANGING ls_alv.
*   付款条件    
PERFORM sub_check_zterm USING    ls_upload-zterm                            
CHANGING ls_alv.
*   采购订单号    
PERFORM sub_check_ebeln USING    ls_upload-ebeln                            
CHANGING ls_alv.
*   采购订单行项目    
PERFORM sub_check_ebelp USING    ls_upload-ebelp                            
CHANGING ls_alv.
*   工厂    
PERFORM sub_check_werks USING    ls_upload-werks                            
CHANGING ls_alv.
*   物料编码    
PERFORM sub_check_matnr USING    ls_upload-matnr                            
CHANGING ls_alv.
*   数量    
PERFORM sub_check_menge USING    ls_upload-menge                            
CHANGING ls_alv.
*   计量单位    
PERFORM sub_check_meins USING    ls_upload-meins                            
CHANGING ls_alv.
*   单价    
PERFORM sub_check_netwr USING    ls_upload-netwr                            
CHANGING ls_alv.
*   税码    
PERFORM sub_check_mwskz USING    ls_upload-mwskz                            
CHANGING ls_alv.
*   交货日期    
PERFORM sub_check_eindt USING    ls_upload-eindt                            
CHANGING ls_alv.
*   WBS元素
*    PERFORM sub_check_posid USING    ls_upload-posid
*                            CHANGING ls_alv.
*   成本中心    
PERFORM sub_check_kostl USING    ls_upload-kostl                            
CHANGING ls_alv.
*   总账科目    
PERFORM sub_check_sakto USING    ls_upload-sakto                            
CHANGING ls_alv.
*   固定资产编号    
PERFORM sub_check_anln1 USING    ls_upload-anln1                            
CHANGING ls_alv.
*   内部订单
*    PERFORM sub_check_aufnr USING    ls_upload-aufnr
*                            CHANGING ls_alv.    
CHECK ls_alv-remark IS INITIAL.
*
**   取得其他数据    
PERFORM sub_get_zxmbh CHANGING ls_alv.    

APPEND ls_alv TO gt_alv.  

ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_SAVE_DATA
*&---------------------------------------------------------------------*
*       检查前的保存处理
*----------------------------------------------------------------------*
*      -->IS_UPLOAD  上传数据
*      <--ES_ALV     预览画面数据
*----------------------------------------------------------------------*
FORM sub_save_data  USING    is_upload TYPE ty_upload                    
CHANGING es_alv    TYPE ty_alv.  
MOVE-CORRESPONDING is_upload TO es_alv.

*  es_alv-icon    = is_upload-icon.
*  es_alv-remark  = is_upload-remark.
*  es_alv-number  = is_upload-number.
*  es_alv-bedat   = is_upload-filed01.
*  es_alv-bsart   = is_upload-filed02.
*  es_alv-lifnr   = is_upload-filed03.
*  es_alv-waers   = is_upload-filed04.
*  es_alv-bukrs   = is_upload-filed05.
*  es_alv-ekorg   = is_upload-filed06.
*  es_alv-ekgrp   = is_upload-filed07.
*  es_alv-zterm   = is_upload-filed08.
*  es_alv-ebeln   = is_upload-filed09.
**  es_alv-text    = is_upload-filed10.
*  es_alv-ebelp   = is_upload-filed11.
*  es_alv-werks   = is_upload-filed12.
*  es_alv-knttp   = is_upload-filed13.
*  es_alv-matnr   = is_upload-filed14.
*  es_alv-txz01   = is_upload-filed15.
*  es_alv-matkl   = is_upload-filed16.
*  es_alv-menge   = is_upload-filed17.
*  es_alv-meins   = is_upload-filed18.
*  es_alv-netwr   = is_upload-filed19.
*  es_alv-mwskz   = is_upload-filed20.
*  es_alv-eindt   = is_upload-filed21.
**  es_alv-posid   = is_upload-filed22.
*  es_alv-kostl   = is_upload-filed23.
*  es_alv-sakto   = is_upload-filed24.
*  es_alv-anln1   = is_upload-filed25.
**  es_alv-aufnr   = is_upload-filed26.
****  es_alv-zcgfl   = is_upload-filed27.
**  es_alv-ernam   = sy-uname.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_BEDAT
*&---------------------------------------------------------------------*
*       凭证日期
*----------------------------------------------------------------------*
*      -->IV_BEDAT  凭证日期
*      <--ES_ALV    预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_bedat  USING    iv_bedat  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_bedat                                   
TEXT-c04                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 日期检查  
PERFORM sub_check_date USING    es_alv-bedat                                  
TEXT-c04                         
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_INPUT
*&---------------------------------------------------------------------*
*       必输入检查
*----------------------------------------------------------------------*
*      -->IV_FILED 项目ID
*      -->IV_TEXT  项目文本
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_input  USING    iv_filed  TYPE string                               iv_text   
TYPE c                      
CHANGING es_alv    TYPE ty_alv.

* 项目没有输入时  
IF iv_filed IS INITIAL.    es_alv
-icon = icon_led_red.    
MESSAGE e083(meWITH iv_text INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_DATE
*&---------------------------------------------------------------------*
*       日期检查
*----------------------------------------------------------------------*
*      -->IV_FILED 项目ID
*      -->IV_TEXT  项目文本
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_date  USING    iv_filed  TYPE d                              iv_text   
TYPE c                     
CHANGING es_alv    TYPE ty_alv.

* 日期检查  
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'    
EXPORTING      
date                      = iv_filed    
EXCEPTIONS      plausibility_check_failed 
1      
OTHERS                    2.

* 失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e540(keWITH iv_filed INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_BSART
*&---------------------------------------------------------------------*
*       采购订单类型
*----------------------------------------------------------------------*
*      -->IV_BSART 采购订单类型
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_bsart  USING    iv_bsart  TYPE string                      
CHANGING es_alv    TYPE ty_alv.
* 必输入检查  
PERFORM sub_check_input USING    iv_bsart                                   
TEXT-c05                          
CHANGING es_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_LIFNR
*&---------------------------------------------------------------------*
*       供应商编码
*----------------------------------------------------------------------*
*      -->IV_LIFNR 供应商编码
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_lifnr  USING    iv_lifnr  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_lifnr TYPE lfa1-lifnr"供应商编码

* 必输入检查  
PERFORM sub_check_input USING    iv_lifnr                                   
TEXT-c06                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 供应商帐户  
PERFORM sub_input CHANGING es_alv-lifnr.

* 存在检查  
SELECT SINGLE lifnr    
INTO lv_lifnr    
FROM lfa1   
WHERE lifnr = es_alv-lifnr.
* 取得失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e101(06WITH es_alv-lifnr INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_WAERS
*&---------------------------------------------------------------------*
*       货币
*----------------------------------------------------------------------*
*      -->IV_WAERS 货币
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_waers  USING    iv_waers  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_waers TYPE ekko-waers"货币码

* 货币没有输入时  
IF iv_waers IS INITIAL.    es_alv
-waers = gc_con-waers.  
ENDIF.

* 存在检查  
SELECT SINGLE waers    
INTO lv_waers    
FROM tcurc   
WHERE waers = es_alv-waers.  
IF sy-subrc <> 0.
*   取得失败时    es_alv
-icon = icon_led_red.    
MESSAGE e010(meWITH es_alv-waers INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_BUKRS
*&---------------------------------------------------------------------*
*       公司代码
*----------------------------------------------------------------------*
*      -->IV_BUKRS 公司代码
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_bukrs  USING    iv_bukrs  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_bukrs TYPE ekko-bukrs" 公司代码

* 必输入检查  
PERFORM sub_check_input USING    iv_bukrs                                   
TEXT-c08                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 存在检查  
SELECT SINGLE bukrs    
INTO lv_bukrs    
FROM t001   
WHERE bukrs = es_alv-bukrs.  
IF sy-subrc <> 0.
*   取得失败时    es_alv
-icon = icon_led_red.    
MESSAGE e002(meWITH es_alv-bukrs INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_EKORG
*&---------------------------------------------------------------------*
*       采购组织
*----------------------------------------------------------------------*
*      -->IV_EKORG 采购组织
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_ekorg  USING    iv_ekorg  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_ekorg TYPE ekko-ekorg"采购组织

* 必输入检查  
PERFORM sub_check_input USING    iv_ekorg                                   
TEXT-c09                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 存在检查  
SELECT SINGLE ekorg    
INTO lv_ekorg    
FROM t024e   
WHERE ekorg = es_alv-ekorg.

* 取得失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e015(meWITH es_alv-ekorg INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_EKGRP
*&---------------------------------------------------------------------*
*       采购组
*----------------------------------------------------------------------*
*      -->IV_EKGRP 采购组
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_ekgrp  USING    iv_ekgrp  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_ekgrp TYPE ekko-ekgrp"采购组

* 必输入检查  
PERFORM sub_check_input USING    iv_ekgrp                                   
TEXT-c10                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 存在检查  
SELECT SINGLE ekgrp    
INTO lv_ekgrp    
FROM t024   
WHERE ekgrp = es_alv-ekgrp.

* 取得失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e011(meWITH es_alv-ekgrp INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_ZTERM
*&---------------------------------------------------------------------*
*       付款条件
*----------------------------------------------------------------------*
*      -->IV_ZTERM 付款条件
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_zterm  USING    iv_zterm  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_zterm TYPE ekko-zterm"付款条件

* 必输入检查  
PERFORM sub_check_input USING    iv_zterm                                   
TEXT-c11                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 存在检查  
SELECT zterm    
INTO lv_zterm    
FROM t052    
UP TO ROWS   
WHERE zterm = es_alv-zterm.  
ENDSELECT.  
IF sy-subrc <> 0.
*   取得失败时    es_alv
-icon = icon_led_red.    
MESSAGE e398(jkWITH es_alv-zterm INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_EBELN
*&---------------------------------------------------------------------*
*       采购订单号
*----------------------------------------------------------------------*
*      -->IV_EBELN 采购订单号
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_ebeln  USING    iv_ebeln  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_ebeln                                   
TEXT-c12                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_EBELP
*&---------------------------------------------------------------------*
*       采购订单行项目
*----------------------------------------------------------------------*
*      -->IV_EBELP 采购订单号
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_ebelp  USING    iv_ebelp  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_ebelp                                   
TEXT-c13                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_WERKS
*&---------------------------------------------------------------------*
*       工厂
*----------------------------------------------------------------------*
*      -->IV_WERKS 工厂
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_werks  USING    iv_werks  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_werks TYPE ekpo-werks"工厂

* 必输入检查  
PERFORM sub_check_input USING    iv_werks                                   
TEXT-c14                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 存在检查  
SELECT SINGLE werks    
FROM t001w    
INTO lv_werks   
WHERE werks = es_alv-werks.

* 取得失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e003(meWITH es_alv-werks INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.

* 工厂的权限检查  
AUTHORITY-CHECK OBJECT 'M_BANF_WRK'                      
ID 'ACTVT' FIELD '01'                      
ID 'WERKS' FIELD es_alv-werks.  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
CONCATENATE TEXT-c14 es_alv-werks TEXT-c14 INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_MATNR
*&---------------------------------------------------------------------*
*       物料编码
*----------------------------------------------------------------------*
*      -->IV_MATNR 物料编码
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_matnr  USING    iv_matnr  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 局部变量定义  
DATA: lv_matnr TYPE ekpo-matnr"物料编码

** 必输入检查
*  PERFORM sub_check_input USING    iv_matnr
*                                   TEXT-c16
*                          CHANGING es_alv.
*  
CHECK iv_matnr IS NOT INITIAL.

* 存在检查  
SELECT SINGLE matnr matkl    
FROM mara    
INTO (lv_matnr, es_alv-matkl)   
WHERE matnr = es_alv-matnr.

** 取得失败时
*  IF sy-subrc <> 0.
*    es_alv-icon = icon_led_red.
*    MESSAGE e706(12) WITH es_alv-matnr INTO es_alv-remark.
*    APPEND es_alv TO gt_alv.
*  ENDIF.

* 物料描述的取得  
SELECT SINGLE maktx    
FROM makt    
INTO es_alv-txz01   
WHERE matnr = es_alv-matnr     
AND spras = sy-langu.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_MENGE
*&---------------------------------------------------------------------*
*       数量
*----------------------------------------------------------------------*
*      -->IV_MENGE 数量
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_menge  USING    iv_menge  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_menge                                   
TEXT-c19                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 数值检查  
PERFORM sub_check_number USING    iv_menge                                    
TEXT-c19                           
CHANGING es_alv-menge                                    es_alv
.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_NUMBER
*&---------------------------------------------------------------------*
*       数值检查
*----------------------------------------------------------------------*
*      -->IS_FILED  项目ID
*      -->IV_TEXT   项目文本
*      <--ES_FILED  项目ID
*      <--ES_ALV    预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_number  USING   iv_filed  TYPE string                               iv_text   
TYPE c                      
CHANGING ev_filed  TYPE any                               es_alv    
TYPE ty_alv.  

DATA: lv_filed(30TYPE c.
* 数值检查  
CALL FUNCTION 'CATS_NUMERIC_INPUT_CHECK'    
EXPORTING      
input      = iv_filed      internal   
= abap_on    
IMPORTING      
output     = lv_filed    
EXCEPTIONS      no_numeric 
1      
OTHERS     2.

* 失败时  
IF sy-subrc <> 0.    es_alv
-icon = icon_led_red.    
MESSAGE e326(ckWITH ev_filed INTO es_alv-remark.    
APPEND es_alv TO gt_alv.  
ELSE.    ev_filed 
= lv_filed.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_MEINS
*&---------------------------------------------------------------------*
*       计量单位
*----------------------------------------------------------------------*
*      -->IV_MEINS 计量单位
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_meins  USING    iv_meins  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_meins                                   
TEXT-c20                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_NETWR
*&---------------------------------------------------------------------*
*       单价
*----------------------------------------------------------------------*
*      -->IV_MENGE 单价
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_netwr  USING    iv_menge  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_menge                                   
TEXT-c21                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 数值检查  
PERFORM sub_check_number USING    iv_menge                                    
TEXT-c21                           
CHANGING es_alv-netwr                                    es_alv
.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_MWSKZ
*&---------------------------------------------------------------------*
*       税码
*----------------------------------------------------------------------*
*      -->IV_MWSKZ 税码
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_mwskz  USING    iv_mwskz  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_mwskz                                   
TEXT-c22                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_EINDT
*&---------------------------------------------------------------------*
*       交货日期
*----------------------------------------------------------------------*
*      -->IV_EINDT  凭证日期
*      <--ES_ALV    预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_eindt  USING    iv_eindt  TYPE string                      
CHANGING es_alv    TYPE ty_alv.

* 必输入检查  
PERFORM sub_check_input USING    iv_eindt                                   
TEXT-c23                          
CHANGING es_alv.  

CHECK es_alv-remark IS INITIAL.

* 日期检查  
PERFORM sub_check_date USING    es_alv-eindt                                  
TEXT-c23                         
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_POSID
*&---------------------------------------------------------------------*
*       WBS元素
*----------------------------------------------------------------------*
*      -->IV_POSID WBS元素
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_posid  USING    iv_posid  TYPE string                      
CHANGING es_alv    TYPE ty_alv.  

CHECK es_alv-knttp = gc_knttp-p.

* 必输入检查  
PERFORM sub_check_input USING    iv_posid                                   
TEXT-c24                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_KOSTL
*&---------------------------------------------------------------------*
*       成本中心
*----------------------------------------------------------------------*
*      -->IV_KOSTL 成本中心
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_kostl  USING    iv_kostl  TYPE string                      
CHANGING es_alv    TYPE ty_alv.  

CHECK es_alv-knttp = gc_knttp-k.

* 必输入检查  
PERFORM sub_check_input USING    iv_kostl                                   
TEXT-c25                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_SAKTO
*&---------------------------------------------------------------------*
*       总账科目
*----------------------------------------------------------------------*
*      -->IV_KOSTL 总账科目
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_sakto  USING    iv_sakto  TYPE string                      
CHANGING es_alv    TYPE ty_alv.  

IF es_alv-matnr IS INITIAL.
*   必输入检查    
PERFORM sub_check_input USING    iv_sakto                                     
TEXT-c26                            
CHANGING es_alv.  
ELSE.
*    IF es_alv-posid+0(2) = 'YF'
*    OR es_alv-posid+0(2) = 'YSA'.
**     总账科目替代
*      PERFORM sub_replace_sakto CHANGING es_alv.
*    ENDIF.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_ANLN1
*&---------------------------------------------------------------------*
*       固定资产编号
*----------------------------------------------------------------------*
*      -->IV_KOSTL 固定资产编号
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_anln1  USING    iv_anln1  TYPE string                      
CHANGING es_alv    TYPE ty_alv.  

CHECK es_alv-knttp = gc_knttp-a.

* 必输入检查  
PERFORM sub_check_input USING    iv_anln1                                   
TEXT-c27                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_AUFNR
*&---------------------------------------------------------------------*
*       内部订单
*----------------------------------------------------------------------*
*      -->IV_AUFNR 内部订单
*      <--ES_ALV   预览画面数据
*----------------------------------------------------------------------*
FORM sub_check_aufnr  USING    iv_aufnr  TYPE string                      
CHANGING es_alv    TYPE ty_alv.  

CHECK es_alv-knttp = gc_knttp-s.

* 必输入检查  
PERFORM sub_check_input USING    iv_aufnr                                   
TEXT-c28                          
CHANGING es_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      alv显示
*&---------------------------------------------------------------------*
FORM sub_display_data .

* 设置ALV出力字段  
PERFORM sub_set_fieldcat.

* 设置ALV布局  
PERFORM sub_set_layout.

* ALV排序设置  
PERFORM sub_alv_set_sort.

* ALV出力  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    
EXPORTING      i_callback_program       
= sy-repid      i_callback_pf_status_set 
'SUB_SET_PF_STATUS'      i_callback_user_command  
'SUB_USER_COMMAND'      is_layout                
= gs_layout      it_fieldcat              
= gt_fieldcat      it_sort                  
= gt_sort    
TABLES      t_outtab                 
= gt_alv    
EXCEPTIONS      program_error            
1      
OTHERS                   2.

* 失败时  
IF sy-subrc <> 0.
*   输出消息    
MESSAGE TEXT-m03 TYPE 'S' DISPLAY LIKE 'E'.    
LEAVE LIST-PROCESSING.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_SET_FIELDCAT
*&---------------------------------------------------------------------*
*&      设置ALV出力字段
*&---------------------------------------------------------------------*
FORM sub_set_fieldcat .  mcr_set_fieldcat 

'GT_ALV' 'ICON'    TEXT-c01 01.  mcr_set_fieldcat 
'GT_ALV' 'REMARK'  TEXT-c02 02.  mcr_set_fieldcat 
'GT_ALV' 'NUMBER'  TEXT-c03 03.  mcr_set_fieldcat 
'GT_ALV' 'BEDAT'   TEXT-c04 04.  mcr_set_fieldcat 
'GT_ALV' 'BSART'   TEXT-c05 05.  mcr_set_fieldcat 
'GT_ALV' 'LIFNR'   TEXT-c06 06.  mcr_set_fieldcat 
'GT_ALV' 'WAERS'   TEXT-c07 07.  mcr_set_fieldcat 
'GT_ALV' 'BUKRS'   TEXT-c08 08.  mcr_set_fieldcat 
'GT_ALV' 'EKORG'   TEXT-c09 09.  mcr_set_fieldcat 
'GT_ALV' 'EKGRP'   TEXT-c10 10.  mcr_set_fieldcat 
'GT_ALV' 'ZTERM'   TEXT-c11 11.  mcr_set_fieldcat 
'GT_ALV' 'EBELN'   TEXT-c12 12.  mcr_set_fieldcat 
'GT_ALV' 'EBELP'   TEXT-c13 14.  mcr_set_fieldcat 
'GT_ALV' 'WERKS'   TEXT-c14 15.  mcr_set_fieldcat 
'GT_ALV' 'KNTTP'   TEXT-c15 16.  mcr_set_fieldcat 
'GT_ALV' 'MATNR'   TEXT-c16 17.  mcr_set_fieldcat 
'GT_ALV' 'TXZ01'   TEXT-c17 18.  mcr_set_fieldcat 
'GT_ALV' 'MATKL'   TEXT-c18 19.  mcr_set_fieldcat 
'GT_ALV' 'MENGE'   TEXT-c19 20.  mcr_set_fieldcat 
'GT_ALV' 'MEINS'   TEXT-c20 22.  mcr_set_fieldcat 
'GT_ALV' 'NETWR'   TEXT-c21 23.  mcr_set_fieldcat 
'GT_ALV' 'PEINH'   TEXT-c33 23.  mcr_set_fieldcat 
'GT_ALV' 'BPRME'   TEXT-c34 23.  mcr_set_fieldcat 
'GT_ALV' 'MWSKZ'   TEXT-c22 24.  mcr_set_fieldcat 
'GT_ALV' 'EINDT'   TEXT-c23 25.  mcr_set_fieldcat 
'GT_ALV' 'LGORT'   TEXT-c35 25.  " 库存地点  mcr_set_fieldcat 
'GT_ALV' 'UEBTK'   TEXT-c36 25.  " 允许未限制的过量交货  mcr_set_fieldcat 
'GT_ALV' 'RETPO'   TEXT-c53 25.  " 退货标识  mcr_set_fieldcat 
'GT_ALV' 'EINDT'   TEXT-c23 25.  mcr_set_fieldcat 
'GT_ALV' 'KOSTL'   TEXT-c25 27.  mcr_set_fieldcat 
'GT_ALV' 'ANLN1'   TEXT-c27 29.  mcr_set_fieldcat 
'GT_ALV' 'SAKTO'   TEXT-c26 28.  mcr_set_fieldcat 
'GT_ALV' 'ZCGPP'   TEXT-c37 28.  " 采购品牌  mcr_set_fieldcat 
'GT_ALV' 'KSCHL1'  TEXT-c38 28.  " 条件类型1  mcr_set_fieldcat 
'GT_ALV' 'KBETR1'  TEXT-c39 28.  " 条件金额1  mcr_set_fieldcat 
'GT_ALV' 'KPEIN1'  TEXT-c40 28.  " 条件定价单位1  mcr_set_fieldcat 
'GT_ALV' 'KSCHL2'  TEXT-c41 28.  " 条件类型2  mcr_set_fieldcat 
'GT_ALV' 'KBETR2'  TEXT-c42 28.  " 条件金额2  mcr_set_fieldcat 
'GT_ALV' 'KPEIN2'  TEXT-c43 28.  " 条件定价单位2  mcr_set_fieldcat 
'GT_ALV' 'KSCHL3'  TEXT-c44 28.  " 条件类型3  mcr_set_fieldcat 
'GT_ALV' 'KBETR3'  TEXT-c45 28.  " 条件金额3  mcr_set_fieldcat 
'GT_ALV' 'KPEIN3'  TEXT-c46 28.  " 条件定价单位3  mcr_set_fieldcat 
'GT_ALV' 'KSCHL4'  TEXT-c47 28.  " 条件类型4  mcr_set_fieldcat 
'GT_ALV' 'KBETR4'  TEXT-c48 28.  " 条件金额4  mcr_set_fieldcat 
'GT_ALV' 'KPEIN4'  TEXT-c49 28.  " 条件定价单位4  mcr_set_fieldcat 
'GT_ALV' 'KSCHL5'  TEXT-c50 28.  " 条件类型5  mcr_set_fieldcat 
'GT_ALV' 'KBETR5'  TEXT-c51 28.  " 条件金额5  mcr_set_fieldcat 
'GT_ALV' 'KPEIN5'  TEXT-c52 28.  " 条件定价单位5
*  mcr_set_fieldcat 'GT_ALV' 'AUFNR'  TEXT-c28 30.
*  mcr_set_fieldcat 'GT_ALV' 'ERNAM'  TEXT-c29 31.
*  mcr_set_fieldcat 'GT_ALV' 'ZXMBH'  TEXT-c30 32.
*  mcr_set_fieldcat 'GT_ALV' 'ZKHBM'  TEXT-c31 33.
*  mcr_set_fieldcat 'GT_ALV' 'POSID'  TEXT-c24 26.
*  mcr_set_fieldcat 'GT_ALV' 'TEXT'   TEXT-c32 13.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_SET_LAYOUT
*&---------------------------------------------------------------------*
*&      设置ALV布局
*&---------------------------------------------------------------------*
FORM sub_set_layout .  gs_layout

-zebra = abap_on.  gs_layout
-colwidth_optimize = abap_on.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_SET_SORT
*&---------------------------------------------------------------------*
*       ALV排序设置
*----------------------------------------------------------------------*
*      -->ET_SORT  排序数据
*----------------------------------------------------------------------*
FORM sub_alv_set_sort .  

DATA:ls_sort TYPE slis_sortinfo_alv.  

CLEAR ls_sort.  ls_sort
-spos 3.  ls_sort
-fieldname 'NUMBER'.             "字段名称  ls_sort
-up = abap_on.                     "升序排列  
APPEND ls_sort TO gt_sort.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
*&      设置菜单栏
*&---------------------------------------------------------------------*
*      -->IT_EXTAB 按钮
*----------------------------------------------------------------------*
FORM sub_set_pf_status USING it_extab TYPE slis_t_extab.  
"copy 程序SAPLKKBL的GUI状态STANDARD_FULLSCREEN  
SET PF-STATUS 'STANDARD_ALV1'.
* 标题栏
*  SET TITLEBAR 'T01'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      FORM  SUB_USER_COMMAND
*&---------------------------------------------------------------------*
*&      按钮事件
*&---------------------------------------------------------------------*
*&      -->IV_UCOMM    按钮
*&      -->IS_SELFIELD 状态
*----------------------------------------------------------------------*
FORM sub_user_command USING iv_ucomm    TYPE sy-ucomm                            is_selfield 
TYPE slis_selfield.

* 点击确认导入按钮  
IF iv_ucomm 'IMPORT'.
*   导入前检查    
PERFORM sub_check_imp.
*   导入执行    
PERFORM sub_import_data.

*   ALV出力    
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'      
EXPORTING        i_callback_program       
= sy-repid        i_callback_pf_status_set 
'SUB_SET_PF_STATUS2'        is_layout                
= gs_layout        it_fieldcat              
= gt_fieldcat        it_sort                  
= gt_sort      
TABLES        t_outtab                 
= gt_alv2      
EXCEPTIONS        program_error            
1        
OTHERS                   2.

*   失败时    
IF sy-subrc <> 0.
*     输出消息      
MESSAGE TEXT-m03 TYPE 'S' DISPLAY LIKE 'E'.      
LEAVE LIST-PROCESSING.    
ENDIF.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_CHECK_IMP
*&---------------------------------------------------------------------*
*&      导入前检查
*&---------------------------------------------------------------------*
FORM sub_check_imp.  

READ TABLE gt_alv TRANSPORTING NO FIELDS       
WITH KEY icon = icon_led_red.

* 读取成功  
IF sy-subrc 0.    
MESSAGE '导入数据有错误,请确认' TYPE 'E'.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_IMPORT_DATA
*&---------------------------------------------------------------------*
*&      数据导入处理
*&---------------------------------------------------------------------*
FORM sub_import_data.  
DEFINE lm_append_cond.    
IF &1 IS NOT INITIAL.      
CLEAR ls_cond.      ls_cond
-itm_number   = ls_alv-ebelp.      ls_cond
-cond_type    = &1.      ls_cond
-cond_value   = &2.      ls_cond
-cond_p_unt   = &3.      ls_cond
-currency     = ls_alv-waers.      ls_cond
-change_id    'I'.      
APPEND ls_cond TO lt_cond.      
CLEAR ls_condx.      ls_condx
-itm_number  = ls_alv-ebelp.      ls_condx
-itm_numberx = abap_on.      ls_condx
-cond_type   = abap_on.      ls_condx
-cond_value  = abap_on.      ls_condx
-cond_p_unt  = abap_on.      ls_condx
-currency    = abap_on.      ls_condx
-change_id   = abap_on.      
APPEND ls_condx TO lt_condx.    
ENDIF.  
END-OF-DEFINITION.  

DATA: ls_alv        TYPE ty_alv,        ls_alv_tmp    
TYPE ty_alv,        ls_alv_tmp2   
TYPE ty_alv,        ls_header     
TYPE bapimepoheader,        ls_headerx    
TYPE bapimepoheaderx,        lt_return     
TYPE TABLE OF bapiret2,        ls_return     
TYPE bapiret2,        lt_item       
TYPE TABLE OF bapimepoitem,        ls_item       
TYPE bapimepoitem,        lt_itemx      
TYPE TABLE OF bapimepoitemx,        ls_itemx      
TYPE bapimepoitemx,        lt_eket       
TYPE TABLE OF bapimeposchedule,        ls_eket       
TYPE bapimeposchedule,        lt_eketx      
TYPE TABLE OF bapimeposchedulx,        ls_eketx      
TYPE bapimeposchedulx,        lt_ekkn       
TYPE TABLE OF bapimepoaccount,        ls_ekkn       
TYPE bapimepoaccount,        lt_ekknx      
TYPE TABLE OF bapimepoaccountx,        ls_ekknx      
TYPE bapimepoaccountx,        lt_cond       
TYPE TABLE OF bapimepocond,        ls_cond       
TYPE bapimepocond,        lt_condx      
TYPE TABLE OF bapimepocondx,        ls_condx      
TYPE bapimepocondx,        ls_header_o   
TYPE bapimepoheader,        lv_ebeln      
TYPE ekko-ebeln,        lv_ebeln_o    
TYPE ekko-ebeln,        lt_alv        
TYPE TABLE OF ty_alv,        lv_index      
TYPE i,        ls_ekpo       
TYPE ekpo,        ls_textheader 
TYPE bapimepotextheader,        lt_textheader 
TYPE STANDARD TABLE OF bapimepotextheader.  

DATA: ls_extensionin  TYPE bapiparex,        ls_te_mepoitem  
TYPE bapi_te_mepoitem,        ls_te_mepoitemx 
TYPE bapi_te_mepoitemx.  

DATA: lt_extensionin LIKE TABLE OF ls_extensionin.  

DATA: lv_te_value(960TYPE c.  

SORT gt_alv BY ebeln ASCENDING.  

LOOP AT gt_alv INTO ls_alv_tmp.    ls_alv 

= ls_alv_tmp.    

AT NEW ebeln.      
"--释放资源      
CLEAR: ls_header,             ls_headerx
,             lt_return
,             lt_item
,             lt_itemx
,             lt_ekkn
,             lt_ekknx
,             lt_alv
,             ls_textheader
,             lt_textheader
,             lt_extensionin
.

*     添加抬头信息      ls_header
-po_number  = ls_alv-ebeln" 采购凭证号      ls_header
-doc_date   = ls_alv-bedat" 采购凭证日期      ls_header
-doc_type   = ls_alv-bsart" 采购凭证类型      ls_header
-vendor     = ls_alv-lifnr" 供应商账户号      ls_header
-currency   = ls_alv-waers" 货币      ls_header
-comp_code  = ls_alv-bukrs" 公司代码      ls_header
-purch_org  = ls_alv-ekorg" 采购组织      ls_header
-pur_group  = ls_alv-ekgrp" 采购组
*      ls_header-created_by = ls_alv-ernam. " 创建人      ls_header
-pmnttrms   = ls_alv-zterm" 付款条件

*     供应商帐户      
PERFORM sub_input CHANGING ls_header-vendor.      

CLEAR ls_headerx.      ls_headerx
-po_number  = abap_on" 采购凭证号      ls_headerx
-item_intvl = abap_on" 这个标记打X才能修改行号      ls_headerx
-doc_date   = abap_on" 采购凭证日期      ls_headerx
-doc_type   = abap_on" 采购凭证类型      ls_headerx
-comp_code  = abap_on" 公司代码      ls_headerx
-purch_org  = abap_on" 采购组织      ls_headerx
-pur_group  = abap_on" 采购组      ls_headerx
-vendor     = abap_on" 供应商账户号
*      ls_headerx-created_by = abap_on. " 创建对象的创建人      ls_headerx
-currency   = abap_on" 货币码      ls_headerx
-pmnttrms   = abap_on" 付款条件      

IF rb_nei 'X'.        
CLEAR: ls_header-po_number,               ls_headerx
-po_number.      
ENDIF.

*      ls_textheader-po_number = ls_header-po_number.
*      ls_textheader-text_id   = 'F02'.
*      ls_textheader-text_form = '*'.
**      ls_textheader-text_line = ls_alv-text.
*      APPEND ls_textheader TO lt_textheader.    
ENDAT.

*   数据保存    
APPEND ls_alv TO lt_alv.

*   添加行项目信息    
CLEAR ls_item.    ls_item
-po_item        = ls_alv-ebelp.   " 采购凭证的项目编号    ls_item
-plant          = ls_alv-werks.   " 工厂    ls_item
-acctasscat     = ls_alv-knttp.   " 科目分配类别    ls_item
-short_text     = ls_alv-txz01.   " 短文本    
IF ls_alv-matnr IS NOT INITIAL.      
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'        
EXPORTING          
input        = ls_alv-matnr        
IMPORTING          
output       = ls_item-material_long        
EXCEPTIONS          length_error 
1          
OTHERS       2.      
IF sy-subrc <> 0.
*       Implement suitable error handling here      
ENDIF.    

ENDIF.    ls_item
-matl_group     = ls_alv-matkl" 物料组    ls_item
-quantity       = ls_alv-menge" 采购订单数量    ls_item
-tax_code       = ls_alv-mwskz" 销售税代码    ls_item
-net_price      = ls_alv-netwr" BAPIs 的货币金额(带有 9 个小数位)--净价    ls_item
-price_unit     = ls_alv-peinh" 价格单位
*    ls_item-orderpr_un     = ls_alv-bprme. " 订单价格单位(采购)    ls_item
-po_price       '1'.          " 价格采纳:1 = 总值, 2 = 净值    ls_item
-stge_loc       = ls_alv-lgort" 库存地点    ls_item
-unlimited_dlv  = ls_alv-uebtk" 标识:允许未限制的过量交货    
IF ls_alv-retpo IS NOT INITIAL.      ls_item
-ret_item = ls_alv-retpo.    
ENDIF.    
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'      
EXPORTING        
input          = ls_alv-meins        
language       = sy-langu      
IMPORTING        
output         = ls_item-po_unit      
EXCEPTIONS        unit_not_found 
1        
OTHERS         2.    
IF sy-subrc <> 0.
*     Implement suitable error handling here    
ENDIF.    

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'      
EXPORTING        
input          = ls_alv-bprme        
language       = sy-langu      
IMPORTING        
output         = ls_item-orderpr_un  " 订单价格单位(采购)      
EXCEPTIONS        unit_not_found 
1        
OTHERS         2.    
IF sy-subrc <> 0.
*     Implement suitable error handling here    
ENDIF.    

APPEND ls_item TO lt_item.    

"--POITEMX 中的字段    
CLEAR ls_itemx.    ls_itemx
-po_item        = ls_alv-ebelp.    ls_itemx
-po_itemx       = abap_on.    ls_itemx
-item_cat       = abap_on.    ls_itemx
-acctasscat     = abap_on.    
IF ls_item-short_text IS NOT INITIAL.      ls_itemx
-short_text   = abap_on.    
ENDIF.    
IF ls_alv-matnr IS NOT INITIAL.      ls_itemx
-material_long  = abap_on.    
ENDIF.    ls_itemx
-plant          = abap_on.    
IF ls_alv-matkl IS NOT INITIAL.      ls_itemx
-matl_group   = abap_on.    
ENDIF.    ls_itemx
-po_unit      = abap_on.    ls_itemx
-quantity     = abap_on.    ls_itemx
-tax_code     = abap_on.    ls_itemx
-net_price    = abap_on.    ls_itemx
-po_price     = abap_on.    ls_itemx
-price_unit   = abap_on" 价格单位    ls_itemx
-orderpr_un   = abap_on" 订单价格单位(采购)    
IF ls_alv-retpo IS NOT INITIAL.      ls_itemx
-ret_item 'X'.    
ENDIF.    ls_itemx
-stge_loc 'X'.    ls_itemx
-unlimited_dlv 'X'.    
APPEND ls_itemx TO lt_itemx.    

"--POSCHEDULE中的字段    
CLEAR ls_eket.    ls_eket
-po_item       = ls_alv-ebelp.   " 主键    ls_eket
-delivery_date = ls_alv-eindt.   " 项目交货日期    
APPEND ls_eket TO lt_eket.    

"--POSCHEDULEX中的字段    
CLEAR ls_eketx.    ls_eketx
-po_item       = ls_alv-ebelp.    ls_eketx
-delivery_date = abap_on.    
APPEND ls_eketx TO lt_eketx.    

"--POACCOUNT中的字段------------------------------------begin    
"--POACCOUNT中的字段    
CLEAR ls_ekkn.    
IF ls_alv-kostl IS NOT INITIAL.      ls_ekkn
-costcenter  = ls_alv-kostl.      " 成本中心    
ENDIF.    
IF ls_alv-sakto IS NOT INITIAL.      ls_ekkn
-gl_account  = ls_alv-sakto.    
ENDIF.    
IF ls_alv-anln1 IS NOT INITIAL.      ls_ekkn
-asset_no    = ls_alv-anln1.    
ENDIF.    

"--WBS
*    IF ls_alv-posid IS NOT INITIAL.
*      ls_ekkn-wbs_element   = ls_alv-posid.
*    ENDIF.    

"内部订单
*    IF ls_alv-aufnr IS NOT INITIAL.
*      ls_ekkn-orderid = ls_alv-aufnr.
*    ENDIF.    

IF ls_ekkn IS NOT INITIAL.      ls_ekkn
-po_item       = ls_alv-ebelp.      ls_ekkn
-quantity      = ls_item-quantity.      ls_ekkn
-serial_no     '01'.      
APPEND ls_ekkn TO lt_ekkn.    
ENDIF.    

"--POACCOUNTX中的字段    
CLEAR ls_ekknx.    
IF ls_alv-kostl IS NOT INITIAL.      ls_ekknx
-costcenter  = abap_on.    "成本中心    
ENDIF.    
IF ls_alv-sakto IS NOT INITIAL.      ls_ekknx
-gl_account  = abap_on.    "会计科目    
ENDIF.    
IF ls_alv-anln1 IS NOT INITIAL.      ls_ekknx
-asset_no    = abap_on.    "主资产号    
ENDIF.
*    IF ls_alv-posid IS NOT INITIAL.
*      ls_ekknx-wbs_element = abap_on.    "WBS
*    ENDIF.

*    IF ls_alv-aufnr IS NOT INITIAL.
*      ls_ekknx-orderid = abap_on.
*    ENDIF.    

IF ls_ekknx IS NOT INITIAL.      ls_ekknx
-po_item       = ls_alv-ebelp.      ls_ekknx
-serial_no     '01'.      ls_ekknx
-quantity      = abap_on.      
APPEND ls_ekknx TO lt_ekknx.    
ENDIF.    
"--POACCOUNT中的字段------------------------------------end    

" 条件价格    lm_append_cond ls_alv
-kschl1 ls_alv-kbetr1 ls_alv-kpein1.    lm_append_cond ls_alv
-kschl2 ls_alv-kbetr2 ls_alv-kpein2.    lm_append_cond ls_alv
-kschl3 ls_alv-kbetr3 ls_alv-kpein3.    lm_append_cond ls_alv
-kschl4 ls_alv-kbetr4 ls_alv-kpein4.    lm_append_cond ls_alv
-kschl5 ls_alv-kbetr5 ls_alv-kpein5.    

" 扩展字段    ls_te_mepoitem
-po_item = ls_alv-ebelp.    ls_te_mepoitem
-zcgpp   = ls_alv-zcgpp.    lv_te_value 
= ls_te_mepoitem.    ls_extensionin
-structure 'BAPI_TE_MEPOITEM'.    ls_extensionin
-valuepart1 = lv_te_value(240).    ls_extensionin
-valuepart2 = lv_te_value+240(240).    ls_extensionin
-valuepart3 = lv_te_value+480(240).    ls_extensionin
-valuepart4 = lv_te_value+720(240).    
APPEND ls_extensionin TO lt_extensionin.    ls_te_mepoitemx

-po_item = ls_alv-ebelp.    ls_te_mepoitemx
-zcgpp   'X'.    lv_te_value 
= ls_te_mepoitemx.    ls_extensionin
-structure 'BAPI_TE_MEPOITEMX'.    ls_extensionin
-valuepart1 = lv_te_value(240).    ls_extensionin
-valuepart2 = lv_te_value+240(240).    ls_extensionin
-valuepart3 = lv_te_value+480(240).    ls_extensionin
-valuepart4 = lv_te_value+720(240).    
APPEND ls_extensionin TO lt_extensionin.    

"---------------------------------------------------    
"创建PO    
"---------------------------------------------------    
AT END OF ebeln.      

CLEAR:ls_header_o, lv_ebeln.      lv_ebeln_o 
= ls_alv-ebeln.      

CALL FUNCTION 'BAPI_PO_CREATE1'        
EXPORTING          poheader         
= ls_header          poheaderx        
= ls_headerx        
IMPORTING          exppurchaseorder 
= lv_ebeln          expheader        
= ls_header_o        
TABLES          
return           = lt_return          poitem           
= lt_item          poitemx          
= lt_itemx          poschedule       
= lt_eket          poschedulex      
= lt_eketx          poaccount        
= lt_ekkn          poaccountx       
= lt_ekknx          pocond           
= lt_cond          pocondx          
= lt_condx          extensionin      
= lt_extensionin.      

CLEAR lv_index.      
LOOP AT lt_alv INTO ls_alv_tmp2.        lv_index 
= lv_index + 1.
*       成功的时候        
IF lv_ebeln IS NOT INITIAL.          ls_alv_tmp2
-icon   = icon_led_green.          
CONCATENATE TEXT-c12 lv_ebeln '被正确的创建' INTO ls_alv_tmp2-remark.          ls_alv_tmp2
-ebeln = lv_ebeln.          
APPEND ls_alv_tmp2 TO gt_alv2.        

ELSE.
*         错误消息          
LOOP AT lt_return INTO ls_return                            
WHERE type 'E' OR type 'A' )                              
AND row = lv_index.            ls_alv_tmp2
-icon   = icon_led_red.            ls_alv_tmp2
-remark = ls_return-message.            
APPEND ls_alv_tmp2 TO gt_alv2.          
ENDLOOP.          

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.        

ENDIF.      
ENDLOOP.    
ENDAT.  

ENDLOOP.  

READ TABLE gt_alv2 TRANSPORTING NO FIELDS       
WITH KEY icon   = icon_led_red.  

IF sy-subrc <> 0.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait = abap_on.

*    LOOP AT gt_alv2 INTO ls_alv.
***      SELECT SINGLE *
***        FROM ekpo
***        INTO ls_ekpo
***        WHERE ebeln = ls_alv-ebeln
***        AND ebelp = ls_alv-ebelp.
*     项目编号
***      IF ls_alv-zxmbh IS NOT INITIAL.
***        ls_ekpo-zxmbh = ls_alv-zxmbh.
***      ENDIF.

*     客户编码
***      IF ls_alv-zkhbm IS NOT INITIAL.
***        ls_ekpo-zkhbm = ls_alv-zkhbm.
***      ENDIF.

*     采购分类
***      IF ls_alv-zcgfl IS NOT INITIAL.
***        ls_ekpo-zcgfl = ls_alv-zcgfl.
***      ENDIF.

***      UPDATE ekpo SET zxmbh = ls_ekpo-zxmbh
***                      zkhbm = ls_ekpo-zkhbm
***                      zcgfl = ls_ekpo-zcgfl
***                WHERE ebeln = ls_alv-ebeln
***                  AND ebelp = ls_alv-ebelp.
***
***      IF sy-subrc = 0.
***        COMMIT WORK AND WAIT.
***      ENDIF.
*    ENDLOOP.  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_INPUT
*&---------------------------------------------------------------------*
*&      内外部转换
*&---------------------------------------------------------------------*
*&      <-- EV_FILED 项目ID
*&---------------------------------------------------------------------*
FORM sub_input  CHANGING ev_filed TYPE any.

* ALPHA转换  
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'    
EXPORTING      
input  = ev_filed    
IMPORTING      
output = ev_filed.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form SUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
*&      设置菜单栏
*&---------------------------------------------------------------------*
*      -->IT_EXTAB 按钮
*----------------------------------------------------------------------*
FORM sub_set_pf_status2 USING it_extab TYPE slis_t_extab.  

DATA: ls_extab TYPE slis_extab.  
"copy 程序SAPLKKBL的GUI状态STANDARD_FULLSCREEN  ls_extab
-fcode 'IMPORT'.  
APPEND ls_extab TO it_extab.  
SET PF-STATUS 'STANDARD_ALV1' EXCLUDING it_extab.
* 标题栏  
SET TITLEBAR 'T02'.
ENDFORM.
*&---------------------------------------------------------------------*
*&     Form SUB_REPLACE_SAKTO
*&---------------------------------------------------------------------*
*&     总账科目替代
*&---------------------------------------------------------------------*
*      <--ES_ALV   预览画面数据
*&---------------------------------------------------------------------*
FORM sub_replace_sakto  CHANGING es_alv    TYPE ty_alv.

***  SELECT SINGLE hkont
***           INTO es_alv-sakto
***           FROM ztfi_kmtd
***          WHERE zcoobject = 'WBS'
***            AND zlx       = 'YF'.

ENDFORM.
*&---------------------------------------------------------------------*
*&     Form SUB_GET_ZXMBH
*&---------------------------------------------------------------------*
*&     取得其他数据
*&---------------------------------------------------------------------*
*&      <-- ES_ALV   预览画面数据
*&---------------------------------------------------------------------*
FORM sub_get_zxmbh  CHANGING es_alv    TYPE ty_alv.

***  SELECT b~pspid
***    FROM prps AS a
***   INNER JOIN proj AS b
***      ON a~psphi = b~pspnr
***    INTO es_alv-zxmbh
***    UP TO 1 ROWS
***   WHERE a~posid = es_alv-posid.
***  ENDSELECT.
**
***  IF sy-subrc = 0.
***    SELECT kunnr
***      FROM prps
***      INTO es_alv-zkhbm
***      UP TO 1 ROWS
***     WHERE posid = es_alv-zxmbh.
***    ENDSELECT.
***  ENDIF.
ENDFORM.

 

 

posted @ 2021-12-17 11:25  東東東東  阅读(141)  评论(0编辑  收藏  举报