销售订单批量导入(1)

 

 

注意:数量和金额必须用字符,否则 0.81 会变成81

*&---------------------------------------------------------------------*
*& Report ZSDR006B
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSDR006B.

INCLUDE ZSDR006B_TOP.

INCLUDE ZSDR006B_SCR.

INCLUDE ZSDR006B_FRM.

INITIALIZATION.
 CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本
    EXPORTING
      name   = icon_wd_dropdown_key   " 按钮的图片的名字
      text   = '模板下载'                   "按钮的文本
      info   = 'MBXZ'
    IMPORTING
      result = p_mbxz
    EXCEPTIONS
      OTHERS = 0.

AT SELECTION-SCREEN.
IF sscrfields-ucomm EQ 'MBXZ'.
    PERFORM frm_excel_down.
    sscrfields-ucomm = ''.
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path .
  PERFORM get_filename CHANGING p_path.


START-OF-SELECTION.
PERFORM get_file_data.

end-of-SELECTION.
PERFORM get_data.
PERFORM alv.

 

*&---------------------------------------------------------------------*
*& 包含               ZSDR006B_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.

DATA:BEGIN OF wa_item_mes,
       checkbox TYPE char1,  "勾选框
       status   TYPE char10, "红绿灯
       mes_01   TYPE char1,  "提示类别
       mes_02   TYPE string, "错误信息
     END OF wa_item_mes.

DATA:BEGIN OF wa_item,
       vbeln    LIKE vbak-vbeln,  "系统订单编号
       audat    TYPE char10,  "下单日期
       bstdk    TYPE char10,  "客户参考日期/发货日期
       auart    LIKE vbak-auart,  "单据类型
       vkbur    LIKE vbak-vkbur,  "销售部门/销售办事处
       bstnk    LIKE vbak-bstnk,  "客户参考/平台单号
*       bname    LIKE vbak-bname,  "名称/旺旺号
       cpmc     LIKE zsdt003-cpmc, "产品名称/商品编码
*       MATNR     LIKE zsdt003-MATNR,   "规格代码
*       GGMC     LIKE zsdt003-GGMC,   "规格名称
*       bzfs     LIKE zsdt003-bzfs,   "包装方式
       kwmeng   LIKE vbap-kwmeng,  "数量
       txt_01   TYPE string, "行项目文本.订单行项目文本
       lgort    LIKE vbap-lgort,  "库存地点
*       txt_02   TYPE string, "物流方式
       vsbed    LIKE vbak-vsbed, "装运条件
*       txt_03   TYPE string, "物流单号
       ihrez    LIKE vbak-ihrez,  "您的参考/客户联系人
       kmein    LIKE vbap-kmein,  "单位
       txt_04   TYPE string, "抬头文本,订单抬头文本
       kbetr    LIKE konv-kbetr, "单价
       zongje   LIKE konv-kbetr, "总金额
       waerk    LIKE vbap-waerk,  "货币
       zterm    LIKE vbkd-zterm,  "付款条件
       matnr_01 LIKE vbap-matnr,  "物料编码
       ggxh     LIKE zsdt003-ggxh, "规格型号
       cpmc_01  LIKE zsdt003-cpmc_01,  "物料描述
       edatu    TYPE char10,  "请求交货日期
       pstyv    LIKE vbap-pstyv,  "行项目类别
       vkorg    LIKE vbak-vkorg,  "销售组织
       vtweg    LIKE vbak-vtweg,  "分销渠道
       spart    LIKE vbak-spart,  "产品组
       vkgrp    LIKE vbak-vkgrp,  "销售组
       kunnr    LIKE vbak-kunnr,  "客户编码
       kunnr_01 LIKE vbak-kunnr,  "送达方
       werks    LIKE vbap-werks,  "工厂
       augru    LIKE vbak-augru,  "订单原因
       posnr    LIKE vbap-posnr,  "行项目
       kpein    LIKE vbap-kpein,  "价格单位
       bs_txt   TYPE c.        "标识不写入文本


*       audat_d_01 like sy-datum,"下单日期  day类型
    INCLUDE STRUCTURE wa_item_mes.
DATA:END OF wa_item.

DATA:gt_item       LIKE TABLE OF wa_item,
     gt_item_01    LIKE TABLE OF wa_item,
     gt_item_02    LIKE TABLE OF wa_item,
     gt_item_po    LIKE TABLE OF wa_item,
     gt_item_po_01 LIKE TABLE OF wa_item,
     gt_item_po_02 LIKE TABLE OF wa_item.

