ABAP-销售订单批导

************************************************************************
* FUNCTIION ID  : ZSDR_005
* DESCRIPTION   : 销售订单批量创建和修改
* AUTHOR        : BAIXIAOYU
* CREATE DATE   : 2018.06.23
* RELEASE FOR   : SAP S4
* 事务代码   : ZSD005
* ---------------------------------------------------------------------*
* VERSION CONTROL                                                      *
* DATE        AUTHOR     TRANSPORT        DESCRIPTION                  *
* ---------------------------------------------------------------------*
* 2018.06.23  BAIXIAOYU                   Initial Version
* 2018.12.21  lipeng                      version v3
************************************************************************
REPORT ZSDR_005 MESSAGE-ID ZSD00.

*--------------------------------------------------------------------*
*INCLUDING
*--------------------------------------------------------------------*
INCLUDE ZSDR_005_T01.
INCLUDE ZSDR_005_F01.

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

AT SELECTION-SCREEN.
  PERFORM Frm_DOWNXLS.
*IF PA_AUART IS INITIAL OR PA_VKORG IS INITIAL OR PA_WJM IS INITIAL  .
*MESSAGE '请输入凭证类型、销售组织和模板等项目!' TYPE 'E'.
*endif.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_WJM"弹出选择文件对话框
  PERFORM GET_FILENAME.

*--------------------------------------------------------------------*
*START OF SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.

*程序控制输入必输项
IF PA_AUART IS INITIAL OR PA_VKORG IS INITIAL OR PA_WJM IS INITIAL  .
  MESSAGE '请输入凭证类型、销售组织和模板等项目!' TYPE 'S'.
else.

*IF PA_AUART IS INITIAL OR PA_VKORG IS INITIAL or PA_WJM IS INITIAL  .
*  MESSAGE '请输入凭证类型、销售组织和模板等项目!' TYPE 'E'.
*ELSE.
* 按钮判断
  IF RB_01 'X'.
"Edit 2018.12.20 by li 调整上传再检查权限
*检查订单类型和模板是否一致
*    PERFORM UPLOAD_CHECK.

*add 2018.12.21 by li 根据订单类型选择上传数据
    IF PA_AUART 'ZSOR' or
       PA_AUART 'ZSZJ' or
       PA_AUART 'ZSTJ' or
       PA_AUART 'ZSFW' OR
       PA_AUART 'ZM08'.
* 上传数据表一
    PERFORM DATA_UPLOAD_C.
    ELSEIF PA_AUART 'ZCR' OR PA_AUART 'ZDR'.
    PERFORM DATA_UPLOAD_CS.
    ENDIF.
** 上传数据表一
*    PERFORM DATA_UPLOAD_C.
* 权限检查
    PERFORM FRM_CHECK_AUTH_C.
** 上传数据表一
*    PERFORM DATA_UPLOAD_C.
* 调bapi创建,根据不同订单类型选择Bapi
     PERFORM DATA_CREATE.
* 进行结果展示
    PERFORM RESULT_DISPLAY.
  ELSEIF RB_02 'X'.
* 上传数据表二
    PERFORM DATA_UPLOAD_M.
* 权限检查
    PERFORM FRM_CHECK_AUTH_U.
** 上传数据表二
*    PERFORM DATA_UPLOAD_M.
* 调bapi修改
    PERFORM DATA_MODIFY.
* 进行结果展示
    PERFORM RESULT_DISPLAY.

  ENDIF.
ENDIF.
*  ENDIF.

 

INCLUDE ZSDR_005_T01.

*&---------------------------------------------------------------------*
*& 包含               ZQMR_006_T01
*&---------------------------------------------------------------------*
tables: SSCRFIELDS, VBAPVB, VBAK, KNA1, VBPA, VBKD, KOMV.


*--------------------------------------------------------------------*
*ALV
*--------------------------------------------------------------------*
type-pools: SLIS,ICON,OLE2.

*销售订单创建
typesbegin of TY_CREATE,

         ZDDXH      type NUMC5,                   "订单序号
**<<<Add 2018.12.12 by li start
         VTWEG      type VBAK-VTWEG"渠道
         SPART      type VBAK-SPART"产品组
**>>>Add 2018.12.12 by li end
         ZDDHH      type NUMC3,                   "订单行号
         UPDKZ_KALK type VBAPVB-UPDKZ_KALK,       "更新标志
         KUNNR1     type VBAK-KUNNR,              "客户
         NAME1      type KNA1-NAME1,              "客户名称
         KUNNR2     type VBPA-KUNNR,              "送达方
         NAME2      type KNA1-NAME1,              "送达方名称
         BSTKD      type VBKD-BSTKD,              "项目名称
         AUDAT      type VBAK-AUDAT,              "凭证日期
         VDATU      type VBAK-VDATU,              "计划交货日期
         ZTERM      type VBKD-ZTERM,              "收款条件
         AUGRU      type VBAK-AUGRU,              "订货原因 "Add2018.12.21 by li
         PRSDT      type VBKD-PRSDT,              "定价日期
         PLTYP      type VBKD-PLTYP,              "价格清单
         ZZCARNU    type VBAK-ZZCARNU,            "车号
         ZZPCJHD    type VBAK-ZZPCJHD,            "派车单号

         TEXT1      type CHAR255,

         WAERK      type VBAK-WAERK,              "货币单位
         MATNR      type VBAP-MATNR,              "物料编号
         ARKTX      type VBAP-ARKTX,              "物料描述
         KWMENG     type VBAP-KWMENG,             "订单数量
         VRKME      type VBAP-VRKME,              "销售计量单位
         KSCHL      type KOMV-KSCHL,              "定价条件
         KBETR      type KOMV-KBETR,              "单价(含税)
*<<<Add 2018.12.28 by li start 增加折扣
         MVGR2      type VBAP-MVGR2,              "附加数据 折扣
*>>>Add 2018.12.28 by li end
         KMEIN      type KOMV-KMEIN,              "定价单位
         ZZWIDTH    type VBAP-ZZWIDTH,            "宽(mm)
         ZZHEIGHT   type VBAP-ZZHEIGHT,           "高(mm)
         ZZAREA     type VBAP-ZZAREA,             "面积(m2)
         ZZNOP      type VBAP-ZZNOP,              "片数
         ZZWINNU    type VBAP-ZZWINNU,            "窗型编号
         ZZWINPL    type VBAP-ZZWINPL,            "窗型位置
         ZZYXX      type VBAP-ZZYX,               "异性(x)
         ZZYPX      type VBAP-ZZYP,               "异片(x)
         ZZDKQ      type VBAP-ZZDKQ,              "打孔数量
         ZZKJQ      type VBAP-ZZKJQ,              "开角数量
         ZZBQ       type VBAP-ZZBQ,               "标签
         ZZYX       type VBAP-ZZYX,               "异性  "不导入
         ZZYP       type VBAP-ZZYP,               "异片  "不导入

         ZZVBELN_U8 type VBAP-ZZVBELN_U8,         "u8销售订单
         ZZPOSNR_U8 type VBAP-ZZPOSNR_U8,         "u8销售行项目

         TEXT2      type CHAR255,
         VSTEL      type VBAP-VSTEL,
         ZCH        TYPE ZZCH,
       end of TY_CREATE,
*销售订单修改
       begin of TY_UPDATE,

         VBELN      type VBAP-VBELN,              "销售订单
         POSNR      type VBAP-POSNR,              "销售订单行号
**<<<Add 2018.12.20 by li start
         VTWEG      type VBAK-VTWEG"渠道
         SPART      type VBAK-SPART"产品组
