PT项目-采购订单批量导入
*-----------------------------------------------------------------------*
* 程序名称:ZMMEXEC0030
* 程序标题:采购订单批量导入
* 程序类型:功能报表
* 创建人 :www
* 创建日期:2013-11-20
* 模块 :
* 事务码 :ZMM003
* 请求号 :
* 功能描述:
* 相关文档:
*----------------------------------------------------------------------*
* 修改记录:
* 作者 日期 请求号 修改原因描述
*----------- -------- -----------------------------------------------*
*
*----------------------------------------------------------------------*
REPORT zmmexec0030NO STANDARD PAGE HEADINGMESSAGE-ID zcomm.*----------------------------------------------------------------------*
* INCLUDE *
*----------------------------------------------------------------------*
INCLUDE zslis.
INCLUDE zfile.*----------------------------------------------------------------------*
* 声明数据表;
*----------------------------------------------------------------------**----------------------------------------------------------------------*
* 定义结构;
*----------------------------------------------------------------------*
TYPES: BEGIN OF gts_alv_data,ztype TYPE char1, " 类型 H-抬头 I-明细bsart TYPE ekko-bsart,verkf TYPE ekko-verkf,ihrez TYPE ekko-ihrez, " 项目号unsez TYPE ekko-unsez, "事业部项目号 新加 20140625lifnr TYPE ekko-lifnr,ekorg TYPE ekko-ekorg,ekgrp TYPE ekko-ekgrp,bukrs TYPE ekko-bukrs,zterm TYPE ekko-zterm,inco1 TYPE ekko-inco1,inco2 TYPE ekko-inco2,ebelp TYPE char5,knttp TYPE ekpo-knttp,pstyp TYPE ekpo-pstyp,matnr TYPE ekpo-matnr,menge TYPE char25,meins TYPE ekpo-meins,eindt TYPE ekpo-agdat,netpr TYPE char25,peinh TYPE char5,mwskz TYPE ekpo-mwskz,waers TYPE ekko-waers,navnw TYPE char25, " 折扣金额navnw2 TYPE char25, " 净价折扣%matkl TYPE ekpo-matkl,werks TYPE ekpo-werks,lgort TYPE ekpo-lgort,insmk TYPE ekpo-insmk,charg TYPE charg_d,retpo TYPE ekpo-retpo,hkont TYPE hkont,vbeln TYPE vbap-vbeln,posnr TYPE char6,aufnr TYPE aufk-aufnr,kostl TYPE kostl,banfn TYPE ekpo-banfn,bnfpo TYPE char5,ebeln TYPE ekko-ebeln,ebeln_o TYPE c LENGTH 50,"added by yangk 20151224ebeln_p TYPE c LENGTH 50,"added by yangk 20151224END OF gts_alv_data.
TYPES: BEGIN OF gts_alv_base,grp TYPE i, " 用于分组id TYPE i,tag TYPE i,sel TYPE char1,light TYPE c,rowcolor TYPE char4,msg TYPE text255,update TYPE char1,END OF gts_alv_base.
TYPES: BEGIN OF gts_alv.
INCLUDE TYPE ty_file_data.
INCLUDE TYPE gts_alv_data.
INCLUDE TYPE gts_alv_base.
TYPES: END OF gts_alv.
TYPES: gtt_alv TYPE TABLE OF gts_alv.*----------------------------------------------------------------------*
* 定义内表;
*----------------------------------------------------------------------*
DATA: gds_alv TYPE gts_alv,gdt_alv TYPE TABLE OF gts_alv.
DATA: gdt_item_n TYPE TABLE OF bapimepoitem WITH HEADER LINE. "added by yangk 20151230*----------------------------------------------------------------------*
* 定义变量;
*----------------------------------------------------------------------*
DATA: gdf_mandt TYPE mandt.*----------------------------------------------------------------------*
* 定义常量.
*----------------------------------------------------------------------*
CONSTANTS:gdc_objid TYPE wwwdata-objid VALUE 'ZMM03A',gdc_startrow TYPE i VALUE 2,
* gdc_maxcolumn TYPE i VALUE 38,gdc_maxcolumn TYPE i VALUE 40,gdc_maxline TYPE i VALUE 65000.*----------------------------------------------------------------------*
* SELECTION-SCREEN 检索条件 *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK condi WITH FRAME TITLE text-004.
PARAMETERS : r3 RADIOBUTTON GROUP d1 DEFAULT 'X' USER-COMMAND zks, " 导入文件r4 RADIOBUTTON GROUP d1. " 下载空白模板
SELECTION-SCREEN END OF BLOCK condi.SELECTION-SCREEN BEGIN OF BLOCK ifile WITH FRAME TITLE text-002.
PARAMETERS: p_ifile TYPE ibipparms-path MODIF ID ife.
PARAMETERS: p_maxrow TYPE i DEFAULT 500 MODIF ID ife.
PARAMETERS: p_return TYPE c AS CHECKBOX DEFAULT 'X' MODIF ID ife.
SELECTION-SCREEN END OF BLOCK ifile.SELECTION-SCREEN BEGIN OF BLOCK ofile WITH FRAME TITLE text-003.
PARAMETERS: p_ofile TYPE ibipparms-path MODIF ID ofe.
SELECTION-SCREEN END OF BLOCK ofile.*$*$----------------------------------------------------------------$*$*
*$*$ Main Program $*$*
*$*$----------------------------------------------------------------$*$*
*--------- 初始化 ----------
INITIALIZATION.*&------------------------------------------------------------
*& At selection-screen.
*&------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.CASE 'X'.WHEN r3. " 导入文件IF screen-group1 = 'IFE'.screen-active = 1.MODIFY SCREEN.ENDIF.IF screen-group1 = 'OFE'.screen-active = 0.MODIFY SCREEN.ENDIF.WHEN r4. " 下载模板IF screen-group1 = 'OFE'.screen-active = 1.MODIFY SCREEN.ENDIF.IF screen-group1 = 'IFE'.screen-active = 0.MODIFY SCREEN.ENDIF.WHEN OTHERS.ENDCASE.ENDLOOP.*----------------------------------------------------------------------*
* At selection-screen *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile .
* 方便用户选择指定的Excel文件PERFORM select_ifile.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ofile .
* 方便用户选择指定的Excel文件PERFORM select_ofile.*&------------------------------------------------------------
*& At selection-screen.
*&------------------------------------------------------------
AT SELECTION-SCREEN.
* 检查参数输入的合法性 / 检查输入权限PERFORM frm_check_parameter.*&------------------------------------------------------------
*& LOAD-OF-PROGRAM.
*&------------------------------------------------------------
LOAD-OF-PROGRAM.
*--------- START-OF-SELECTION ----------
START-OF-SELECTION.* 从数据表去数据并整理PERFORM get_data.*--------- END-OF-SELECTION ----------
END-OF-SELECTION.CASE 'X'.WHEN r3. " 导入数据IF gdt_alv[] IS INITIAL.MESSAGE s001 DISPLAY LIKE 'E'.ELSE.
* 显示alv界面PERFORM frm_display_lvc.ENDIF.WHEN r4. " 下载模板WHEN OTHERS.ENDCASE.CLEAR: gdt_alv.REFRESH: gdt_alv.************************************************************************
* END OF MAIN PROGRAM
************************************************************************
*&---------------------------------------------------------------------*
*& Form select_ifile
*&---------------------------------------------------------------------*
* 弹出打开文件路径选择窗口,方便用户选择
*----------------------------------------------------------------------*
FORM select_ifile.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask = ',Excel Files,*.xls,Excel Files(2007),*.xlsx,All Files,*.*.'(100)mode = 'O'title = '选择文件'(101)IMPORTINGfilename = p_ifileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc <> 0 AND sy-subrc <> 3.MESSAGE e021. " 读取文件出错!ENDIF.
ENDFORM. " select_ifile*&---------------------------------------------------------------------*
*& Form select_ofile
*&---------------------------------------------------------------------*
* 弹出打开文件路径选择窗口,方便用户选择
*----------------------------------------------------------------------*
FORM select_ofile.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask = ',Excel Files,*.xls,Excel Files(2007),*.xlsx,All Files,*.*.'(100)mode = 'S'title = '选择文件'(101)IMPORTINGfilename = p_ofileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc <> 0 AND sy-subrc <> 3.MESSAGE e021. " 读取文件出错!ENDIF.
ENDFORM. " select_ofile*&---------------------------------------------------------------------*
*& Form frm_check_parameter
*&---------------------------------------------------------------------*
* 检查参数输入的合法性 / 检查输入权限
*----------------------------------------------------------------------*
FORM frm_check_parameter .IF sy-ucomm = 'ZKS'.RETURN.ENDIF.* 权限检查CASE 'X'.WHEN r3. " 导入数据IF p_ifile IS INITIAL.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask = ',Excel Files,*.xls,Excel Files(2007),*.xlsx,All Files,*.*.'mode = 'O'title = '选择文件'IMPORTINGfilename = p_ifileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.CASE sy-subrc.WHEN 0.WHEN 3.SET CURSOR FIELD 'P_IFILE'.MESSAGE e010.WHEN OTHERS.SET CURSOR FIELD 'P_IFILE'.MESSAGE e021.ENDCASE.ENDIF.WHEN r4. " 下载模板IF p_ofile IS INITIAL.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask = ',Excel Files,*.xls,Excel Files(2007),*.xlsx,All Files,*.*.'mode = 'S'title = '选择文件'IMPORTINGfilename = p_ofileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.CASE sy-subrc.WHEN 0.WHEN 3.SET CURSOR FIELD 'P_OFILE'.MESSAGE e010.WHEN OTHERS.SET CURSOR FIELD 'P_OFILE'.MESSAGE e021.ENDCASE.ENDIF.WHEN OTHERS.ENDCASE.ENDFORM. " frm_check_parameter*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* 逻辑处理
*----------------------------------------------------------------------*
FORM get_data .CLEAR: gdt_alv.REFRESH: gdt_alv.CASE 'X'.WHEN r3. " 导入数据PERFORM frm_upload_file.WHEN r4. " 下载模板PERFORM frm_download_file.WHEN OTHERS.ENDCASE.ENDFORM. " GET_DATA*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_FILE
*&---------------------------------------------------------------------*
* 将模板下载到本地
*----------------------------------------------------------------------*
FORM frm_download_file .DATA: lv_subrc TYPE sysubrc,lv_file TYPE rlgrap-filename,lds_data TYPE wwwdatatab.CALL FUNCTION 'ZTOOL_FILE_DOWNLOAD_SMW0'EXPORTINGobjname = gdc_objidpathname = p_ofileIMPORTINGfilename = p_ofileEXCEPTIONSobjname_not_exist = 1inv_winsys = 2no_batch = 3selection_cancel = 4selection_error = 5download_false = 6OTHERS = 7.CASE sy-subrc.WHEN 0.MESSAGE s017. " 模板下载成功!WHEN 1.MESSAGE e016 DISPLAY LIKE 'S'. " 模板不存在!WHEN 4.WHEN 5.MESSAGE e021 DISPLAY LIKE 'S'. " 读取文件出错!WHEN OTHERS.MESSAGE e018 DISPLAY LIKE 'S'. " 模板下载失败!ENDCASE.ENDFORM. " FRM_DOWNLOAD_FILE*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
* 导入数据
*----------------------------------------------------------------------*
FORM frm_upload_file .DATA: lv_info TYPE text255,lv_tag TYPE i,lv_msg TYPE text255.lv_info = '导入进行中...'.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 1text = lv_info.* 读取 Excel 表格PERFORM frm_read_excel_files USING p_ifile gdc_maxcolumn p_maxrow.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 5text = lv_info.* 数据导入内表PERFORM frm_build_excel_data USING gdc_startrow 2.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 10text = lv_info.* 整理导入的数据PERFORM frm_build_data.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 15text = lv_info.* 即时执行IF gdt_alv[] IS NOT INITIAL.PERFORM frm_file_input.ENDIF.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 90text = lv_info.* 数据导出IF p_return = 'X'.IF gdt_alv[] IS NOT INITIAL.PERFORM frm_file_output USING p_ifile gdc_startrow CHANGING lv_tag lv_msg.IF lv_tag <> 0.MESSAGE lv_msg TYPE 'W'.ENDIF.ENDIF.ENDIF.* 进度条CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 100text = lv_info.ENDFORM. " FRM_UPLOAD_FILE*&---------------------------------------------------------------------*
*& Form FRM_BUILD_DATA
*&---------------------------------------------------------------------*
* 整理导入的数据
*----------------------------------------------------------------------*
FORM frm_build_data .DATA: lv_grp TYPE i,lv_rowcolor TYPE char4,ldf_temp TYPE char30,lv_tag TYPE i.DATA: ldf_aufnr TYPE aufk-aufnr."added by yangk 20160411 begin 查找公司代码对应的工厂RANGES: ldf_bukrs FOR bseg-bukrs,ldf_werks FOR mseg-werks.DATA: BEGIN OF ldt_t001w OCCURS 10,werks TYPE t001w-werks,bwkey TYPE t001w-bwkey,END OF ldt_t001w.DATA: BEGIN OF ldt_t001k OCCURS 10,bwkey TYPE t001k-bwkey,bukrs TYPE t001k-bukrs,END OF ldt_t001k.
* CLEAR: ldt_t001w, ldt_t001w[].
* SELECT DISTINCT werks bwkey
* INTO TABLE ldt_t001w
* FROM t001w.
*
* SELECT DISTINCT bwkey bukrs
* INTO TABLE ldt_t001k
* FROM t001k
* WHERE ( bukrs = '8100' OR bukrs = '8200' ).
*
* LOOP AT ldt_t001w.
* READ TABLE ldt_t001k WITH KEY bwkey = ldt_t001w-bwkey.
* CHECK sy-subrc = 0.
* CLEAR: ldf_werks.
* ldf_werks+0(3) = 'IEQ'.
* ldf_werks-low = ldt_t001w-werks.
* APPEND ldf_werks .
* ENDLOOP."added by yangk 20160411 end.lv_grp = 0.lv_rowcolor = ''.LOOP AT gt_ifile INTO gs_ifile.CLEAR gds_alv.MOVE-CORRESPONDING gs_ifile TO gds_alv.* CHECK 抬头-H 明细-IPERFORM frm_check_length USING 1 gs_ifile-f01 '类型' 1CHANGING gds_alv-ztype lv_tag gds_alv-msg.
* 只针对标记为抬头和明细的数据行进行处理IF gs_ifile-f01 <> 'H' AND gs_ifile-f01 <> 'I'.gds_alv-msg = '类型设置错误, 只能为"H"或者"I"!'.CONTINUE.ENDIF.* 抬头检查IF gs_ifile-f01 = 'H'.PERFORM frm_check_length USING 1 gs_ifile-f02 '订单类型' 4CHANGING gds_alv-bsart lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-bsart TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f03 'IMIS合同号' 30CHANGING gds_alv-verkf lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-verkf TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f04 '库存采购项目号' 12CHANGING gds_alv-ihrez lv_tag gds_alv-msg.IF lv_tag = 0.IF gds_alv-ihrez IS NOT INITIAL.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gds_alv-ihrezIMPORTINGoutput = ldf_aufnr.SELECT SINGLE aufnrINTO ldf_aufnrFROM aufkWHERE aufnr = ldf_aufnrAND autyp = '01'.IF sy-subrc <> 0.PERFORM frm_add_msg USING '"库存采购项目号"不是一个有效的内部订单号!' CHANGING gds_alv-msg.ENDIF.ENDIF.ENDIF."begin add by lumingdao 20151211 注释代码
* "新加 侯鹏飞 20140625
* PERFORM frm_check_length USING 0 gs_ifile-f05 '事业部项目号' 12
* CHANGING gds_alv-unsez lv_tag gds_alv-msg.
* IF lv_tag = 0.
* IF gs_ifile-f07 ='8110' OR gs_ifile-f07 ='8120'.
* IF gds_alv-unsez IS NOT INITIAL.
* ELSE.
* PERFORM frm_add_msg USING '"事业部项目号"在通信事业部和事业五部是必填信息!' CHANGING gds_alv-msg.
* ENDIF.
* ENDIF.
* ENDIF."begin add by lumingdao 20151211 注释代码"beign add by lumingdao 20151211 组织架构调整-事业部项目校验修改"事业一部采购组织及采购组校验PERFORM frm_check_length USING 0 gs_ifile-f05 '事业部项目号' 12CHANGING gds_alv-unsez lv_tag gds_alv-msg.IF lv_tag = 0.
* IF gs_ifile-f07 ='8204' AND gs_ifile-f08 = '804'.
* IF gds_alv-unsez IS NOT INITIAL.
* ELSE.
* PERFORM frm_add_msg USING '"事业部项目号"在事业一部到事业五部及招标业务部是必填信息!' CHANGING gds_alv-msg.
* ENDIF.
* ENDIF.
*
* IF gs_ifile-f07 ='8202'OR gs_ifile-f07 ='8203'OR gs_ifile-f07 ='8201'OR gs_ifile-f07 ='8205'OR gs_ifile-f07 ='8206'.
* IF gds_alv-unsez IS NOT INITIAL.
* ELSE.
* PERFORM frm_add_msg USING '"事业部项目号"在事业一部到事业五部及招标业务部是必填信息!' CHANGING gds_alv-msg.
* ENDIF.
* ENDIF.ENDIF."end add by lumingdao 20151211 组织架构调整-事业部项目校验修改"新加 侯鹏飞 20140625PERFORM frm_check_length USING 1 gs_ifile-f06 '供应商' 10CHANGING gds_alv-lifnr lv_tag gds_alv-msg.PERFORM frm_check_length USING 1 gs_ifile-f07 '采购组织' 4CHANGING gds_alv-ekorg lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-ekorg TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 1 gs_ifile-f08 '采购组' 3CHANGING gds_alv-ekgrp lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-ekgrp TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 1 gs_ifile-f09 '公司代码' 4CHANGING gds_alv-bukrs lv_tag gds_alv-msg.CHECK gds_alv-bukrs+0(1) = '8'."added by yangk 20160411PERFORM frm_check_length USING 0 gs_ifile-f10 '付款条款' 4CHANGING gds_alv-zterm lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-zterm TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 1 gs_ifile-f11 '货币' 5CHANGING gds_alv-waers lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-waers TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f12 '国际贸易条件1' 3CHANGING gds_alv-inco1 lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-inco1 TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f13 '国际贸易条件2' 28CHANGING gds_alv-inco2 lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-inco2 TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f14 '原采购订单编号' 28CHANGING gds_alv-ebeln_o lv_tag gds_alv-msg.
* 明细数据检查ELSEIF gs_ifile-f01 = 'I'.PERFORM frm_check_length USING 1 gs_ifile-f15 '行项目号' 5CHANGING gds_alv-ebelp lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f15 '行项目号'CHANGING gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f16 '科目分配类别' 1CHANGING gds_alv-knttp lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-knttp TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f17 '项目类别' 1CHANGING gds_alv-pstyp lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-pstyp TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f18 '物料号' 18CHANGING gds_alv-matnr lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-matnr TO UPPER CASE.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput = gs_ifile-f18IMPORTINGoutput = gds_alv-matnrEXCEPTIONSlength_error = 1OTHERS = 2.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f19 '订单数量' 20CHANGING gds_alv-menge lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_number USING gs_ifile-f19 '订单数量'CHANGING gds_alv-menge lv_tag gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f20 '订单单位' 3CHANGING gds_alv-meins lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-meins TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f21 '交货日期' 10CHANGING ldf_temp lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_date USING gs_ifile-f21 '交货日期' CHANGING gds_alv-eindt gds_alv-msg.ENDIF.PERFORM frm_check_length USING 1 gs_ifile-f22 '含税净价' 20CHANGING gds_alv-netpr lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_number USING gs_ifile-f22 '含税净价'CHANGING gds_alv-netpr lv_tag gds_alv-msg.ENDIF.IF gs_ifile-f22 IS INITIAL.gds_alv-peinh = '1'.ELSE.PERFORM frm_check_length USING 0 gs_ifile-f23 '价格单位' 5CHANGING gds_alv-peinh lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_number USING gs_ifile-f23 '价格单位'CHANGING gds_alv-peinh lv_tag gds_alv-msg.ENDIF.ENDIF.PERFORM frm_check_length USING 1 gs_ifile-f24 '税码' 2CHANGING gds_alv-mwskz lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-mwskz TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f25 '折扣金额' 20CHANGING gds_alv-navnw lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_number USING gs_ifile-f25 '折扣金额'CHANGING gds_alv-navnw lv_tag gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f26 '净价折扣%' 20CHANGING gds_alv-navnw2 lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_number USING gs_ifile-f26 '净价折扣%'CHANGING gds_alv-navnw2 lv_tag gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f27 '物料组' 9CHANGING gds_alv-matkl lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-matkl TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f28 '工厂' 4CHANGING gds_alv-werks lv_tag gds_alv-msg.
** CHECK gds_alv-werks IN ldf_werks. "added by yangk 20160411PERFORM frm_check_length USING 1 gs_ifile-f29 '库存地点' 4CHANGING gds_alv-lgort lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-lgort TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f30 '库存类型' 1CHANGING gds_alv-insmk lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-insmk TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f31 '批次' 10CHANGING gds_alv-charg lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-charg TO UPPER CASE.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f32 '退货项目' 1CHANGING gds_alv-retpo lv_tag gds_alv-msg.IF lv_tag = 0.TRANSLATE gds_alv-retpo TO UPPER CASE.ENDIF.IF lv_tag = 0.IF gs_ifile-f32 = '' OR gs_ifile-f32 = space OR gs_ifile-f32 = 'X'.ELSE.PERFORM frm_add_msg USING '退货项目只能输入空或者"X"' CHANGING gds_alv-msg.ENDIF.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f32 '总账科目' 10CHANGING gds_alv-hkont lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f33 '总账科目'CHANGING gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f34 '销售订单号' 10CHANGING gds_alv-vbeln lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f34 '销售订单号'CHANGING gds_alv-msg.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gds_alv-vbelnIMPORTINGoutput = gds_alv-vbeln.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f35 '销售订单项目' 6CHANGING gds_alv-posnr lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f35 '销售订单项目'CHANGING gds_alv-msg.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gds_alv-posnrIMPORTINGoutput = gds_alv-posnr.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f36 '内部订单号' 12CHANGING gds_alv-aufnr lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f36 '内部订单号'CHANGING gds_alv-msg.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gds_alv-aufnrIMPORTINGoutput = gds_alv-aufnr.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f37 '成本中心' 10CHANGING gds_alv-kostl lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f37 '成本中心'CHANGING gds_alv-msg.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f38 '采购申请号' 10CHANGING gds_alv-banfn lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f38 '采购申请号'CHANGING gds_alv-msg.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gs_ifile-f38IMPORTINGoutput = gds_alv-banfn.IF gs_ifile-f02 ='ZXS'.IF gds_alv-banfn IS INITIAL.PERFORM frm_add_msg USING '以销定采采购订单时,采购申请号 为必填!' CHANGING gds_alv-msg.ENDIF.ENDIF.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f39 '采购申请行项目号' 5CHANGING gds_alv-bnfpo lv_tag gds_alv-msg.IF lv_tag = 0.PERFORM frm_check_numb USING gs_ifile-f39 '采购申请行项目号'CHANGING gds_alv-msg.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = gs_ifile-f39IMPORTINGoutput = gds_alv-bnfpo.IF gs_ifile-f02 ='ZXS'.IF gds_alv-bnfpo IS INITIAL.PERFORM frm_add_msg USING '以销定采采购订单时,采购申请行项目号 为必填!' CHANGING gds_alv-msg.ENDIF.ENDIF.ENDIF.PERFORM frm_check_length USING 0 gs_ifile-f40 '原采购订单及行项目编号' 50CHANGING gds_alv-ebeln_p lv_tag gds_alv-msg.ENDIF.* 分组设定IF gs_ifile-f01 = 'H'.ADD 1 TO lv_grp.
* 颜色设定IF lv_rowcolor = 'C500'.lv_rowcolor = 'C210'.ELSE.lv_rowcolor = 'C500'.ENDIF.ENDIF.gds_alv-grp = lv_grp.gds_alv-rowcolor = lv_rowcolor.gds_alv-id = gs_ifile-line.IF gds_alv-msg IS NOT INITIAL.gds_alv-light = '1'.ENDIF.APPEND gds_alv TO gdt_alv.ENDLOOP.CLEAR: gt_ifile.REFRESH: gt_ifile.ENDFORM. " FRM_BUILD_DATA*&---------------------------------------------------------------------*
*& Form FRM_FILE_INPUT
*&---------------------------------------------------------------------*
* 即时执行
*----------------------------------------------------------------------*
FORM frm_file_input .DATA: BEGIN OF ldt_sort OCCURS 10,grp TYPE i,tag TYPE i,END OF ldt_sort.DATA: ldf_from TYPE i,ldf_index TYPE i,ldf_count TYPE i,ldf_ebeln TYPE ekko-ebeln,ldf_waers TYPE ekko-waers,ldf_msg TYPE text255.DATA: lds_head TYPE gts_alv,ldt_item TYPE TABLE OF gts_alv WITH HEADER LINE.DATA: lds_num TYPE c LENGTH 5.* 判断分组错误状态,保证每个分组中都没有错误的记录CLEAR: ldt_sort, ldt_sort[].LOOP AT gdt_alv INTO gds_alv WHERE msg IS NOT INITIAL.CLEAR ldt_sort.ldt_sort-grp = gds_alv-grp.ldt_sort-tag = 1.APPEND ldt_sort.ENDLOOP.LOOP AT gdt_alv INTO gds_alv.READ TABLE ldt_sort WITH KEY grp = gds_alv-grp.IF sy-subrc <> 0.CLEAR ldt_sort.ldt_sort-grp = gds_alv-grp.ldt_sort-tag = 0.APPEND ldt_sort.ENDIF.ENDLOOP.DELETE ldt_sort WHERE tag = 1.SORT ldt_sort BY grp.* 根据分组 执行采购订单的导入操作SORT gdt_alv BY grp id.LOOP AT ldt_sort.READ TABLE gdt_alv INTO gds_alv WITH KEY grp = ldt_sort-grpBINARY SEARCH.IF sy-subrc = 0.ldf_from = sy-tabix.ldf_count = 0.CLEAR: lds_head, ldt_item, ldt_item[], ldf_waers.LOOP AT gdt_alv INTO gds_alv FROM ldf_from.IF gds_alv-grp <> ldt_sort-grp.EXIT.ENDIF.IF gds_alv-ztype = 'H'.lds_head = gds_alv.ADD 1 TO ldf_count.ELSEIF gds_alv-ztype = 'I'.
* IF gds_alv-waers is not INITIAL.
* IF ldf_waers is INITIAL.
* ldf_waers = gds_alv-waers.
* elseif ldf_waers <> gds_alv-waers.
* ldf_waers = 'XXX'.
* ENDIF.
* ENDIF.APPEND gds_alv TO ldt_item.ENDIF.ENDLOOP.
* lds_head-waers = ldf_waers.
* IF ldf_waers is INITIAL or ldf_waers = 'XXX'.
* LOOP AT gdt_alv INTO gds_alv FROM ldf_from.
* ldf_index = sy-tabix.
* IF gds_alv-grp <> ldt_sort-grp.
* EXIT.
* ENDIF.
* gds_alv-light = '1'.
* gds_alv-msg = '同一张凭证中的币种必需一致!'.
* MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING light msg.
* ENDLOOP.
* CONTINUE.
* ENDIF.
* 抬头信息错误IF ldf_count <> 1.LOOP AT gdt_alv INTO gds_alv FROM ldf_from.ldf_index = sy-tabix.IF gds_alv-grp <> ldt_sort-grp.EXIT.ENDIF.gds_alv-light = '1'.IF ldf_count = 0.gds_alv-msg = '缺少抬头信息'.ELSE.gds_alv-msg = '只需要一条抬头信息'.ENDIF.MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING light msg.ENDLOOP.CONTINUE.ENDIF.
* 缺少明细数据IF ldt_item[] IS INITIAL.LOOP AT gdt_alv INTO gds_alv FROM ldf_from.ldf_index = sy-tabix.IF gds_alv-grp <> ldt_sort-grp.EXIT.ENDIF.gds_alv-light = '1'.gds_alv-msg = '缺少明细信息'.MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING light msg.ENDLOOP.CONTINUE.ENDIF.
* 创建 POCLEAR:gdt_item_n,gdt_item_n[],lds_num.PERFORM frm_create_po TABLES ldt_item USING lds_head CHANGING ldf_ebeln ldf_msg .IF ldf_ebeln IS INITIAL.LOOP AT gdt_alv INTO gds_alv FROM ldf_from.ldf_index = sy-tabix.IF gds_alv-grp <> ldt_sort-grp.EXIT.ENDIF.gds_alv-light = '1'.gds_alv-msg = ldf_msg.MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING light msg.ENDLOOP.ELSE.LOOP AT gdt_alv INTO gds_alv FROM ldf_from.ldf_index = sy-tabix.IF gds_alv-grp <> ldt_sort-grp.EXIT.ENDIF.gds_alv-light = '3'.gds_alv-ebeln = ldf_ebeln.CONCATENATE '创建成功,采购订单号:' ldf_ebeln INTO gds_alv-msg.gds_alv-f42 = ldf_ebeln.IF lds_num IS NOT INITIAL.gds_alv-f43 = lds_num.ENDIF.lds_num = lds_num + 10.MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING ebeln light msg f42 f43.ENDLOOP.ENDIF.ENDIF.ENDLOOP.CLEAR: ldt_sort, ldt_sort[].CLEAR: lds_head, ldt_item, ldt_item[].ENDFORM. " FRM_FILE_INPUT*&---------------------------------------------------------------------*
*& Form FRM_FILE_outPUT
*&---------------------------------------------------------------------*
* 数据导出 -- 反馈错误日志
*----------------------------------------------------------------------*
FORM frm_file_output USING im_ifile TYPE ibipparms-pathim_startrow TYPE iCHANGING ex_tag TYPE iex_msg TYPE text255.DATA: ldf_filename TYPE text255,ls_fieldcat TYPE zexcel_s_fieldcat,lt_fieldcat TYPE zexcel_t_fieldcat.DATA: ldf_count TYPE i,ldf_row TYPE i,ldf_col TYPE i,ldf_title TYPE text255.DATA: ldt_alv TYPE TABLE OF gts_alv WITH HEADER LINE.ldf_filename = im_ifile.* 打开文件CALL FUNCTION 'ZEXCEL_START'EXPORTINGfilename = ldf_filenameIMPORTINGsubrc = ex_tagmsg = ex_msg.CHECK ex_tag = 0.CLEAR: ls_fieldcat, lt_fieldcat, lt_fieldcat[].ls_fieldcat-fname = 'MSG'.ls_fieldcat-coltext = '错误日志'.APPEND ls_fieldcat TO lt_fieldcat.CLEAR ldt_alv.ldf_row = im_startrow.LOOP AT gdt_alv INTO gds_alv.DO.IF gds_alv-id > ldf_row.APPEND ldt_alv.ADD 1 TO ldf_row.ELSE.EXIT.ENDIF.ENDDO.APPEND gds_alv TO ldt_alv.ADD 1 TO ldf_row.ENDLOOP."added by yangk 20151220 beginCLEAR: ls_fieldcat, lt_fieldcat, lt_fieldcat[].ls_fieldcat-fname = 'F42'.ls_fieldcat-coltext = '新采购订单编号'.APPEND ls_fieldcat TO lt_fieldcat.ldf_row = im_startrow.ldf_col = 42.CALL FUNCTION 'ZEXCEL_FILL_ITAB'EXPORTINGrow = ldf_rowcolumn = ldf_colfieldcat = lt_fieldcatautoheader = 0IMPORTINGsubrc = ex_tagmsg = ex_msgTABLESitab = ldt_alv.CLEAR: ls_fieldcat, lt_fieldcat, lt_fieldcat[].ls_fieldcat-fname = 'F43'.ls_fieldcat-coltext = '新采购订单行项目号'.APPEND ls_fieldcat TO lt_fieldcat.ldf_row = im_startrow.ldf_col = 43.CALL FUNCTION 'ZEXCEL_FILL_ITAB'EXPORTINGrow = ldf_rowcolumn = ldf_colfieldcat = lt_fieldcatautoheader = 0IMPORTINGsubrc = ex_tagmsg = ex_msgTABLESitab = ldt_alv."added by yangk 20151220 endCLEAR: ls_fieldcat, lt_fieldcat, lt_fieldcat[].ls_fieldcat-fname = 'MSG'.ls_fieldcat-coltext = '错误日志'.APPEND ls_fieldcat TO lt_fieldcat.ldf_row = im_startrow.ldf_col = gdc_maxcolumn + 1.CALL FUNCTION 'ZEXCEL_FILL_ITAB'EXPORTINGrow = ldf_rowcolumn = ldf_colfieldcat = lt_fieldcatautoheader = 0IMPORTINGsubrc = ex_tagmsg = ex_msgTABLESitab = ldt_alv.CLEAR: ldt_alv, ldt_alv[].* 结束ExcelCALL FUNCTION 'ZEXCEL_END'EXPORTINGvisible = 1saves = 1
* FILENAME = LDF_FILENAMEclose = 1IMPORTINGsubrc = ex_tagmsg = ex_msg.ENDFORM. " FRM_FILE_outPUT*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* 显示alv界面
*----------------------------------------------------------------------*
FORM frm_display_lvc.* 设定报表输出样式。PERFORM set_layout_lvc.
* 设定报表列标题格式PERFORM set_fieldcat_lvc.
* 输出ALV报表PERFORM alv_grid_display_lvc.ENDFORM. " FRM_DISPLAY_ALV*&---------------------------------------------------------------------*
*& Form SET_LAYOUT_LVC
*&---------------------------------------------------------------------*
* 设定报表输出样式。
*----------------------------------------------------------------------*
FORM set_layout_lvc.CLEAR: gds_alv_layout_lvc.
* 设置Grid的字段列宽度自动适应gds_alv_layout_lvc-cwidth_opt = 'X'.
* 设置Grid的行颜色变换显示gds_alv_layout_lvc-zebra = 'X'.
* 置弹出窗口的标题栏gds_alv_layout_lvc-detailtitl = '详细内容'.
* 设置Grid的多行选择列,其中BOX必须为内表的一列,为一个字符长度gds_alv_layout_lvc-box_fname = 'SEL'.
* 行颜色字段设置gds_alv_layout_lvc-info_fname = 'ROWCOLOR'.
* 信号灯设置gds_alv_layout_lvc-excp_fname = 'LIGHT'.
ENDFORM. " SET_LAYOUT_LVC*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT_LVC
*&---------------------------------------------------------------------*
* 设定报表列标题格式
*----------------------------------------------------------------------*
FORM set_fieldcat_lvc.* ------ initial valuationCLEAR gdt_alv_fieldcat_lvc.REFRESH gdt_alv_fieldcat_lvc.gdf_alv_col_pos = 0.DEFINE fieldcat_macro.gdf_alv_col_pos = gdf_alv_col_pos + 1.gds_alv_fieldcat_lvc-tabname = 'GDT_ALV'.gds_alv_fieldcat_lvc-fieldname = '&1'.gds_alv_fieldcat_lvc-scrtext_l = &2.gds_alv_fieldcat_lvc-key = &3.gds_alv_fieldcat_lvc-emphasize = &4.gds_alv_fieldcat_lvc-no_out = &5.gds_alv_fieldcat_lvc-edit = &6.
* gds_alv_fieldcat_lvc-hotspot = &6.
* GdS_ALV_FIELDCAT_LVC-DECIMALS_O = &6.
* GdS_ALV_FIELDCAT_LVC-DECIMALS = &6.
* gds_alv_fieldcat_lvc-checkbox = &6.
* gds_alv_fieldcat_lvc-cwidth_opt = &6.gds_alv_fieldcat_lvc-outputlen = &7.gds_alv_fieldcat_lvc-no_zero = &8.gds_alv_fieldcat_lvc-just = &9.gds_alv_fieldcat_lvc-col_pos = gdf_alv_col_pos.append gds_alv_fieldcat_lvc to gdt_alv_fieldcat_lvc.clear gds_alv_fieldcat_lvc.END-OF-DEFINITION.* 列标题设定fieldcat_macro msg '消息' '' 'C700' '' '' '' '' ''.fieldcat_macro ebeln '采购订单' '' 'C510' '' '' '' '' ''.fieldcat_macro ztype '类型' '' '' '' '' '' '' ''.fieldcat_macro bsart '订单类型' '' '' '' '' '' '' ''.fieldcat_macro verkf 'IMIS合同号' '' '' '' '' '' '' ''.fieldcat_macro ihrez '库存采购项目号' '' '' '' '' '' '' ''.fieldcat_macro unsez '事业部项目号' '' '' '' '' '' '' ''. "新加fieldcat_macro lifnr '供应商' '' '' '' '' '' '' ''.fieldcat_macro ekorg '采购组织' '' '' '' '' '' '' ''.fieldcat_macro ekgrp '采购组' '' '' '' '' '' '' ''.fieldcat_macro bukrs '公司代码' '' '' '' '' '' '' ''.fieldcat_macro zterm '付款条款' '' '' '' '' '' '' ''.fieldcat_macro inco1 '国际贸易条件1' '' '' '' '' '' '' ''.fieldcat_macro inco2 '国际贸易条件2' '' '' '' '' '' '' ''.fieldcat_macro ebelp '行项目号' '' '' '' '' '' '' ''.fieldcat_macro knttp '科目分配类别' '' '' '' '' '' '' ''.fieldcat_macro pstyp '项目类别' '' '' '' '' '' '' ''.fieldcat_macro matnr '物料号' '' '' '' '' '' '' ''.fieldcat_macro menge '订单数量' '' 'C300' '' '' '' '' ''.fieldcat_macro meins '订单单位' '' '' '' '' '' '' ''.fieldcat_macro eindt '交货日期' '' '' '' '' '' '' ''.fieldcat_macro netpr '含税净价' '' 'C300' '' '' '' '' ''.fieldcat_macro peinh '价格单位' '' '' '' '' '' '' ''.fieldcat_macro mwskz '税码' '' '' '' '' '' '' ''.fieldcat_macro waers '货币' '' '' '' '' '' '' ''.fieldcat_macro navnw '折扣金额' '' 'C300' '' '' '' '' ''.fieldcat_macro matkl '物料组(如果无料号)' '' '' '' '' '' '' ''.fieldcat_macro werks '工厂' '' '' '' '' '' '' ''.fieldcat_macro lgort '库存地点' '' '' '' '' '' '' ''.fieldcat_macro insmk '库存类型' '' '' '' '' '' '' ''.fieldcat_macro charg '批次' '' '' '' '' '' '' ''.fieldcat_macro retpo '退货项目' '' '' '' '' '' '' ''.fieldcat_macro hkont '总账科目' '' '' '' '' '' '' ''.fieldcat_macro vbeln '销售订单号' '' '' '' '' '' '' ''.fieldcat_macro posnr '销售订单行项目号' '' '' '' '' '' '' ''.fieldcat_macro aufnr '内部订单号' '' '' '' '' '' '' ''.fieldcat_macro kostl '成本中心' '' '' '' '' '' '' ''.fieldcat_macro banfn '采购申请号' '' '' '' '' '' '' ''.fieldcat_macro bnfpo '采购申请行项目号' '' '' '' '' '' '' ''.* 其他项目补充CALL FUNCTION 'ZTOOL_BUILD_FIELDCAT'EXPORTINGim_fieldcat = gdt_alv_fieldcat_lvcIMPORTINGfieldcat = gdt_alv_fieldcat_lvcTABLESitab = gdt_alv.ENDFORM. " SET_FIELDCAT_LVC*&---------------------------------------------------------------------*
*& Form ALV_GRID_DISPLAY_LVC
*&---------------------------------------------------------------------*
* 输出ALV报表
*----------------------------------------------------------------------*
FORM alv_grid_display_lvc.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidi_callback_pf_status_set = 'SET_PF_STATUS_LVC'i_callback_user_command = 'USER_COMMAND_LVC'is_layout_lvc = gds_alv_layout_lvc "设定报表输出样式。it_fieldcat_lvc = gdt_alv_fieldcat_lvc[]
* it_sort_lvc = gdt_alv_sortinfo_lvci_default = 'X'i_save = 'A' "设定是否可以保存报表布局
* i_html_height_top = 12
* i_html_height_end = 8TABLESt_outtab = gdt_alv[]EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM. " ALV_GRID_DISPLAY_LVC*&---------------------------------------------------------------------*
*& Form PF_STATUS_SET_LVC
*&---------------------------------------------------------------------*
* 定义用户自定义的屏幕菜单。
*----------------------------------------------------------------------*
FORM set_pf_status_lvc USING im_extab TYPE slis_t_extab.DATA: l_count TYPE i.DATA: ldt_fcode TYPE TABLE OF sy-ucomm.CLEAR: ldt_fcode.REFRESH: ldt_fcode.DESCRIBE TABLE gdt_alv[] LINES l_count.SET TITLEBAR 'TITLE' WITH l_count.* APPEND '&SUM' TO ldt_fcode. " 小计
* APPEND '&ABC' TO ldt_fcode. " ABC分析
* APPEND '&GRAPH' TO ldt_fcode. " 图形分析APPEND 'REFR' TO ldt_fcode. " 刷新APPEND 'SAVE' TO ldt_fcode. " 保存SET PF-STATUS 'STANDARD' EXCLUDING ldt_fcode.
ENDFORM. "SET_PF_STATUS_LVC*&---------------------------------------------------------------------*
*& Form USER_COMMAND_LVC
*&---------------------------------------------------------------------*
* 响应菜单项及相应事件。
*----------------------------------------------------------------------*
FORM user_command_lvc USING im_ucomm TYPE sy-ucommim_filecat TYPE slis_selfield.DATA: lv_tag TYPE i.CASE im_ucomm .
* 返回/退出WHEN 'BACK' OR 'EXIT'.LEAVE TO SCREEN 0.WHEN 'CANCEL'.LEAVE PROGRAM.* 刷新
* WHEN 'REFR'.
** 从数据表取数据并整理
* PERFORM get_data.
* IF gdt_alv[] IS INITIAL.
* MESSAGE i001. " 没有找到相关的数据!
* LEAVE TO SCREEN 0.
* ELSE.
* im_filecat-refresh = 'X'.
* ENDIF.* 双击WHEN '&IC1' .READ TABLE gdt_alv INTO gds_alv INDEX im_filecat-tabindex.IF sy-subrc = 0.PERFORM frm_alv_dbclick USING gds_alv im_filecat CHANGING lv_tag.
* IF lv_tag <> 0.
* ENDIF.ENDIF .WHEN OTHERS.ENDCASE.
ENDFORM. "user_command_lvc*&---------------------------------------------------------------------*
*& Form FRM_CREATE_PO
*&---------------------------------------------------------------------*
* 创建 PO
*----------------------------------------------------------------------*
FORM frm_create_po TABLES it_item TYPE gtt_alvUSING is_head TYPE gts_alvCHANGING ex_ebeln TYPE ekko-ebelnex_msg TYPE text255.DATA: lds_head TYPE bapimepoheader,lds_headx TYPE bapimepoheaderx.DATA: ldt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,ldt_item TYPE TABLE OF bapimepoitem WITH HEADER LINE,ldt_itemx TYPE TABLE OF bapimepoitemx WITH HEADER LINE,ldt_plan TYPE TABLE OF bapimeposchedule WITH HEADER LINE,ldt_planx TYPE TABLE OF bapimeposchedulx WITH HEADER LINE,ldt_account TYPE TABLE OF bapimepoaccount WITH HEADER LINE,ldt_accountx TYPE TABLE OF bapimepoaccountx WITH HEADER LINE,ldt_cond TYPE TABLE OF bapimepocond WITH HEADER LINE,ldt_condx TYPE TABLE OF bapimepocondx WITH HEADER LINE.CLEAR: ex_ebeln, ex_msg, lds_head, lds_headx.CLEAR: ldt_return, ldt_item, ldt_itemx, ldt_plan, ldt_planx,ldt_account, ldt_accountx, ldt_cond, ldt_condx.REFRESH: ldt_return, ldt_item, ldt_itemx, ldt_plan, ldt_planx,ldt_account, ldt_accountx, ldt_cond, ldt_condx.* 抬头信息lds_head-comp_code = is_head-bukrs.lds_head-doc_type = is_head-bsart.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = is_head-lifnrIMPORTINGoutput = lds_head-vendor.
* 付款条件CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = is_head-ztermIMPORTINGoutput = lds_head-pmnttrms.lds_head-purch_org = is_head-ekorg.lds_head-pur_group = is_head-ekgrp.lds_head-ref_1 = is_head-ihrez.lds_head-our_ref = is_head-unsez. "新加lds_head-sales_pers = is_head-verkf.lds_head-incoterms1 = is_head-inco1.lds_head-incoterms2 = is_head-inco2.lds_head-currency = is_head-waers.lds_head-telephone = is_head-ebeln_o."added by yangk 20151224
* lds_head-po_rel_ind = 'X'.
* lds_headx-po_rel_ind = 'X'.lds_headx-telephone = 'X'."added by yangk 20151224lds_headx-comp_code = 'X'.lds_headx-doc_type = 'X'.lds_headx-vendor = 'X'.lds_headx-pmnttrms = 'X'.lds_headx-purch_org = 'X'.lds_headx-pur_group = 'X'.IF is_head-ihrez IS NOT INITIAL.lds_headx-ref_1 = 'X'.ENDIF.lds_headx-our_ref = 'X'.lds_headx-sales_pers = 'X'.lds_headx-incoterms1 = 'X'.lds_headx-incoterms2 = 'X'.lds_headx-currency = 'X'.
* 明细数据LOOP AT it_item.CLEAR ldt_item.ldt_item-po_item = it_item-ebelp.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput = it_item-matnrIMPORTINGoutput = ldt_item-materialEXCEPTIONSlength_error = 1OTHERS = 2.ldt_item-plant = it_item-werks.ldt_item-stge_loc = it_item-lgort.ldt_item-batch = it_item-charg.ldt_item-matl_group = it_item-matkl. " 物料组ldt_item-quantity = it_item-menge.ldt_item-po_unit = it_item-meins.ldt_item-net_price = it_item-netpr.ldt_item-price_unit = it_item-peinh.ldt_item-item_cat = it_item-pstyp.ldt_item-acctasscat = it_item-knttp.ldt_item-ret_item = it_item-retpo.ldt_item-tax_code = it_item-mwskz. " 税代码ldt_item-gr_to_date = it_item-eindt.ldt_item-qual_insp = it_item-insmk.ldt_item-preq_no = it_item-banfn. " 采购申请编号ldt_item-preq_item = it_item-bnfpo. " 采购申请的项目编号ldt_item-vend_mat = it_item-ebeln_p. "原采购订单+行项目 "added by yangk 20151224APPEND ldt_item.CLEAR ldt_itemx.ldt_itemx-po_item = it_item-ebelp.ldt_itemx-po_itemx = 'X'.ldt_itemx-vend_mat = 'X'. "added by yangk 20151224IF ldt_item-preq_no IS INITIAL.ldt_itemx-material = 'X'.ldt_itemx-plant = 'X'.ldt_itemx-matl_group = 'X'.ldt_itemx-quantity = 'X'.ldt_itemx-po_unit = 'X'.ldt_itemx-item_cat = 'X'.ldt_itemx-acctasscat = 'X'.ldt_itemx-ret_item = 'X'.ENDIF.ldt_itemx-stge_loc = 'X'.ldt_itemx-batch = 'X'.ldt_itemx-net_price = 'X'.ldt_itemx-price_unit = 'X'.ldt_itemx-tax_code = 'X'.IF ldt_item-gr_to_date IS NOT INITIAL.ldt_itemx-gr_to_date = 'X'.ENDIF.ldt_itemx-qual_insp = 'X'.ldt_itemx-preq_no = 'X'. " 采购申请编号ldt_itemx-preq_item = 'X'. " 采购申请的项目编号APPEND ldt_itemx.IF it_item-eindt IS NOT INITIAL.CLEAR ldt_plan.ldt_plan-po_item = it_item-ebelp.ldt_plan-sched_line = 1.ldt_plan-del_datcat_ext = 'D'.WRITE it_item-eindt TO ldt_plan-delivery_date.ldt_plan-quantity = it_item-menge.ldt_plan-stat_date = it_item-eindt.APPEND ldt_plan.CLEAR ldt_planx.ldt_planx-po_item = it_item-ebelp.ldt_planx-sched_line = 1.ldt_planx-po_itemx = 'X'.ldt_planx-sched_linex = 'X'.ldt_planx-del_datcat_ext = 'X'.ldt_planx-delivery_date = 'X'.IF ldt_plan-quantity IS NOT INITIAL.ldt_planx-quantity = 'X'.ENDIF.ldt_planx-stat_date = 'X'.APPEND ldt_planx.ENDIF.IF it_item-navnw IS NOT INITIAL.CLEAR ldt_cond.ldt_cond-itm_number = it_item-ebelp.ldt_cond-cond_st_no = 1.ldt_cond-cond_type = 'RB00'. " 绝对折扣ldt_cond-cond_value = it_item-navnw.ldt_cond-currency = is_head-waers.
* ldt_cond-COND_UNIT = it_item-meins.
* ldt_cond-CONBASEVAL = 1.
* ldt_cond-NUMCONVERT = 1.
* ldt_cond-DENOMINATO = 1.ldt_cond-change_id = 'I'.APPEND ldt_cond.CLEAR ldt_condx.ldt_condx-itm_number = it_item-ebelp.ldt_condx-cond_st_no = 1.ldt_condx-itm_numberx = 'X'.ldt_condx-cond_st_nox = 'X'.ldt_condx-cond_type = 'X'.ldt_condx-cond_value = 'X'.ldt_condx-currency = 'X'.
* ldt_condx-COND_UNIT = 'X'.
* ldt_condx-CONBASEVAL = 'X'.
* ldt_condx-NUMCONVERT = 'X'.
* ldt_condx-DENOMINATO = 'X'.ldt_condx-change_id = 'X'.APPEND ldt_condx.ENDIF.IF it_item-navnw2 IS NOT INITIAL.CLEAR ldt_cond.ldt_cond-itm_number = it_item-ebelp.ldt_cond-cond_st_no = 1.ldt_cond-cond_type = 'RA00'. " 净价折扣%ldt_cond-cond_value = it_item-navnw2.ldt_cond-currency = '%'.
* ldt_cond-COND_UNIT = it_item-meins.
* ldt_cond-CONBASEVAL = 1.
* ldt_cond-NUMCONVERT = 1.
* ldt_cond-DENOMINATO = 1.ldt_cond-change_id = 'I'.APPEND ldt_cond.CLEAR ldt_condx.ldt_condx-itm_number = it_item-ebelp.ldt_condx-cond_st_no = 1.ldt_condx-itm_numberx = 'X'.ldt_condx-cond_st_nox = 'X'.ldt_condx-cond_type = 'X'.ldt_condx-cond_value = 'X'.ldt_condx-currency = 'X'.
* ldt_condx-COND_UNIT = 'X'.
* ldt_condx-CONBASEVAL = 'X'.
* ldt_condx-NUMCONVERT = 'X'.
* ldt_condx-DENOMINATO = 'X'.ldt_condx-change_id = 'X'.APPEND ldt_condx.ENDIF.IF it_item-hkont IS NOT INITIALOR it_item-vbeln IS NOT INITIALOR it_item-aufnr IS NOT INITIALOR it_item-kostl IS NOT INITIAL.CLEAR ldt_account.ldt_account-po_item = it_item-ebelp.ldt_account-serial_no = 1.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = it_item-hkontIMPORTINGoutput = ldt_account-gl_account.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = it_item-vbelnIMPORTINGoutput = ldt_account-sd_doc.ldt_account-itm_number = it_item-posnr.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = it_item-aufnrIMPORTINGoutput = ldt_account-orderid.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = it_item-kostlIMPORTINGoutput = ldt_account-costcenter.APPEND ldt_account.CLEAR ldt_accountx.ldt_accountx-po_item = it_item-ebelp.ldt_accountx-serial_no = 1.ldt_accountx-po_itemx = 'X'.ldt_accountx-serial_nox = 'X'.ldt_accountx-gl_account = 'X'.ldt_accountx-sd_doc = 'X'.ldt_accountx-itm_number = 'X'.ldt_accountx-orderid = 'X'.ldt_accountx-costcenter = 'X'.APPEND ldt_accountx.ENDIF.ENDLOOP.
* navnw TYPE char25,CALL FUNCTION 'BAPI_PO_CREATE1'EXPORTINGpoheader = lds_headpoheaderx = lds_headx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =no_price_from_po = 'X'
* PARK_COMPLETE =
* PARK_UNCOMPLETE =IMPORTINGexppurchaseorder = ex_ebeln
* EXPHEADER =
* EXPPOEXPIMPHEADER =TABLESreturn = ldt_return[]poitem = ldt_item[]poitemx = ldt_itemx[]
* POADDRDELIVERY =poschedule = ldt_plan[]poschedulex = ldt_planx[]poaccount = ldt_account[]
* POACCOUNTPROFITSEGMENT =poaccountx = ldt_accountx[]
* POCONDHEADER =
* POCONDHEADERX =pocond = ldt_condpocondx = ldt_condx
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
* SERIALNUMBER =
* SERIALNUMBERX =
* INVPLANHEADER =
* INVPLANHEADERX =
* INVPLANITEM =
* INVPLANITEMX =.IF ex_ebeln IS INITIAL.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.SORT ldt_return BY type id number message.DELETE ADJACENT DUPLICATES FROM ldt_return COMPARING type id number message.LOOP AT ldt_return WHERE type = 'E'.PERFORM frm_add_msg USING ldt_return-message CHANGING ex_msg.ENDLOOP.LOOP AT ldt_return WHERE type <> 'E' AND type <> 'I'.PERFORM frm_add_msg USING ldt_return-message CHANGING ex_msg.ENDLOOP.ELSE.gdt_item_n[] = ldt_item[]. "added by yangk 20151230CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ENDIF.CLEAR: ldt_return, ldt_item, ldt_itemx, ldt_plan, ldt_planx,ldt_account, ldt_accountx, ldt_cond, ldt_condx.REFRESH: ldt_return, ldt_item, ldt_itemx, ldt_plan, ldt_planx,ldt_account, ldt_accountx, ldt_cond, ldt_condx.ENDFORM. " FRM_CREATE_PO*&---------------------------------------------------------------------*
*& Form FRM_CHECK_NUMB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_check_numb USING im_value TYPE cim_desc TYPE cCHANGING ex_msg TYPE gts_alv-msg.DATA: lv_temp TYPE text255.CALL FUNCTION 'ZTOOL_GET_NUMCHAR'EXPORTINGim_char = im_valueEXCEPTIONSnot_number = 1OTHERS = 2.IF sy-subrc <> 0.CONCATENATE '“' im_desc '”不是数字' INTO lv_temp.PERFORM frm_add_msg USING lv_temp CHANGING ex_msg.ENDIF.ENDFORM. " FRM_CHECK_NUMB
INCLUDE zslis. 详细代码如下
:
*&---------------------------------------------------------------------*
*& Include ZSLIS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 程序名称: ALV公用包含程序段
* 作者 : 王俊岭
* 时间 : 2013-11-07
* 模块 : 通用
* 描述 : ALV报表常用变量定义等
* 特殊特性: 无
*----------------------------------------------------------------------*
* 修改记录:
* 作者 时间 描述 请求号
* ------ ---------- ---------------------------------------- ----------*
*
*----------------------------------------------------------------------**&------------------------------------------------------------
*& ALV data declarations.
*&------------------------------------------------------------
INCLUDE <icon>.
INCLUDE <symbol>.
TYPE-POOLS slis.TYPES: BEGIN OF ty_alv_color,ch1 TYPE char1,ch2 TYPE char1,ch3 TYPE char1,ch4 TYPE char1,END OF ty_alv_color.DATA: gds_alv_layout TYPE slis_layout_alv,gds_alv_layout_lvc TYPE lvc_s_layo,gds_alv_layout_lv2 TYPE lvc_s_layo,gds_alv_layout_lv3 TYPE lvc_s_layo.
DATA: gds_alv_grid TYPE lvc_s_glay.
DATA: gds_alv_fieldcat TYPE slis_fieldcat_alv,gdt_alv_fieldcat TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldca1 TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldca2 TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldca3 TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldca4 TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldcat_item TYPE TABLE OF slis_fieldcat_alv,gdt_alv_fieldcat_msg TYPE TABLE OF slis_fieldcat_alv.
DATA: gds_alv_fieldcat_lvc TYPE lvc_s_fcat,gdt_alv_fieldcat_lvc TYPE lvc_t_fcat,gdt_alv_fieldcat_lv2 TYPE lvc_t_fcat,gdt_alv_fieldcat_lv3 TYPE lvc_t_fcat,gdt_alv_fieldcat_lv4 TYPE lvc_t_fcat.
DATA: gds_alv_sortinfo TYPE slis_sortinfo_alv,gdt_alv_sortinfo TYPE slis_t_sortinfo_alv.
DATA: gds_alv_sortinfo_lvc TYPE lvc_s_sort,gdt_alv_sortinfo_lvc TYPE lvc_t_sort,gdt_alv_sortinfo_lv2 TYPE lvc_t_sort,gdt_alv_sortinfo_lv3 TYPE lvc_t_sort.
DATA: gdt_alv_top_of_page TYPE slis_t_listheader.
DATA: gds_alv_print TYPE slis_print_alv.
DATA: gds_alv_event TYPE slis_alv_event,gdt_alv_event TYPE slis_t_event.
DATA: gdf_alv_col_pos TYPE i,gdf_alv_fieldcat_val TYPE text10.
DATA: gds_alv_color TYPE slis_specialcol_alv,gds_alv_cellcolor TYPE ty_alv_color,gds_alv_style TYPE lvc_s_styl..
DATA: gdo_alv_grid TYPE REF TO cl_gui_alv_grid,gdo_alv_igrid TYPE REF TO cl_gui_alv_grid.
DATA: gdo_alv_screen TYPE REF TO cl_gui_alv_grid.
DATA: gdo_alv_descr TYPE REF TO cl_abap_structdescr.FIELD-SYMBOLS: <gdf_alv_value> TYPE any,<gdf_alv_line> TYPE any.*&---------------------------------------------------------------------*
*& Form ALV_CHECK_VALUE
*&---------------------------------------------------------------------*
* 获取改变后的值
*----------------------------------------------------------------------*
FORM alv_check_value.IF gdo_alv_grid IS INITIAL.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = gdo_alv_grid.ENDIF.IF NOT gdo_alv_grid IS INITIAL.CALL METHOD gdo_alv_grid->check_changed_data.ENDIF.
ENDFORM. " ALV_CHECK_VALUE*&---------------------------------------------------------------------*
*& Form ALV_REJUST_LAYOUT_WIDTH
*&---------------------------------------------------------------------*
* 重新调整列宽
*----------------------------------------------------------------------*
FORM alv_rejust_layout_width.DATA: lv_layout TYPE lvc_s_layo.IF gdo_alv_grid IS INITIAL.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = gdo_alv_grid.ENDIF.IF NOT gdo_alv_grid IS INITIAL.CALL METHOD gdo_alv_grid->get_frontend_layoutIMPORTINGes_layout = lv_layout.lv_layout-cwidth_opt = 'X'. " 设置Grid的字段列宽度自动适应CALL METHOD gdo_alv_grid->set_frontend_layoutEXPORTINGis_layout = lv_layout.ENDIF.
ENDFORM. " ALV_REJUST_LAYOUT_WIDTH*&---------------------------------------------------------------------*
*& Form ALV_CHECK_ITEMVALUE
*&---------------------------------------------------------------------*
* 获取改变后的值
*----------------------------------------------------------------------*
FORM alv_check_itemvalue.IF gdo_alv_igrid IS INITIAL.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = gdo_alv_igrid.ENDIF.IF NOT gdo_alv_igrid IS INITIAL.CALL METHOD gdo_alv_igrid->check_changed_data.ENDIF.
ENDFORM. " ALV_CHECK_ITEMVALUE*&---------------------------------------------------------------------*
*& Form frm_alv_dbclick
*&---------------------------------------------------------------------*
* 检查并进入相关业务界面
*----------------------------------------------------------------------*
FORM frm_alv_dbclick USING is_line TYPE anyim_filecat TYPE slis_selfieldCHANGING ex_tag TYPE i.DATA: lv_tag TYPE i.* 全局变量赋值ASSIGN is_line TO <gdf_alv_line>.
* 初始化ex_tag = 0.lv_tag = 0.
* 根据点击的不同字段,跳转到相应的tcode.CASE im_filecat-fieldname.
*==================================== MM 采购 =========================WHEN 'EBELN'. " 采购订单PERFORM frm_set_param_id USING 'BES' 'EBELN' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'ME23N' CHANGING lv_tag.WHEN 'MATNR' OR 'MAKTX'. " 物料代码PERFORM frm_set_param_id USING 'MAT' 'MATNR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'MM03' CHANGING lv_tag.WHEN 'MBLNR' OR 'MJAHR'. " 物料凭证PERFORM frm_set_param_id USING 'MBN' 'MBLNR' CHANGING lv_tag.PERFORM frm_set_param_id USING 'MJA' 'MJAHR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'MB03' CHANGING lv_tag.
*==================================== SD 采购 =========================WHEN 'VBELN'. " 销售订单PERFORM frm_set_param_id USING 'AUN' 'VBELN' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'VA03' CHANGING lv_tag.
* when 'VBELN'. " 发货单
* PERFORM frm_set_param_id USING 'VL' 'VBELN' CHANGING lv_tag.
* PERFORM frm_turnto_tcode USING 'VL03N' CHANGING lv_tag.WHEN 'KUNNR'. " 客户PERFORM frm_set_param_id USING 'KUN' 'KUNNR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'XD03' CHANGING lv_tag.WHEN 'BLRQNO'. " 金税发票PERFORM frm_set_param_id USING 'ZBLRQ' 'BLRQNO' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'ZSD007' CHANGING lv_tag.
*==================================== FI 财务 =========================WHEN 'BELNR' OR 'GJAHR'. " 会计凭证PERFORM frm_set_param_id USING 'BLN' 'BELNR' CHANGING lv_tag.PERFORM frm_set_param_id USING 'BUK' 'BUKRS' CHANGING lv_tag.PERFORM frm_set_param_id USING 'GJR' 'GJAHR' CHANGING lv_tag.
* PERFORM frm_turnto_tcode USING 'FB03' CHANGING lv_tag.SET PARAMETER ID 'GLN_FLEX' FIELD '0L'.CALL TRANSACTION 'IDCNFB03'.WHEN 'BELNR2' OR 'GJAHR2'. " 会计凭证PERFORM frm_set_param_id USING 'BLN' 'BELNR2' CHANGING lv_tag.PERFORM frm_set_param_id USING 'BUK' 'BUKRS2' CHANGING lv_tag.PERFORM frm_set_param_id USING 'GJR' 'GJAHR2' CHANGING lv_tag.
* PERFORM frm_turnto_tcode USING 'FB03' CHANGING lv_tag.SET PARAMETER ID 'GLN_FLEX' FIELD '0L'.CALL TRANSACTION 'IDCNFB03'.
*==================================== PM 设备 =========================WHEN 'EQUNR' OR 'EQKTX'. " 设备号PERFORM frm_set_param_id USING 'EQN' 'EQUNR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'IE03' CHANGING lv_tag.WHEN 'PLNNR' OR 'PLNTY' OR 'PLNAL'. " 设备任务清单PERFORM frm_set_param_id USING 'PLN' 'PLNNR' CHANGING lv_tag.PERFORM frm_set_param_id USING 'PTY' 'PLNTY' CHANGING lv_tag.PERFORM frm_set_param_id USING 'PAL' 'PLNAL' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'IA07' CHANGING lv_tag.
*==================================== PM 设备维修 =====================WHEN 'PLNUM'. " 计划订单PERFORM frm_set_param_id USING 'PAF' 'PLNUM' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'MD13' CHANGING lv_tag.WHEN 'AUFNR'. " 内部订单PERFORM frm_set_param_id USING 'ANR' 'AUFNR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'KO03' CHANGING lv_tag.
* PERFORM frm_turnto_tcode USING 'IW33' CHANGING lv_tag.
* WHEN 'AUFNR'. " 生产订单
* PERFORM frm_set_param_id USING 'ANR' 'AUFNR' CHANGING lv_tag.
* PERFORM frm_turnto_tcode USING 'CO03' CHANGING lv_tag.WHEN 'QMNUM'. " 通知单PERFORM frm_set_param_id USING 'IQM' 'QMNUM' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'IW23' CHANGING lv_tag.WHEN 'RSNUM'. " 预留PERFORM frm_set_param_id USING 'RES' 'RSNUM' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'MB23' CHANGING lv_tag.
*==================================== PS 项目管理 =====================WHEN 'PSPHI'. " 项目 SET PARAMETER ID 'PSP' FIELD ''.SET PARAMETER ID 'PRO' FIELD ''.PERFORM frm_set_param_id_proj USING 'PSP' 'PSPHI'CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'CJ03'CHANGING lv_tag.WHEN 'PSPNR' OR 'PSPNR1' OR 'PSPNR2' OR 'PSPNR3'. " WBS 要素SET PARAMETER ID 'PSP' FIELD ''.SET PARAMETER ID 'PRO' FIELD ''.PERFORM frm_set_param_id_pspnr USING 'PRO' im_filecat-fieldnameCHANGING lv_tag.PERFORM frm_turnto_tcode USING 'CJ03'CHANGING lv_tag.WHEN 'POSKI' OR 'POSKI1' OR 'POSKI2' OR 'POSKI3'. " WBS 要素SET PARAMETER ID 'PSP' FIELD ''.SET PARAMETER ID 'PRO' FIELD ''.PERFORM frm_set_param_id USING 'PRO' im_filecat-fieldnameCHANGING lv_tag.PERFORM frm_turnto_tcode USING 'CJ03'CHANGING lv_tag.
*==================================== 其它 ============================WHEN 'DOKNR'. " 凭证编号PERFORM frm_set_param_id USING 'CV1' 'DOKNR' CHANGING lv_tag.PERFORM frm_set_param_id USING 'CV2' 'DOKAR' CHANGING lv_tag.PERFORM frm_set_param_id USING 'CV4' 'DOKTL' CHANGING lv_tag.PERFORM frm_set_param_id USING 'CV3' 'DOKVR' CHANGING lv_tag.PERFORM frm_turnto_tcode USING 'CV03N' CHANGING lv_tag.WHEN OTHERS.ex_tag = 1.ENDCASE.
ENDFORM. " frm_alv_dbclick*&---------------------------------------------------------------------*
*& Form FRM_SET_PARAM_ID
*&---------------------------------------------------------------------*
* 设置 Parameter ID
*----------------------------------------------------------------------*
FORM frm_set_param_id USING im_parameterid TYPE cim_fieldname TYPE cCHANGING ex_tag TYPE i.IF ex_tag <> 0.RETURN.ENDIF.ASSIGN COMPONENT im_fieldname OF STRUCTURE TO .IF sy-subrc <> 0.ex_tag = 1.RETURN.ENDIF.IF IS INITIAL.ex_tag = 2.RETURN.ENDIF.SET PARAMETER ID im_parameterid FIELD .ENDFORM. " frm_set_PARAM_id*&---------------------------------------------------------------------*
*& Form FRM_SET_PARAM_ID_PSPNR
*&---------------------------------------------------------------------*
* 设置 Parameter ID
*----------------------------------------------------------------------*
FORM frm_set_param_id_pspnr USING im_parameterid TYPE cim_fieldname TYPE cCHANGING ex_tag TYPE i.DATA: lv_poski TYPE char40.IF ex_tag <> 0.RETURN.ENDIF.ASSIGN COMPONENT im_fieldname OF STRUCTURE <gdf_alv_line>TO <gdf_alv_value>.IF sy-subrc <> 0.ex_tag = 1.RETURN.ENDIF.IF <gdf_alv_value> IS INITIAL.ex_tag = 2.RETURN.ENDIF.lv_poski = <gdf_alv_value>.CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'EXPORTINGinput = <gdf_alv_value>IMPORTINGoutput = lv_poski.SET PARAMETER ID im_parameterid FIELD lv_poski.ENDFORM. " FRM_SET_PARAM_ID_PSPNR*&---------------------------------------------------------------------*
*& Form FRM_SET_PARAM_ID_PROJ
*&---------------------------------------------------------------------*
* 设置 Parameter ID
*----------------------------------------------------------------------*
FORM frm_set_param_id_proj USING im_parameterid TYPE cim_fieldname TYPE cCHANGING ex_tag TYPE i.DATA: lv_poski TYPE char40.IF ex_tag <> 0.RETURN.ENDIF.ASSIGN COMPONENT im_fieldname OF STRUCTURE TO .IF sy-subrc <> 0.ex_tag = 1.RETURN.ENDIF.IF IS INITIAL.ex_tag = 2.RETURN.ENDIF.CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT'EXPORTINGinput = IMPORTINGoutput = lv_poski.SET PARAMETER ID im_parameterid FIELD lv_poski.
ENDFORM. " FRM_SET_PARAM_ID_PROJ*&---------------------------------------------------------------------*
*& Form frm_turnto_tcode
*&---------------------------------------------------------------------*
* 跳转到指定的tcode
*----------------------------------------------------------------------*
FORM frm_turnto_tcode USING im_tcode TYPE cCHANGING ex_tag TYPE i.IF ex_tag <> 0.RETURN.ENDIF.CALL TRANSACTION im_tcode AND SKIP FIRST SCREEN .
ENDFORM. " frm_turnto_tcode*&---------------------------------------------------------------------*
*& Form frm_update_shorttxt
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_update_shorttxt USING im_fname TYPE lvc_s_fcat-fieldnameim_descp TYPE lvc_s_fcat-scrtext_s.READ TABLE gdt_alv_fieldcat_lvc INTO gds_alv_fieldcat_lvcWITH KEY fieldname = im_fname.IF sy-subrc = 0.gds_alv_fieldcat_lvc-scrtext_s = im_descp.MODIFY gdt_alv_fieldcat_lvcFROM gds_alv_fieldcat_lvcINDEX sy-tabix.ENDIF.
ENDFORM. " frm_update_shorttxt*&---------------------------------------------------------------------*
*& Form FRM_ADD_MSG
*&---------------------------------------------------------------------*
* 添加消息
*----------------------------------------------------------------------*
FORM frm_add_msg USING im_msg TYPE cCHANGING ex_msg TYPE c.IF ex_msg IS INITIAL.ex_msg = im_msg.ELSE.CONCATENATE ex_msg im_msg INTO ex_msg SEPARATED BY '; '.ENDIF.
ENDFORM. " FRM_ADD_MSG*&---------------------------------------------------------------------*
*& Form FRM_ADD_MSG2
*&---------------------------------------------------------------------*
* 添加消息
*----------------------------------------------------------------------*
FORM frm_add_msg2 USING im_msg TYPE cCHANGING ex_msg TYPE c.IF ex_msg IS INITIAL.ex_msg = im_msg.ELSE.CONCATENATE im_msg ex_msg INTO ex_msg SEPARATED BY '; '.ENDIF.
ENDFORM. " FRM_ADD_MSG2*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_FIELD
*&---------------------------------------------------------------------*
* 输出文本
*----------------------------------------------------------------------*
FORM frm_output_field USING im_document TYPE REF TO cl_dd_documentim_index TYPE iim_text TYPE sdydo_text_elementim_value TYPE sdydo_text_element.IF im_index > 0.CALL METHOD im_document->add_gapEXPORTINGwidth = im_index.ENDIF.CALL METHOD im_document->add_textEXPORTINGtext = im_textsap_fontsize = cl_dd_document=>smallsap_emphasis = 'Strong'.CALL METHOD im_document->add_textEXPORTINGtext = im_valuesap_color = cl_dd_document=>list_total_intsap_fontsize = cl_dd_document=>small
* sap_fontstyle = cl_dd_document=>serifsap_emphasis = cl_dd_document=>emphasis. "加粗还是斜体 STRONG是加粗ENDFORM. " FRM_OUTPUT_FIELD
INCLUDE zfile 详细代码如下:
*&---------------------------------------------------------------------*
*& 包含 ZFILE
*&---------------------------------------------------------------------**----------------------------------------------------------------------*
* 程序名称: 文件操作公用包含程序段
* 作者 : www
* 时间 : 2013-04-22
* 模块 : 通用
* 描述 : 文件操作常用变量定义等
* 特殊特性: 无
*----------------------------------------------------------------------*
* 修改记录:
* 作者 时间 描述 请求号
* ------ ---------- ---------------------------------------- ----------*
*
*----------------------------------------------------------------------**----------------------------------------------------------------------*
* 定义结构;
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_file_data,line TYPE i,f01 TYPE text255,f02 TYPE text255,f03 TYPE text255,f04 TYPE text255,f05 TYPE text255,f06 TYPE text255,f07 TYPE text255,f08 TYPE text255,f09 TYPE text255,f10 TYPE text255,f11 TYPE text255,f12 TYPE text255,f13 TYPE text255,f14 TYPE text255,f15 TYPE text255,f16 TYPE text255,f17 TYPE text255,f18 TYPE text255,f19 TYPE text255,f20 TYPE text255,f21 TYPE text255,f22 TYPE text255,f23 TYPE text255,f24 TYPE text255,f25 TYPE text255,f26 TYPE text255,f27 TYPE text255,f28 TYPE text255,f29 TYPE text255,f30 TYPE text255,f31 TYPE text255,f32 TYPE text255,f33 TYPE text255,f34 TYPE text255,f35 TYPE text255,f36 TYPE text255,f37 TYPE text255,f38 TYPE text255,f39 TYPE text255,f40 TYPE text255,f41 TYPE text255,f42 TYPE text255,f43 TYPE text255,f44 TYPE text255,f45 TYPE text255,f46 TYPE text255,f47 TYPE text255,f48 TYPE text255,f49 TYPE text255,f50 TYPE text255,END OF ty_file_data.DATA: gs_ifile TYPE ty_file_data,gt_ifile TYPE TABLE OF ty_file_data,gs_efile TYPE ztool_exceltabline, " 读入的Excel文件gt_efile TYPE TABLE OF ztool_exceltabline.FIELD-SYMBOLS: .*&---------------------------------------------------------------------*
*& Form FRM_FILE_INIT
*&---------------------------------------------------------------------*
* FILE 初始化
*----------------------------------------------------------------------*
FORM frm_file_init .CLEAR: gt_efile, gt_ifile.REFRESH: gt_efile, gt_ifile.ENDFORM. " FRM_FILE_INIT*&--------------------------------------------------------------------*
*& Form frm_read_excel_files
*&--------------------------------------------------------------------*
* 读取 Excel 文件
*---------------------------------------------------------------------*
FORM frm_read_excel_files USING im_ifile TYPE ibipparms-pathim_maxcolumn TYPE iim_maxline TYPE i.CLEAR: gt_efile.REFRESH: gt_efile.* 第一行作为标题行,不读。
* 最大行数为 6万5千 行CALL FUNCTION 'ZTOOL_EXCEL_FROM_FILE_TO_ITAB'EXPORTINGfilename = im_ifilei_begin_col = 1i_begin_row = 1i_end_col = im_maxcolumni_end_row = im_maxlineTABLESintern = gt_efileEXCEPTIONSinconsistent_parameters = 1upload_ole = 2OTHERS = 3.ENDFORM. " frm_read_excel_user*&--------------------------------------------------------------------*
*& Form frm_build_excel_data
*&--------------------------------------------------------------------*
* 整理读入的数据
*---------------------------------------------------------------------*
FORM frm_build_excel_data USING im_startrow TYPE iim_startcol TYPE i.DATA: lv_tag TYPE i,lv_num2 TYPE numc2,lv_fieldname TYPE char20.CLEAR: gt_ifile.REFRESH: gt_ifile.SORT gt_efile BY row col.LOOP AT gt_efile INTO gs_efile WHERE row >= im_startrow.* 每行初始化AT NEW row.lv_tag = 0.CLEAR: gs_ifile.gs_ifile-line = gs_efile-row.ENDAT.CONDENSE gs_efile-value.* 按列号赋值lv_num2 = gs_efile-col.CONCATENATE 'GS_IFILE-F' lv_num2 INTO lv_fieldname.ASSIGN (lv_fieldname) TO . = gs_efile-value.IF gs_efile-col >= im_startcol.IF gs_efile-value IS NOT INITIAL.ADD 1 TO lv_tag.ENDIF.ENDIF.AT END OF row.DO 1 TIMES.IF gs_ifile-f01 = '例'. EXIT. ENDIF.IF gs_ifile-f01 = '样例'. EXIT. ENDIF.IF gs_ifile-f01 = '样例行'. EXIT. ENDIF.IF lv_tag = 0. EXIT. ENDIF.APPEND gs_ifile TO gt_ifile.CLEAR:gs_ifile.ENDDO.ENDAT.CLEAR:lv_num2,lv_fieldname.ENDLOOP.CLEAR: gt_efile.REFRESH: gt_efile.ENDFORM. " frm_build_excel_data*&---------------------------------------------------------------------*
*& Form frm_check_length
*&---------------------------------------------------------------------*
* 长度验证
*----------------------------------------------------------------------*
FORM frm_check_length USING im_flag TYPE iim_value TYPE cim_desc TYPE cim_len TYPE iCHANGING ex_value TYPE cex_tag TYPE iex_msg TYPE text255.DATA: lv_len TYPE i,lv_num TYPE text255,lv_temp TYPE text255.ex_tag = 0.IF im_value IS INITIAL.IF im_flag = 0.RETURN.ELSE.ex_tag = 1.CONCATENATE '“' im_desc '”不能为空' INTO lv_temp.PERFORM frm_add_msg USING lv_temp CHANGING ex_msg.RETURN.ENDIF.ENDIF.lv_len = strlen( im_value ).IF lv_len > im_len.ex_tag = 1.lv_num = im_len. CONDENSE lv_num.CONCATENATE '“' im_desc '”长度不能大于' INTO lv_temp.CONCATENATE lv_temp lv_num '位!' INTO lv_temp SEPARATED BY space.PERFORM frm_add_msg USING lv_temp CHANGING ex_msg.RETURN.ELSE.ex_value = im_value.ENDIF.ENDFORM. " frm_check_length*&---------------------------------------------------------------------*
*& Form FRM_CHECK_NUMBER
*&---------------------------------------------------------------------*
* 检查是否数字
*----------------------------------------------------------------------*
FORM frm_check_number USING im_value TYPE cim_desc TYPE cCHANGING ex_value TYPE cex_tag TYPE iex_msg TYPE c.DATA: lv_temp TYPE text255.CLEAR ex_value.ex_tag = 0.CALL FUNCTION 'ZTOOL_GET_NUMCHAR'EXPORTINGim_char = im_valueIMPORTINGex_char = ex_valueEXCEPTIONSnot_number = 1OTHERS = 2.IF sy-subrc <> 0.ex_tag = 1.CONCATENATE '“' im_desc '”不是数字' INTO lv_temp.PERFORM frm_add_msg USING lv_temp CHANGING ex_msg.ENDIF.ENDFORM. " FRM_CHECK_NUMBER*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATE
*&---------------------------------------------------------------------*
* 检查日期
*----------------------------------------------------------------------*
* 输入的日期格式: YYYYMMDD / YYYY-MM-DD / YYYY.MM.DD / YYYY/MM/DD
*----------------------------------------------------------------------*
FORM frm_check_date USING im_value TYPE cim_desc TYPE cCHANGING ex_dat TYPE sydatumex_msg TYPE c.DATA: ldf_value TYPE char10,ldf_msg TYPE text255,ldf_datum TYPE sydatum,ldf_len TYPE i,ldf_year TYPE numc4,ldf_month TYPE numc2,ldf_day TYPE numc2.IF im_value IS INITIAL.RETURN.ENDIF.ldf_len = strlen( im_value ).IF ldf_len < 8.CONCATENATE im_desc '格式不正确!' INTO ldf_msg.PERFORM frm_add_msg USING ldf_msg CHANGING ex_msg.RETURN.ENDIF.CASE im_value+4(1).WHEN '-' OR '.' OR '/'.ldf_year = im_value+0(4).CASE im_value+6(1).WHEN '-' OR '.' OR '/'.ldf_month = im_value+5(1).ldf_day = im_value+7(2).WHEN OTHERS.ldf_month = im_value+5(2).ldf_day = im_value+8(2).ENDCASE.CONCATENATE ldf_year ldf_month ldf_day INTO ldf_datum.WHEN OTHERS.ldf_value = im_value.REPLACE ALL OCCURRENCES OF '-' IN ldf_value WITH ``.REPLACE ALL OCCURRENCES OF '.' IN ldf_value WITH ``.REPLACE ALL OCCURRENCES OF '/' IN ldf_value WITH ``.ldf_datum = ldf_value.ENDCASE.ldf_len = strlen( ldf_datum ).IF ldf_len <> 8.CONCATENATE im_desc '格式不正确!' INTO ldf_msg.PERFORM frm_add_msg USING ldf_msg CHANGING ex_msg.RETURN.ENDIF.CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'EXPORTINGdate = ldf_datumEXCEPTIONSplausibility_check_failed = 1OTHERS = 2.IF sy-subrc <> 0.CONCATENATE im_desc '格式不正确!' INTO ldf_msg.PERFORM frm_add_msg USING ldf_msg CHANGING ex_msg.ELSE.ex_dat = ldf_datum.ENDIF.ENDFORM. " FRM_CHECK_DATE
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