DATA: gs_order_header_in      TYPE bapisdhd1, "销售订单抬头
      gs_order_header_inx     TYPE bapisdhd1x,
      gs_return_header_in      TYPE bapisdhd1,
      gs_return_header_inx    TYPE bapisdhd1x,
      gs_order_items_in       LIKE  bapisditm,  "销售订单行项目
      gs_order_items_inx      LIKE  bapisditmx,
      gs_order_partners       LIKE  bapiparnr,  "销售订单:合作伙伴
      gs_return_items_in      LIKE  bapisditm,
      gs_return_items_inx     LIKE  bapisditmx,
      gs_return_partners      LIKE  bapiparnr,
      gs_order_conditions_in  LIKE  bapicond, "销售订单:通讯字段
      gs_order_conditions_inx LIKE  bapicondx,
      gs_return_conditions_in LIKE  bapicond,
      gs_order_header_in_s    TYPE  bapisdhead,
      gs_order_items_in_s     LIKE  bapiitemin,
      gs_order_partners_s     LIKE  bapipartnr,
      gs_order_schedule_in    LIKE  bapischdl,
      gs_order_items_out      LIKE  bapiitemex,
      gs_order_condition_ex   LIKE  bapicond,
      gt_order_items_in        TYPE TABLE OF  bapisditm,  "销售订单行项目
      gt_order_items_inx      TYPE TABLE OF bapisditmx,
      gt_order_partners        TYPE TABLE OF  bapiparnr,
      gt_return_items_in      TYPE TABLE OF  bapisditm,
      gt_return_items_inx      TYPE TABLE OF  bapisditmx,
      gt_return_partners      TYPE TABLE OF  bapiparnr,
      gt_order_conditions_in  TYPE TABLE OF  bapicond,
      gt_order_conditions_inx TYPE TABLE OF  bapicondx,
      gt_return_conditions_in TYPE TABLE OF  bapicond,
      gt_order_header_in_s    TYPE  TABLE OF bapisdhead,
      gt_order_items_in_s     LIKE  TABLE OF bapiitemin,
      gt_order_partners_s     LIKE  TABLE OF bapipartnr,
      gt_order_schedule_in    LIKE  TABLE OF bapischdl,
      gt_order_items_out      LIKE  TABLE OF bapiitemex,
      gt_order_condition_ex   LIKE  TABLE OF bapicond,
      gs_order_schedules_in   LIKE bapischdl,
      gt_order_schedules_in   LIKE TABLE OF bapischdl,
      gs_return_schedules_in  LIKE  bapischdl,
      gt_return_schedules_in  LIKE  TABLE OF bapischdl,
      wa_return               LIKE bapiret2,
      return                  LIKE TABLE OF  bapiret2,
      gs_text                 LIKE bapisdtext,
      gt_text                 TYPE TABLE OF bapisdtext.

TYPE-POOLS:truxs.
DATA:xlstab TYPE truxs_t_text_data.

DATA:matnr_18 TYPE char18.
DATA:l_switch TYPE TABLE OF bapisdls WITH HEADER LINE.
l_switch-pricing = 'G'.
APPEND l_switch.


DATA:w_text TYPE tline,
     l_text TYPE TABLE OF tline,
     tdname TYPE thead-tdname,
     vbtyp  TYPE c.

DATA:mes_str TYPE string.

TYPE-POOLS:slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv, "lvc_t_fcat, "列描述内表,列清单
      wa_fieldcat LIKE LINE OF it_fieldcat,
      it_layout   TYPE slis_layout_alv. "lvc_s_layo. "表格规格属性内表

CONSTANTS cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND' .

DATA:z_pp_0001 TYPE REF TO zhele_pp_0001.
CREATE OBJECT z_pp_0001.

 

*&---------------------------------------------------------------------*
*& 包含               ZSDR006B_SCR
*&---------------------------------------------------------------------*
PARAMETERS p_path  LIKE rlgrap-filename." OBLIGATORY.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN PUSHBUTTON 4(20) p_mbxz USER-COMMAND mbxz. " 定义搜索按钮

 

*&---------------------------------------------------------------------*
*& 包含               ZSDR006B_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含               ZSDR003_FRM
*&---------------------------------------------------------------------*