**>>>Add 2018.12.20 by li end
         UPDKZ_KALK type VBAPVB-UPDKZ_KALK,       "更新标志
         MATNR      type VBAP-MATNR,              "物料编号
         ARKTX      type VBAP-ARKTX,              "物料描述
         ZZNOP      type VBAP-ZZNOP,              "片数
         KBETR      type KOMV-KBETR,              "单价(含税)
         KMEIN      type KOMV-KMEIN,              "定价单位

       end of TY_UPDATE,

*执行结果
       begin of TY_RETURN,

         ZDDXH      type CHAR10,                  "订单序号
         ZDDHH(6)   type N,                       "订单行号
         ZXXWB(220type C,                       "消息文本
         ZZSD       type ICON_D,                   "指示灯
         ZERR       type CHAR1,                   "错误标识

       end of TY_RETURN.

*--------------------------------------------------------------------*
*INTERNAL TABLE
*--------------------------------------------------------------------*
data: GT_CREATE   type standard table of TY_CREATE,
      GT_CREATES  type standard table of TY_CREATE,
      GT_UPDATE   type standard table of TY_UPDATE,
      GT_RETURN   type standard table of TY_RETURN,
      GT_FIELDCAT type SLIS_T_FIELDCAT_ALV.

*<<<Add 2018.12.20 by li start
data:LS_CREATE  type TY_CREATE,
     LS_CREATES type TY_CREATE,
     LS_UPDATE  type TY_UPDATE.
data: P_FILE1  type STRING,
      P_FILE2  type STRING,
      P_FILE3  type STRING,
      L_FILE   type STRING,
      L_RESULT type STRING.

data: WWWDATA_NEW like WWWDATATAB.

data: LV_LEN type I,
      LV_BEN type I.

*>>>Add 2018.12.20 by li end

*--------------------------------------------------------------------*
*SELECTION SCREEN
*--------------------------------------------------------------------*
selection-screen begin of block BL01 with frame title text-001.

parameters:
* 订单类型
  PA_AUART type VBAK-AUART" OBLIGATORY, "Edit 2018.12.21 by li
* 销售组织
  PA_VKORG type VBAK-VKORG" OBLIGATORY. "Edit 2018.12.21 by li
* 分销渠道
*  PA_VTWEG TYPE VBAK-VTWEG OBLIGATORY, "Edit 2018.12.21 by li
* 产品组
*  PA_SPART TYPE VBAK-SPART OBLIGATORY. "Edit 2018.12.21 by li

selection-screen end of block BL01.

selection-screen begin of block BL02 with frame title text-002.

parameters:
* 上传文件名
  PA_WJM type RLGRAP-FILENAME." OBLIGATORY. "Edit 2018.12.26

selection-screen end of block BL02.

selection-screen begin of block BL03 with frame title text-003.

parameters:
*创建订单
  RB_01 type CHAR1 radiobutton group RB modif id A1,
** 创建借贷销售凭证
*  RB_02 TYPE CHAR1 RADIOBUTTON GROUP RB,
* 更新
  RB_02 type CHAR1 radiobutton group RB.

selection-screen end of block BL03.
*<<<Add 2018.12.20 by li start
selection-screenfunction key 1.
selection-screenfunction key 2.
selection-screenfunction key 3.
*>>>Add 2018.12.20 by li end
*--------------------------------------------------------------------*
*INITIALZATION
*--------------------------------------------------------------------*
initialization.
*<<<Add 2018.12.20 by li start 增加下载模板功能
  SSCRFIELDS-FUNCTXT_01 '标准模板下载'.
  SSCRFIELDS-FUNCTXT_02 '借贷项订单模板下载'.
  SSCRFIELDS-FUNCTXT_03 '订单修改模板下载'.
  P_FILE1 'C:\sapbill\ZSD005ZSOR.xls'.
  P_FILE2 'C:\sapbill\ZSD005ZCDR.xls'.
  P_FILE3 'C:\sapbill\ZSD005.xls'.
*>>>Add 2018.12.20 by li end

 

INCLUDE ZSDR_005_F01.

*&---------------------------------------------------------------------*
*& 包含               ZSDR_005_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_FILENAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form GET_FILENAME .
  data:
     LV_FILE  type STRING.

  call function 'WS_FILENAME_GET'
    exporting
      MASK             '*.xls;*.xlsx'
      TITLE            '选择文件'
    importing
      FILENAME         = LV_FILE
    exceptions
      INV_WINSYS       1
      NO_BATCH         2
      SELECTION_CANCEL 3
      SELECTION_ERROR  4
      others           5.

  if SY-SUBRC 0.
    PA_WJM = LV_FILE.
  endif.

  if PA_WJM is initial.
    exit.
  endif.
endform.
*&---------------------------------------------------------------------*
*& Form DATA_UPLOAD_C
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form DATA_UPLOAD_C .
  data: LT_DATA type standard table of ALSMEX_TABLINE,
        LS_DATA type ALSMEX_TABLINE,
*        LS_CREATE TYPE TY_CREATE,
        LS_RAW  type TRUXS_T_TEXT_DATA.

  call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容
    exporting
      FILENAME    = PA_WJM
      I_BEGIN_COL '1'
      I_BEGIN_ROW '2'
      I_END_COL   '43'
      I_END_ROW   '5000'
    tables
      INTERN      = LT_DATA.

* 将上传数据的值,传入到内表
  loop at LT_DATA into LS_DATA.
    case LS_DATA-COL.
*<<<Add 2018.12.19 by li start
      when 1.
        LS_CREATE-VTWEG          = LS_DATA-VALUE"分销渠道
      when 2.
        LS_CREATE-SPART          = LS_DATA-VALUE.  "产品组
*>>>Add 2018.12.19 by li end
      when 3.
        LS_CREATE-ZDDXH          = LS_DATA-VALUE.
      when 4.
        LS_CREATE-ZDDHH          = LS_DATA-VALUE.
      when 5.
        LS_CREATE-UPDKZ_KALK     = LS_DATA-VALUE.
      when 6.
        LS_CREATE-KUNNR1         = LS_DATA-VALUE.
      when 7.
        LS_CREATE-NAME1          = LS_DATA-VALUE.
      when 8.
        LS_CREATE-KUNNR2         = LS_DATA-VALUE.
      when 9.
        LS_CREATE-NAME2          = LS_DATA-VALUE.
      when 10.
        LS_CREATE-BSTKD          = LS_DATA-VALUE.
      when 11.
        LS_CREATE-AUDAT          = LS_DATA-VALUE.
      when 12.
        LS_CREATE-VDATU          = LS_DATA-VALUE.
      when 13.
        LS_CREATE-PRSDT          = LS_DATA-VALUE.
      when 14.
        LS_CREATE-PLTYP          = LS_DATA-VALUE.
      when 15.
        LS_CREATE-ZTERM          = LS_DATA-VALUE.
      when 16.
        LS_CREATE-ZZCARNU        = LS_DATA-VALUE.
      when 17.
        LS_CREATE-ZZPCJHD        = LS_DATA-VALUE.
      when 18.
        LS_CREATE-TEXT1          = LS_DATA-VALUE.
      when 19.
        LS_CREATE-WAERK          = LS_DATA-VALUE.
      when 20.
        LS_CREATE-MATNR          = LS_DATA-VALUE.
      when 21.
        LS_CREATE-ARKTX          = LS_DATA-VALUE.
      when 22.
        LS_CREATE-KWMENG         = LS_DATA-VALUE.
      when 23.
        LS_CREATE-VRKME          = LS_DATA-VALUE.
      when 24.
        LS_CREATE-KSCHL          = LS_DATA-VALUE.
      when 25.
        LS_CREATE-KBETR          = LS_DATA-VALUE.
*<<<Add 2018.12.28 by li start 增加折扣
      when 26.
        LS_CREATE-MVGR2          = LS_DATA-VALUE.
*>>>Add 2018.12.28 by li end
      when 27.
        LS_CREATE-KMEIN          = LS_DATA-VALUE.
      when 28.
        LS_CREATE-ZZWIDTH        = LS_DATA-VALUE.
      when 29.
        LS_CREATE-ZZHEIGHT       = LS_DATA-VALUE.
      when 30.
        LS_CREATE-ZZAREA         = LS_DATA-VALUE.
      when 31.
        LS_CREATE-ZZNOP          = LS_DATA-VALUE.
      when 32.
        LS_CREATE-ZZWINNU        = LS_DATA-VALUE.
      when 33.
        LS_CREATE-ZZWINPL        = LS_DATA-VALUE.
      when 34.
        LS_CREATE-ZZYXX          = LS_DATA-VALUE.
      when 35.
        LS_CREATE-ZZYPX          = LS_DATA-VALUE.
      when 36.
        LS_CREATE-ZZDKQ          = LS_DATA-VALUE.
      when 37.
        LS_CREATE-ZZKJQ          = LS_DATA-VALUE.
      when 38.
        LS_CREATE-ZZBQ           = LS_DATA-VALUE.
      when 39.
        LS_CREATE-ZZVBELN_U8     = LS_DATA-VALUE.
      when 40.
        LS_CREATE-ZZPOSNR_U8     = LS_DATA-VALUE.
      when 41.
        LS_CREATE-TEXT2      = LS_DATA-VALUE.
      when 42.
        LS_CREATE-VSTEL      = LS_DATA-VALUE.    "装运点
      when 43.
        LS_CREATE-ZCH      = LS_DATA-VALUE.    "车队车号
    endcase.
    at end of ROW.
      append LS_CREATE to GT_CREATE.
      clear: LS_DATA, LS_CREATE.
    endat.
  endloop.
endform.
*&---------------------------------------------------------------------*
*& Form DATA_UPDATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form DATA_CREATE.

* 销售订单相关定义
  data: LS_HEAD_C        type TY_CREATE,                      "BAPI台头工作区
        LS_HEAD          type BAPISDHD1,                      "bapi表头

        LS_LOGIC_SWITCH  type BAPISDLS,

        LT_HEAD_QC       type standard table of TY_CREATE,
        LS_HEAD_QC       type TY_CREATE,

        LS_ITEM_C        type TY_CREATE,                      "BAPI行项目工作区
        LT_ITEM          type table of BAPISDITM,             "bapi行项目表        LS_ITEM          
type BAPISDITM,                      "bapi行项目表工作区        LT_SCHDL         

type standard table of BAPISCHDL,    "交付计划        LS_SCHDL         
type BAPISCHDL,        LT_PARTNER       

type standard table of BAPIPARNR,    "业务伙伴        LS_PARTNER       
type BAPIPARNR,        LT_COND          

type standard table of BAPICOND,     "定价        LS_COND          
type BAPICOND,        LT_CONDX         

type standard table of BAPICONDX,        LS_CONDX         
type BAPICONDX,        LT_TEXT          

type table of BAPISDTEXT,               "备注导入表        LS_TEXT          
type BAPISDTEXT,                        "备注导入工作区        M_IT_EXTENSIONIN 

type table of BAPIPAREX,        LWA_EXTENSIONIN  
type BAPIPAREX,        LWA_BAPE_VBAP    
type BAPE_VBAP,        LWA_BAPE_VBAPX   
type BAPE_VBAPX,        LWA_BAPE_VBAK    
type BAPE_VBAK,        LWA_BAPE_VBAKX   
type BAPE_VBAKX,        LT_RETURN        

type table of BAPIRET2,        LS_RETURN        
type BAPIRET2,                          "bapi返回信息工作区        LS_ALV           
type TY_RETURN,        EV_VBELN         
type VBELN,        LV_BL1           
type CHAR10,        LV_BL2           
type CHAR10,        LV_BL3           
type CHAR18,        LV_BL4           
type CHAR18,        LV_MSEHI         
type T006A-MSEHI.


*--------------------------------------------------------------------*排序去重  LT_HEAD_QC[] 
= GT_CREATE[].  

sort LT_HEAD_QC by ZDDXH ZDDHH ascending.  
delete adjacent duplicates from LT_HEAD_QC comparing ZDDXH.  

loop at LT_HEAD_QC into LS_HEAD_QC.    
if LS_HEAD_QC-UPDKZ_KALK 'I'.
*--------------------------------------------------------------------*赋值抬头数据      
clear LS_HEAD.      LS_HEAD
-DOC_TYPE      = PA_AUART.                  "订单类型      LS_HEAD
-SALES_ORG     = PA_VKORG.                  "销售组织
*<<<Edit(del) 2018.12.20 by li start
*      LS_HEAD-DISTR_CHAN    = PA_VTWEG.                  "分销渠道
*      LS_HEAD-DIVISION      = PA_SPART.                  "产品组
*>>>Edit(del) 2018.12.20 by li end      LS_HEAD
-DISTR_CHAN    = LS_HEAD_QC-VTWEG.          "分销渠道      LS_HEAD
-DIVISION      = LS_HEAD_QC-SPART.          "产品组      LS_HEAD
-DOC_DATE      = LS_HEAD_QC-AUDAT.          "凭证日期      LS_HEAD
-PMNTTRMS      = LS_HEAD_QC-ZTERM.          "收款条件      LS_HEAD
-REQ_DATE_H    = LS_HEAD_QC-VDATU.          "计划交货日期      LS_HEAD
-PURCH_NO_C    = LS_HEAD_QC-BSTKD.          "项目名称      LS_HEAD

-PRICE_DATE    = LS_HEAD_QC-PRSDT.      LS_HEAD
-PRICE_LIST    = LS_HEAD_QC-PLTYP.      LS_HEAD

-BILL_DATE     = LS_HEAD_QC-AUDAT.          " 开票日期      LS_HEAD
-ORD_REASON    = LS_HEAD_QC-AUGRU.          " 订单原因
*--------------------------------------------------------------------*赋值客户数据      
clear LS_PARTNER.      
refresh LT_PARTNER.      LS_PARTNER

-PARTN_ROLE 'AG'.      LV_BL1 

= LS_HEAD_QC-KUNNR1.      

call function 'CONVERSION_EXIT_ALPHA_INPUT'        
exporting          
INPUT  = LV_BL1        
importing          
OUTPUT = LV_BL2.      LS_PARTNER

-PARTN_NUMB = LV_BL2.      
append LS_PARTNER to LT_PARTNER.

*--------------------------------------------------------------------*赋值备注文本
* ID      LS_TEXT
-TEXT_ID 'V002'.
* 语言      LS_TEXT
-LANGU '1'.      LS_TEXT
-LANGU_ISO 'ZH'.
* 文本行      LS_TEXT
-TEXT_LINE = LS_HEAD_QC-TEXT1.      
append LS_TEXT to LT_TEXT.      
clear LS_TEXT.

*--------------------------------------------------------------------*赋值抬头增强字段      
clear: LWA_BAPE_VBAK,             LWA_BAPE_VBAKX
.      LWA_BAPE_VBAK

-ZZCARNU      =  LS_HEAD_QC-ZZCARNU.      LWA_BAPE_VBAKX
-ZZCARNU 'X'.      LWA_BAPE_VBAK
-ZZPCJHD      =  LS_HEAD_QC-ZZPCJHD.      LWA_BAPE_VBAKX
-ZZPCJHD 'X'.      
move 'BAPE_VBAK' to LWA_EXTENSIONIN-STRUCTURE.

*     call method      
call method CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C        
exporting          IM_VALUE     
= LWA_BAPE_VBAK        
importing          EX_CONTAINER 
= LWA_EXTENSIONIN-VALUEPART1.      
append LWA_EXTENSIONIN to  M_IT_EXTENSIONIN.      
clear LWA_EXTENSIONIN.      

move 'BAPE_VBAKX' to LWA_EXTENSIONIN-STRUCTURE.      
move LWA_BAPE_VBAKX to LWA_EXTENSIONIN-VALUEPART1.      
append LWA_EXTENSIONIN to M_IT_EXTENSIONIN.

*--------------------------------------------------------------------*赋值行项目数据      
loop at GT_CREATE into LS_ITEM_C where ZDDXH = LS_HEAD_QC-ZDDXH.        

clear LS_ITEM.        LS_ITEM
-ITM_NUMBER  = LS_ITEM_C-ZDDHH.        LS_ITEM
-CURRENCY    = LS_ITEM_C-WAERK.        

IF PA_AUART 'ZCR' OR PA_AUART 'ZDR'.          LS_ITEM
-TARGET_QTY = LS_ITEM_C-KWMENG.        
ENDIF.        LV_BL3 

= LS_ITEM_C-MATNR.        

call function 'CONVERSION_EXIT_ALPHA_INPUT'          
exporting            
INPUT  = LV_BL3          
importing            
OUTPUT = LV_BL4.        LS_ITEM

-MATERIAL    = LV_BL4.                   "物料编码        LS_ITEM
-SHORT_TEXT  = LS_ITEM_C-ARKTX.          "物料描述        

select single MSEHI          
from T006A          
into LV_MSEHI          
where MSEH3 = LS_ITEM_C-VRKME.        LS_ITEM

-SALES_UNIT  = LV_MSEHI.

**<-start by TerryGuo 28.01.2019 10:45:43 **************        LS_ITEM
-SHIP_POINT = LS_ITEM_C-VSTEL."装运点        
select SINGLE DWERK INTO LS_ITEM-PLANT        
FROM MVKE WHERE        MATNR 
= LS_ITEM-MATERIAL           
and  VKORG = PA_VKORG           
and VTWEG = LS_HEAD_QC-VTWEG          
."工厂
**<- end by TerryGuo ***********************************        
append LS_ITEM to LT_ITEM.        
clear LV_MSEHI.

*--------------------------------------------------------------------*赋值交付计划
*   行项目        LS_SCHDL
-ITM_NUMBER  = LS_ITEM_C-ZDDHH.
*   数量        LS_SCHDL
-REQ_QTY     = LS_ITEM_C-KWMENG.        
append LS_SCHDL to LT_SCHDL.        
clear LS_SCHDL.

*--------------------------------------------------------------------*赋值定价        
if LS_ITEM_C-KBETR is not initial.
*   行项目          LS_COND
-ITM_NUMBER  = LS_ITEM_C-ZDDHH.
*   定价条件          LS_COND
-COND_TYPE   = LS_ITEM_C-KSCHL.
*   单价          LS_COND
-COND_VALUE  = LS_ITEM_C-KBETR.          LS_COND
-CURRENCY 'CNY'.
*   定价单位          
select single MSEHI            
from T006A            
into LV_MSEHI            
where MSEH3 = LS_ITEM_C-KMEIN.          LS_COND

-COND_UNIT   = LV_MSEHI.          
append LS_COND to LT_COND.          
clear: LV_MSEHI, LS_COND.

*   CONDX          LS_CONDX
-ITM_NUMBER  = LS_ITEM_C-ZDDHH.          LS_CONDX
-UPDATEFLAG 'U'.          LS_CONDX
-COND_TYPE 'X'.          LS_CONDX
-CURRENCY 'X'.          LS_CONDX
-COND_VALUE 'X'.          LS_CONDX
-COND_UNIT 'X'.
**<-start by TerryGuo 06.11.2018 10:21:31 **************
*        APPEND LS_CONDX TO LT_CONDX.

**<- end by TerryGuo ***********************************          
clear LS_CONDX.        
endif.

*--------------------------------------------------------------------*增强字段        
clear: LWA_BAPE_VBAP,               LWA_BAPE_VBAPX
.        
"此处待处理借贷项业务?        LWA_BAPE_VBAP
-POSNR              =  LS_ITEM_C-ZDDHH.        LWA_BAPE_VBAP
-ZZWIDTH            =  LS_ITEM_C-ZZWIDTH.        LWA_BAPE_VBAP
-ZZHEIGHT           =  LS_ITEM_C-ZZHEIGHT.        LWA_BAPE_VBAP
-ZZAREA             =  LS_ITEM_C-ZZAREA.        LWA_BAPE_VBAP
-ZZNOP              =  LS_ITEM_C-ZZNOP.        LWA_BAPE_VBAP
-ZZWINNU            =  LS_ITEM_C-ZZWINNU.        LWA_BAPE_VBAP
-ZZWINPL            =  LS_ITEM_C-ZZWINPL.        LWA_BAPE_VBAP
-ZZYX               =  LS_ITEM_C-ZZYXX.        LWA_BAPE_VBAP
-ZZYP               =  LS_ITEM_C-ZZYPX.        LWA_BAPE_VBAP
-ZZDKQ              =  LS_ITEM_C-ZZDKQ.        LWA_BAPE_VBAP
-ZZKJQ              =  LS_ITEM_C-ZZKJQ.        LWA_BAPE_VBAP
-ZZBQ               =  LS_ITEM_C-ZZBQ.        LWA_BAPE_VBAP
-ZZVBELN_U8         =  LS_ITEM_C-ZZVBELN_U8.        LWA_BAPE_VBAP
-ZZPOSNR_U8         =  LS_ITEM_C-ZZPOSNR_U8.        LWA_BAPE_VBAP
-ZCH                =  LS_ITEM_C-ZCH.        LWA_BAPE_VBAPX

-POSNR            =  LS_ITEM_C-ZDDHH.        LWA_BAPE_VBAPX
-ZZWIDTH          =  'X'.        LWA_BAPE_VBAPX
-ZZHEIGHT         =  'X'.        LWA_BAPE_VBAPX
-ZZAREA           =  'X'.        LWA_BAPE_VBAPX
-ZZNOP            =  'X'.        LWA_BAPE_VBAPX
-ZZWINNU          =  'X'.        LWA_BAPE_VBAPX
-ZZWINPL          =  'X'.        LWA_BAPE_VBAPX
-ZZYX             =  'X'.        LWA_BAPE_VBAPX
-ZZYP             =  'X'.        LWA_BAPE_VBAPX
-ZZDKQ            =  'X'.        LWA_BAPE_VBAPX
-ZZKJQ            =  'X'.        LWA_BAPE_VBAPX
-ZZBQ             =  'X'.        LWA_BAPE_VBAPX
-ZZVBELN_U8       =  'X'.        LWA_BAPE_VBAPX
-ZZPOSNR_U8       =  'X'.        LWA_BAPE_VBAPX
-ZCH              =  'X'.        
move 'BAPE_VBAP' to LWA_EXTENSIONIN-STRUCTURE.

*     call method        
call method CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C          
exporting            IM_VALUE     
= LWA_BAPE_VBAP          
importing            EX_CONTAINER 
= LWA_EXTENSIONIN-VALUEPART1.        
append LWA_EXTENSIONIN to  M_IT_EXTENSIONIN.        
clear LWA_EXTENSIONIN.        

move 'BAPE_VBAPX' to LWA_EXTENSIONIN-STRUCTURE.        
move LWA_BAPE_VBAPX to LWA_EXTENSIONIN-VALUEPART1.        
append LWA_EXTENSIONIN to M_IT_EXTENSIONIN.

*--------------------------------------------------------------------*行备注
* 行号        LS_TEXT
-ITM_NUMBER  = LS_ITEM_C-ZDDHH.
* ID        LS_TEXT
-TEXT_ID '0004'.
* 语言        LS_TEXT
-LANGU '1'.        LS_TEXT
-LANGU_ISO 'ZH'.
* 文本行        LS_TEXT
-TEXT_LINE = LS_HEAD_QC-TEXT2.        
append LS_TEXT to LT_TEXT.        
clear LS_TEXT.      

endloop.

*--------------------------------------------------------------------*CALL BAPI      
if PA_AUART 'ZSOR'.       "Edit 2018.12.21        
call function 'BAPI_SALESORDER_CREATEFROMDAT2'          
exporting            ORDER_HEADER_IN      
= LS_HEAD          
importing            SALESDOCUMENT        
= EV_VBELN          
tables            
RETURN               = LT_RETURN            ORDER_ITEMS_IN       
= LT_ITEM            ORDER_PARTNERS       
= LT_PARTNER            ORDER_SCHEDULES_IN   
= LT_SCHDL            ORDER_CONDITIONS_IN  
= LT_COND            ORDER_CONDITIONS_INX 
= LT_CONDX            ORDER_TEXT           
= LT_TEXT            EXTENSIONIN          
= M_IT_EXTENSIONIN.      
else.   "Edit 2018.12.21
*<<<Add 2018.12.21 by li start        
call function 'SD_SALESDOCUMENT_CREATE'          
exporting            SALES_HEADER_IN     
= LS_HEAD          
importing            SALESDOCUMENT_EX    
= EV_VBELN          
tables            
RETURN              = LT_RETURN            SALES_ITEMS_IN      
= LT_ITEM            SALES_PARTNERS      
= LT_PARTNER            SALES_SCHEDULES_IN  
= LT_SCHDL            SALES_CONDITIONS_IN 
= LT_COND            SALES_TEXT          
= LT_TEXT            EXTENSIONIN         
= M_IT_EXTENSIONIN.      
endif.
*>>>Add 2018.12.21 by li end
*--------------------------------------------------------------------*判断是否成功      
read table LT_RETURN into LS_RETURN            
transporting no fields            
with key TYPE 'E'.      

if SY-SUBRC 0.        
call function 'BAPI_TRANSACTION_ROLLBACK'.        

loop at LT_RETURN into LS_RETURN          
where TYPE <> 'S'.          

concatenate LS_ALV-ZXXWB                      
'#'                      LS_RETURN
-MESSAGE                 
into LS_ALV-ZXXWB               
separated by SPACE.          LS_ALV
-ZDDXH = EV_VBELN.          LS_ALV
-ZDDHH = LS_HEAD_C-ZDDHH.          LS_ALV
-ZZSD  '@0A@'.          
append LS_ALV to GT_RETURN.          
clear LS_ALV.          
clear LS_RETURN.          
refresh: LT_ITEM[], LT_PARTNER[],                   LT_SCHDL[]
, LT_COND[],                   LT_TEXT[]
, M_IT_EXTENSIONIN[],                   LT_CONDX[]
.        
endloop.      

else.        
call function 'BAPI_TRANSACTION_COMMIT'          
exporting            
WAIT 'X'.        LS_ALV

-ZDDXH = EV_VBELN.        LS_ALV
-ZDDHH = LS_HEAD_C-ZDDHH.        LS_ALV
-ZZSD  '@08@'.        LS_ALV
-ZXXWB '创建成功!'.        
append LS_ALV to GT_RETURN.        
clear LS_ALV.        
refresh: LT_ITEM[], LT_PARTNER[],                   LT_SCHDL[]
, LT_COND[],                   LT_TEXT[]
, M_IT_EXTENSIONIN[],                   LT_CONDX[]
.      
endif.      
CLEAR:LT_RETURN[].    
else.      LS_ALV
-ZDDXH = LS_HEAD_QC-ZDDXH.      LS_ALV
-ZDDHH = LS_HEAD_QC-ZDDXH.      LS_ALV
-ZZSD  '@0A@'.      LS_ALV
-ZXXWB '不能创建更新标记为非I的销售订单。'.      
append LS_ALV to GT_RETURN.      
clear: LS_ALV, LS_HEAD_QC.    
endif.  
endloop.  
clear LS_HEAD_QC.
endform.
*&---------------------------------------------------------------------*
*& Form DATA_UPLOAD_M
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form DATA_UPLOAD_M .  
data: LT_DATA   type standard table of ALSMEX_TABLINE,        LS_DATA   
type ALSMEX_TABLINE,        LS_UPDATE 
type TY_UPDATE,        LS_RAW    
type TRUXS_T_TEXT_DATA.  

call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容    
exporting      FILENAME    
= PA_WJM      I_BEGIN_COL 
'1'      I_BEGIN_ROW 
'1'      I_END_COL   
'8'      I_END_ROW   
'5000'    
tables      INTERN      
= LT_DATA.

* 将上传数据的值,传入到内表  
loop at LT_DATA into LS_DATA.    
case LS_DATA-COL.      
when 1.        LS_UPDATE
-VTWEG          = LS_DATA-VALUE"分销渠道      
when 2.        LS_UPDATE
-SPART          = LS_DATA-VALUE.  "产品组      
when 3.        LS_UPDATE
-VBELN        = LS_DATA-VALUE.      
when 4.        LS_UPDATE
-POSNR          = LS_DATA-VALUE.      
when 5.        LS_UPDATE
-UPDKZ_KALK          = LS_DATA-VALUE.      
when 6.        LS_UPDATE
-MATNR          = LS_DATA-VALUE.      
when 7.        LS_UPDATE
-ARKTX          = LS_DATA-VALUE.      
when 8.        LS_UPDATE
-KBETR          = LS_DATA-VALUE.      
when 9.        LS_UPDATE
-KMEIN          = LS_DATA-VALUE.      
when 10.        LS_UPDATE
-ZZNOP          = LS_DATA-VALUE.    
endcase.    
at end of ROW.      
append LS_UPDATE to GT_UPDATE.      
clear LS_UPDATE.    
endat.    
clear LS_DATA.  
endloop.
endform.
*&---------------------------------------------------------------------*
*& Form DATA_MODIFY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form DATA_MODIFY .

* 销售订单相关定义  
data: LS_HEAD_U        type TY_UPDATE,                      "BAPI台头工作区        LT_HEAD_QC       
type standard table of TY_UPDATE,        LS_HEAD_QC       
type TY_UPDATE,        LS_HEAD          
type BAPISDH1,                       "bapi表头        LS_HEADX         
type BAPISDH1X,        LS_ITEM_U        
type TY_UPDATE,                      "BAPI行项目工作区        LT_ITEM          
type table of BAPISDITM,             "bapi行项目表        LS_ITEM          
type BAPISDITM,                      "bapi行项目表工作区        LT_ITEMX         
type table of BAPISDITMX,        LS_ITEMX         
type BAPISDITMX,        LT_COND          
type standard table of BAPICOND,     "定价        LS_COND          
type BAPICOND,        LT_CONDX         
type table of BAPICONDX,        LS_CONDX         
type BAPICONDX,        LS_ALV           
type TY_RETURN,        LT_RETURN        
type table of BAPIRET2,        LS_RETURN        
type BAPIRET2,                          "bapi返回信息工作区        M_IT_EXTENSIONIN 
type table of BAPIPAREX,        LWA_EXTENSIONIN  
type BAPIPAREX,        LWA_BAPE_VBAP    
type BAPE_VBAP,        LWA_BAPE_VBAPX   
type BAPE_VBAPX,        LWA_BAPE_VBAK    
type BAPE_VBAK,        LWA_BAPE_VBAKX   
type BAPE_VBAKX,        LV_VBTYP         
type VBAK-VBTYP,        LV_VKORG         
type VBAK-VKORG,        LV_VTWEG         
type VBAK-VTWEG,        LV_SPART         
type VBAK-SPART,        LV_MSEHI         
type T006A-MSEHI.


*--------------------------------------------------------------------*排序去重  LT_HEAD_QC[] 
= GT_UPDATE[].  

sort LT_HEAD_QC by VBELN POSNR ascending.  
delete adjacent duplicates from LT_HEAD_QC comparing VBELN.  

loop at LT_HEAD_QC into LS_HEAD_QC.    
if LS_HEAD_QC-UPDKZ_KALK 'U'.
*      LOOP AT GT_UPDATE INTO LS_HEAD_U WHERE VBELN = LS_HEAD_QC-VBELN.      
select single VBTYP VKORG VTWEG SPART        
from VBAK        
into ( LV_VBTYP, LV_VKORG, LV_VTWEG, LV_SPART )        
where VBELN = LS_HEAD_QC-VBELN.      

if LV_VBTYP = PA_AUART     
and LV_VKORG = PA_VKORG     
and LV_VTWEG = LS_HEAD_QC-VTWEG "Edit 2018.12.20 by li     
and LV_SPART = LS_HEAD_QC-SPART."Edit 2018.12.20 by li


**--------------------------------------------------------------------*X        
clear LS_HEADX.        LS_HEADX
-UPDATEFLAG 'U'.

*--------------------------------------------------------------------*赋值行项目数据        
loop at GT_UPDATE into LS_ITEM_U where VBELN = LS_HEAD_QC-VBELN.          
clear LS_ITEM.          LS_ITEM
-ITM_NUMBER = LS_ITEM_U-POSNR.          LS_ITEM
-MATERIAL = LS_ITEM_U-MATNR.          "物料编码          LS_ITEM
-SHORT_TEXT = LS_ITEM_U-ARKTX.        "物料描述          
append LS_ITEM to LT_ITEM.          

clear LS_ITEMX.          LS_ITEMX
-ITM_NUMBER = LS_ITEM_U-POSNR.          LS_ITEMX
-MATERIAL   'X'.                   "物料编码          LS_ITEMX
-SHORT_TEXT 'X'.                   "物料描述          
append LS_ITEMX to LT_ITEMX.


*--------------------------------------------------------------------*赋值定价
*   行项目          LS_COND
-ITM_NUMBER  = LS_ITEM_U-POSNR.
*   定价条件          LS_COND
-COND_TYPE  'ZP01'.
*   单价          LS_COND
-COND_VALUE  = LS_ITEM_U-KBETR.
*   单价计量单位          
select single MSEHI          
from T006A          
into LV_MSEHI          
where MSEHL = LS_ITEM_U-KMEIN.          LS_COND

-COND_UNIT   = LV_MSEHI.          
append LS_COND to LT_COND.          
clear: LV_MSEHI, LS_COND.

*   行项目          LS_CONDX
-ITM_NUMBER  = LS_ITEM_U-POSNR.
*   定价条件          LS_COND
-COND_TYPE  'X'.
*   单价          LS_CONDX
-COND_VALUE  'X'.
*   单价计量单位          LS_CONDX
-COND_UNIT   'X'.          
append LS_CONDX to LT_CONDX.          
clear LS_CONDX.

*--------------------------------------------------------------------*增强字段          
clear: LWA_BAPE_VBAP,                 LWA_BAPE_VBAPX
.          LWA_BAPE_VBAP

-ZZNOP       =  LS_ITEM_U-ZZNOP.          LWA_BAPE_VBAPX
-ZZNOP      =  'X'.          
move 'BAPE_VBAP' to LWA_EXTENSIONIN-STRUCTURE.

*     call method          
call method CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C            
exporting              IM_VALUE     
= LWA_BAPE_VBAP            
importing              EX_CONTAINER 
= LWA_EXTENSIONIN-VALUEPART1.          
append LWA_EXTENSIONIN to  M_IT_EXTENSIONIN.          
clear LWA_EXTENSIONIN.          

move 'BAPE_VBAPX' to LWA_EXTENSIONIN-STRUCTURE.          
move LWA_BAPE_VBAPX to LWA_EXTENSIONIN-VALUEPART1.          
append LWA_EXTENSIONIN to M_IT_EXTENSIONIN.        
endloop.      
endif.
*    ENDLOOP.

*--------------------------------------------------------------------*CALL BAPI      
call function 'BAPI_SALESORDER_CHANGE'        
exporting          SALESDOCUMENT    
= LS_HEAD_QC-VBELN
*         ORDER_HEADER_IN  = LS_HEAD          ORDER_HEADER_INX 
= LS_HEADX        
tables          
RETURN           = LT_RETURN          ORDER_ITEM_IN    
= LT_ITEM          ORDER_ITEM_INX   
= LT_ITEMX          CONDITIONS_IN    
= LT_COND          CONDITIONS_INX   
= LT_CONDX          EXTENSIONIN      
= M_IT_EXTENSIONIN.

*--------------------------------------------------------------------*判断是否成功      
read table LT_RETURN into LS_RETURN            
transporting no fields            
with key TYPE 'E'.      

if SY-SUBRC 0.        
call function 'BAPI_TRANSACTION_ROLLBACK'.        

loop at LT_RETURN into LS_RETURN          
where TYPE <> 'S'.          

concatenate LS_ALV-ZXXWB                      
'#'                      LS_RETURN
-MESSAGE                 
into LS_ALV-ZXXWB               
separated by SPACE.          LS_ALV
-ZDDXH = LS_ITEM_U-VBELN.          LS_ALV
-ZDDHH = LS_ITEM_U-POSNR.          LS_ALV
-ZZSD  '@0A@'.          
append LS_ALV to GT_RETURN.          
clear LS_ALV.          
clear LS_RETURN.          
refresh: LT_ITEM[], LT_COND[],                   LT_CONDX[]
, LT_ITEMX[],                   M_IT_EXTENSIONIN[]
.        
endloop.      

else.        
call function 'BAPI_TRANSACTION_COMMIT'          
exporting            
WAIT 'X'.        LS_ALV

-ZDDXH = LS_ITEM_U-VBELN.        LS_ALV
-ZDDHH = LS_ITEM_U-POSNR.        LS_ALV
-ZZSD  '@08@'.        LS_ALV
-ZXXWB '修改成功!'.        
append LS_ALV to GT_RETURN.        
clear LS_ALV.        
refresh: LT_ITEM[], LT_COND[],                   LT_CONDX[]
, LT_ITEMX[],                   M_IT_EXTENSIONIN[]
.      
endif.    
else.      LS_ALV
-ZDDXH = LS_HEAD_QC-VBELN.      LS_ALV
-ZDDHH = LS_HEAD_QC-POSNR.      LS_ALV
-ZZSD  '@0A@'.      LS_ALV
-ZXXWB '不能修改更新标记为非U的销售订单。'.      
append LS_ALV to GT_RETURN.      
clear LS_ALV.    
endif.  
endloop.
endform.
*&---------------------------------------------------------------------*
*& Form RESULT_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form RESULT_DISPLAY .  
data: LS_LAYOUT type SLIS_LAYOUT_ALV.  

perform FRM_EDIT_FIELDCAT_1.  

clear LS_LAYOUT.  

call function 'REUSE_ALV_GRID_DISPLAY'    
exporting      I_CALLBACK_PROGRAM       
= SY-REPID      I_CALLBACK_PF_STATUS_SET 
'FRM_SET_PF_STATUS'
*     I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'      IS_LAYOUT                
= LS_LAYOUT      IT_FIELDCAT              
= GT_FIELDCAT[]      I_SAVE                   
'A'    
tables      T_OUTTAB                 
= GT_RETURN[]    
exceptions      PROGRAM_ERROR            
1      
others                   2.

endform.
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_FIELDCAT_1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form FRM_EDIT_FIELDCAT_1 .  
data LW_FIELDCAT type SLIS_FIELDCAT_ALV.  

refresh GT_FIELDCAT.  LW_FIELDCAT

-FIELDNAME     'ZDDXH'.  LW_FIELDCAT
-SELTEXT_L     '销售订单号'.  LW_FIELDCAT
-OUTPUTLEN     '20'.  
append LW_FIELDCAT to GT_FIELDCAT.  
clear LW_FIELDCAT.  LW_FIELDCAT

-FIELDNAME     'ZDDHH'.  LW_FIELDCAT
-SELTEXT_L     '订单行号'.  LW_FIELDCAT
-OUTPUTLEN     '20'.  
append LW_FIELDCAT to GT_FIELDCAT.  
clear LW_FIELDCAT.  LW_FIELDCAT

-FIELDNAME     'ZXXWB'.  LW_FIELDCAT
-SELTEXT_L     '消息文本'.  LW_FIELDCAT
-FIX_COLUMN    '10'.  
append LW_FIELDCAT to GT_FIELDCAT.  
clear LW_FIELDCAT.  LW_FIELDCAT

-FIELDNAME     'ZZSD'.  LW_FIELDCAT
-SELTEXT_L     '指示灯'.  LW_FIELDCAT
-OUTPUTLEN     '10'.  
append LW_FIELDCAT to GT_FIELDCAT.  
clear LW_FIELDCAT.

endform.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTH_C
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form FRM_CHECK_AUTH_C .
*<<<Edit 2018.12.20 by li start 调整从屏幕条件判断权限,改成上传数据判断  
if GT_CREATE is not initial.    
loop at GT_CREATE into LS_CREATE.
* 权限检查      
authority-check object 'V_VBAK_AAT'               
id 'AUART' field PA_AUART               
id 'ACTVT' field '01'.      


authority-check object 'V_VBAK_VKO'               
id 'VKORG' field PA_VKORG               
id 'VTWEG' field LS_CREATE-VTWEG               
id 'SPART' field LS_CREATE-SPART               
id 'ACTVT' field '01'.


* 如果没有任何工厂的权限,则输出错误消息      
if SY-SUBRC <> 0.        
message '无权进行该操作!' type 'E'.        

leave list-processing.        
return.      
endif.    
endloop.  
else.    
message '没有上传数据!' type 'E'.  
endif.
*>>>Edit 2018.12.20 by li end
endform.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTH_U
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form FRM_CHECK_AUTH_U .
*<<<Edit 2018.12.20 by li start 调整从屏幕条件判断权限,改成上传数据判断  
if GT_UPDATE is not initial.    
loop at GT_UPDATE into LS_UPDATE.
* 权限检查      
authority-check object 'V_VBAK_AAT'               
id 'AUART' field PA_AUART               
id 'ACTVT' field '02'.      


authority-check object 'V_VBAK_VKO'               
id 'VKORG' field PA_VKORG               
id 'VTWEG' field LS_UPDATE-VTWEG               
id 'SPART' field LS_UPDATE-SPART               
id 'ACTVT' field '02'.


* 如果没有任何工厂的权限,则输出错误消息      
if SY-SUBRC <> 0.        
message '无权进行该操作!' type 'E'.        

leave list-processing.        
return.      
endif.    
endloop.  
else.    
message '没有上传数据!' type 'E'.  
endif.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form FRM_SET_PF_STATUS using I_EXTAB type SLIS_T_EXTAB.  

set pf-status 'ZS001'.

endform.

**<<Add 2018.12.20 by li
*FORM Frm_DOWNXLS1.
*  CASE sscrfields-ucomm.
*  WHEN 'FC01'.
*    CALL METHOD cl_gui_frontend_services=>file_exist
*    EXPORTING
*      file                 = p_file1
*      receiving
*      result               = l_result
*    EXCEPTIONS
*      cntl_error           = 1
*      error_no_gui         = 2
*      wrong_parameter      = 3
*      not_supported_by_gui = 4
*      OTHERS               = 5.
*    IF l_result = 'X'.
*      MESSAGE '模板C:\sapbill\ZSD005ZSOR.xls已存在!' TYPE 'E'.
*      STOP.
*    ELSE.
*      wwwdata_new-relid = 'MI'.
*      wwwdata_new-objid = 'ZSD_005ZSOR'.              "SMW0定义的对象名称
*      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
*      EXPORTING
*        KEY         = wwwdata_new
*        destination = 'C:\sapbill\ZSD005ZSOR.xls'.
*      IF sy-subrc NE 0.
*        MESSAGE '下载模板失败!' TYPE 'E'.
*      ELSE.
*        MESSAGE '成功下载模板!默认下载目录:C:\sapbill\ZSD005ZSOR.xls。' TYPE 'S'.
*      ENDIF.
*    ENDIF.
*  WHEN 'FC02'.
*    CALL METHOD cl_gui_frontend_services=>file_exist
*    EXPORTING
*      file                 = p_file2
*      receiving
*      result               = l_result
*    EXCEPTIONS
*      cntl_error           = 1
*      error_no_gui         = 2
*      wrong_parameter      = 3
*      not_supported_by_gui = 4
*      OTHERS               = 5.
*    IF l_result = 'X'.
*      MESSAGE '模板C:\sapbill\ZSD005ZCDR.xls已存在!' TYPE 'E'.
*      STOP.
*    ELSE.
*      wwwdata_new-relid = 'MI'.
*      wwwdata_new-objid = 'ZSD_005ZCDR'.              "SMW0定义的对象名称
*      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
*      EXPORTING
*        KEY         = wwwdata_new
*        destination = 'C:\sapbill\ZSD005ZCDR.xls'.
*      IF sy-subrc NE 0.
*        MESSAGE '下载模板失败!' TYPE 'E'.
*      ELSE.
*        MESSAGE '成功下载模板!默认下载目录:C:\sapbill\ZSD005ZCDR.xls。' TYPE 'S'.
*      ENDIF.
*    ENDIF.
*  ENDCASE.
*ENDFORM.

form FRM_DOWNXLS.  
data:    LS_OBJDATA     
type WWWDATATAB,    LV_FULLPATH    
type STRING  value 'C:\' ,        "文件保存目录    LV_DESTINATION 
type RLGRAP-FILENAME,    LV_RC          
like SY-SUBRC,    LV_CNAME       
type STRING,                      "默认名称    LV_OBJID       
type W3OBJID,                     "模板英文名称    LV_SUBRC       
type I,                           "是否下载成功标识    LV_PATH        
type STRING,                      "获取模板保存路径    LV_DIR         
type STRING,                      "文件保存目录    LV_LNAME       
type STRING,    LV_EXCEL       
type OLE2_OBJECT,    LV_WORKBOOK    
type OLE2_OBJECT,    LV_SHEET       
type OLE2_OBJECT,    LV_CELL        
type OLE2_OBJECT,    OBJID          
type WWWDATATAB-OBJID"下载对象名称    LV_INDEX       
type I,    LV_INDEX1      
type I.  
case SSCRFIELDS-UCOMM.    
when 'FC01'.      LV_CNAME 
'标准销售订单模板'.      LV_LNAME 
'ZSD_005ZSOR'.      OBJID 
'ZSD_005ZSOR'.    
when 'FC02'.      LV_CNAME 
'借贷项销售订单模板'.      LV_LNAME 
'ZSD_005ZCDR'.      OBJID 
'ZSD_005ZCDR'.    
when 'FC03'.      LV_CNAME 
'修改销售订单模板'.      LV_LNAME 
'ZSD_005'.      OBJID 
'ZSD_005'.  
endcase.
*  保存下载的模板  
if  OBJID is not initial.    


call method CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG      
exporting        DEFAULT_EXTENSION    
'XLS'                    "文件格式        DEFAULT_FILE_NAME    
= LV_CNAME                 "默认名称      
changing        FILENAME             
= LV_LNAME                 "默认下载名称        PATH                 
= LV_PATH                  "文件保存目录        FULLPATH             
= LV_FULLPATH              "获取模板保存路径      
exceptions        CNTL_ERROR           
1        ERROR_NO_GUI         
2        NOT_SUPPORTED_BY_GUI 
3        
others               4.
* 检查模板是否为空    
if LV_FULLPATH '' or    LV_PATH 
is initial.      
message S000 with '已取消下载!'      display 
like 'S'.      
exit.    
endif.    LV_DESTINATION 
= LV_FULLPATH.
* 检查表wwwdata中是否存在所指定的模板文件    
select single RELID    OBJID    

from WWWDATA    
into corresponding fields of LS_OBJDATA    
where SRTF2 eq 0    
and RELID eq 'MI'    
and OBJID eq OBJID .                   "模板    

if SY-SUBRC 0.
*     下载模板      
call function 'DOWNLOAD_WEB_OBJECT'        
exporting          
KEY         = LS_OBJDATA          DESTINATION 
= LV_DESTINATION        
importing          RC          
= LV_RC.      
if SY-SUBRC ne 0.        
message '下载模板失败!' type 'E'.        
exit.      
else.        
message '成功下载模板!' type 'S'.        
exit.      
endif.    
else.      
message S000 with '模板文件不存在!'      display 
like 'E'.
*    LEAVE LIST-PROCESSING.      
exit.    
endif.  
endif.
** set excel
*  PERFORM FRM_CREATE_EXCEL USING LV_FULLPATH.
**设定写入行位置,只写行标题
*  LV_INDEX = 1.
*  CASE sscrfields-ucomm..
*  WHEN ''.
*    PERFORM FRM_FILL_CELL     USING LV_INDEX 1  ''.
*  WHEN ''.
*    PERFORM FRM_FILL_CELL     USING LV_INDEX 1  ''.
*  WHEN ''.
*    PERFORM FRM_FILL_CELL     USING LV_INDEX 1  ''.
*  ENDCASE.
*
** 关闭Excel、释放内存
*  PERFORM FRM_FREE_EXCEL USING LV_FULLPATH.
** 导出成功!
*  MESSAGE S012.
endform.

form DATA_UPLOAD_CS .  
data: LT_DATA type standard table of ALSMEX_TABLINE,        LS_DATA 
type ALSMEX_TABLINE,
*        LS_CREATE TYPE TY_CREATE,        LS_RAW  
type TRUXS_T_TEXT_DATA.  

call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容    
exporting      FILENAME    
= PA_WJM      I_BEGIN_COL 
'1'      I_BEGIN_ROW 
'2'      I_END_COL   
'28'      I_END_ROW   
'5000'    
tables      INTERN      
= LT_DATA.

* 将上传数据的值,传入到内表  
loop at LT_DATA into LS_DATA.    
case LS_DATA-COL.      
when 1.        LS_CREATE
-VTWEG          = LS_DATA-VALUE"分销渠道      
when 2.        LS_CREATE
-SPART          = LS_DATA-VALUE.  "产品组      
when 3.        LS_CREATE
-ZDDXH          = LS_DATA-VALUE.      
when 4.        LS_CREATE
-ZDDHH          = LS_DATA-VALUE.      
when 5.        LS_CREATE
-UPDKZ_KALK     = LS_DATA-VALUE.      
when 6.        LS_CREATE
-KUNNR1         = LS_DATA-VALUE.      
when 7.        LS_CREATE
-NAME1          = LS_DATA-VALUE.      
when 8.        LS_CREATE
-KUNNR2         = LS_DATA-VALUE.      
when 9.        LS_CREATE
-NAME2          = LS_DATA-VALUE.      
when 10.        LS_CREATE
-BSTKD          = LS_DATA-VALUE.      
when 11.        LS_CREATE
-AUDAT          = LS_DATA-VALUE.      
when 12.        LS_CREATE
-PRSDT          = LS_DATA-VALUE.      
when 13.        LS_CREATE
-AUGRU          = LS_DATA-VALUE.      
when 14.        LS_CREATE
-PLTYP          = LS_DATA-VALUE.      
when 15.        LS_CREATE
-ZTERM          = LS_DATA-VALUE.      
when 16.        LS_CREATE
-TEXT1          = LS_DATA-VALUE.      
when 17.        LS_CREATE
-WAERK          = LS_DATA-VALUE.      
when 18.        LS_CREATE
-MATNR          = LS_DATA-VALUE.      
when 19.        LS_CREATE
-ARKTX          = LS_DATA-VALUE.      
when 20.        LS_CREATE
-KWMENG         = LS_DATA-VALUE.      
when 21.        LS_CREATE
-VRKME          = LS_DATA-VALUE.      
when 22.        LS_CREATE
-KSCHL          = LS_DATA-VALUE.      
when 23.        LS_CREATE
-KBETR          = LS_DATA-VALUE.      
when 24.        LS_CREATE
-KMEIN          = LS_DATA-VALUE.      
when 25.        LS_CREATE
-ZZVBELN_U8     = LS_DATA-VALUE.      
when 26.        LS_CREATE
-ZZPOSNR_U8     = LS_DATA-VALUE.      
when 27.        LS_CREATE
-TEXT2      = LS_DATA-VALUE.    
endcase.    
at end of ROW.      
append LS_CREATE to GT_CREATE.      
clear: LS_DATA, LS_CREATE.    
endat.  
endloop.
endform.



form UPLOAD_CHECK.  
"检查订单类型与模板是否一致  
if RB_01 'X'.    
case PA_AUART.      
when 'ZSOR'"标准订单        LV_LEN 
STRLEN( PA_WJM 1.        LV_BEN  
= LV_LEN 13.        L_FILE 
= PA_WJM+LV_BEN(LV_LEN).        
if L_FILE ne 'ZSD005ZSOR.xls'.          
message '模板选择错误' type 'E'.        
endif.      
when 'ZCR' or 'ZDR'.        LV_LEN 
STRLEN( PA_WJM 1.        LV_BEN  
= LV_LEN 13.        L_FILE 
= PA_WJM+LV_BEN(LV_LEN).        
if L_FILE ne 'ZSD005ZCDR.xls'.          
message '模板选择错误' type 'E'.        
endif.      
when others.        
message '请选择正确的订单类型' type 'E'.    
endcase.  
endif.  
if RB_02 'X'.    LV_LEN 
STRLEN( PA_WJM 1.    LV_BEN  
= LV_LEN 13.    L_FILE 
= PA_WJM+LV_BEN(LV_LEN).    
if L_FILE ne 'ZSD005.xls'.      
message '模板选择错误' type 'E'.    
endif.  
endif.
endform.

*>>>Add 2018.12.20 by li end

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