FORM frm_excel_down .
* 相关变量定义
  DATA:lo_objdata     LIKE wwwdatatab,
       lo_mime        LIKE w3mime,
       lc_filename    TYPE string VALUE '销售订单批导模板',
       lc_fullpath    TYPE string VALUE 'c:\',
       lc_path        TYPE string VALUE 'c:\',
       ls_destination LIKE rlgrap-filename,
       ls_objnam      TYPE string,
       l_rc           LIKE sy-subrc,
       ls_errtxt      TYPE string,
       l_objid        TYPE wwwdatatab-objid,
       l_dest         LIKE sapb-sappfad.

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

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

    IF sy-subrc <> 0 OR lo_objdata-objid IS INITIAL.
      MESSAGE '没有获得模板数据' TYPE 'E'.
    ENDIF.

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


FORM get_filename  CHANGING p_path.

  DATA: l_v_file_filter  TYPE string.
  DATA: l_v_filetable TYPE file_table,
        l_t_filetable TYPE filetable.
  DATA: l_v_rc           TYPE i.
  DATA: l_v_user_action  TYPE i.

  l_v_file_filter = '(*.xlsx;*.xls)|*.xlsx;*.xls|'.
  cl_gui_frontend_services=>file_open_dialog(
     EXPORTING window_title = 'Select file'
               file_filter  = l_v_file_filter
     CHANGING  file_table   = l_t_filetable
               rc           = l_v_rc
               user_action  = l_v_user_action ).
  CHECK l_v_user_action EQ 0.
  CHECK l_t_filetable[] IS NOT INITIAL.
  READ TABLE l_t_filetable INTO l_v_filetable INDEX 1.
  p_path = l_v_filetable-filename.


ENDFORM.                    " GET_FILENAME


FORM get_file_data .
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = '2'
      i_tab_raw_data       = xlstab
      i_filename           = p_path
    TABLES
      i_tab_converted_data = gt_item
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

*  LOOP AT  gt_data INTO gw_data.
*    TRANSLATE gw_data-bsart TO UPPER CASE.
*    TRANSLATE gw_data-mtabc TO UPPER CASE.
*    MODIFY gt_data FROM gw_data.
*  ENDLOOP.

ENDFORM.                    "get_file_data

FORM get_data.
  DATA:i TYPE posnr_va.
  APPEND LINES OF gt_item TO gt_item_po.
  LOOP AT gt_item INTO wa_item.

    "必输信息,不能为空
*    IF wa_item-bstdk    IS INITIAL
    IF wa_item-auart    IS INITIAL
*    OR wa_item-vkbur    IS INITIAL
*    OR wa_item-bstnk    IS INITIAL
*    OR wa_item-bname    IS INITIAL
*    OR wa_item-matnr    IS INITIAL
*    OR wa_item-ggmc    IS INITIAL
*    OR wa_item-cpmc    IS INITIAL
    OR wa_item-kwmeng   IS INITIAL
    OR wa_item-lgort    IS INITIAL
*    OR wa_item-txt_02   IS INITIAL
*    OR wa_item-txt_03   IS INITIAL
*    OR wa_item-ihrez    IS INITIAL
    OR wa_item-kmein    IS INITIAL
*    OR wa_item-txt_04   IS INITIAL
*    OR   ( wa_item-kbetr    IS INITIAL    and  wa_item-pstyv    <> 'ZANN'      )
    OR wa_item-waerk    IS INITIAL
    OR wa_item-zterm    IS INITIAL
    OR wa_item-edatu    IS INITIAL
    OR wa_item-pstyv    IS INITIAL
    OR wa_item-vkorg    IS INITIAL
    OR wa_item-vtweg    IS INITIAL
*    OR wa_item-vkgrp    IS INITIAL
    OR wa_item-kunnr    IS INITIAL
    OR wa_item-kunnr_01  IS INITIAL
    OR wa_item-werks    IS INITIAL.
      "提示字段不能为空,
      wa_item-mes_01 = 'E'.
      wa_item-mes_02 = '必输字段不能为空,请检查!'.

    ENDIF.

    IF wa_item-vbeln IS NOT INITIAL.
      APPEND wa_item TO gt_item_01.
      APPEND wa_item TO gt_item_po_01.
    ELSE.
      APPEND wa_item TO gt_item_02.
      APPEND wa_item TO gt_item_po_02.
    ENDIF.
  ENDLOOP.
  CLEAR:gt_item,wa_item.

  SORT gt_item_01 BY vbeln.
  SORT gt_item_po_01 BY vbeln.
  DELETE ADJACENT DUPLICATES FROM gt_item_01 COMPARING vbeln.
<

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT养家和SAP养家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值