利用SD_SALESDOCUMENT_CREATE 批导动态数据SO

期初上线时,SO作为动态数据,是批导入系统必须做的一步,好多朋友利用bdc、lsmw、scatt等工具都可以做,下面是项目中利用SD_SALESDOCUMENT_CREATE 进行批导的一些代码,分享一下,希望对用到的朋友有帮助。

*&---------------------------------------------------------------------*

*& Report  ZSD_BATCH_SO

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT zsd_batch_so.

TABLES:sscrfields.

TYPES:BEGIN OF ty_up,

auart    TYPE vbak-auart,

vkorg    TYPE vbak-vkorg,

vtweg    TYPE vbak-vtweg,

spart   TYPE vbak-spart  ,  "产品组

kunnr_ag TYPE vbak-kunnr  ,  "客户编号

"客户名称

kunnr_re TYPE vbak-kunnr  ,  "开票方编号

"开票方名称

kunnr_rg TYPE vbak-kunnr  ,  "付款方

kunnr_we TYPE vbak-kunnr  ,  "送达方编号

"送达方名称

kunnr_za TYPE vbak-kunnr  ,  "业务员编码

"业务员

bstnk   TYPE  vbak-bstnk    ,  "采购订单编号/U8发

augru    TYPE  vbak-augru   ,  "订单原因

matnr TYPE   vbap-matnr     ,  "物料编码

lgort TYPE   vbap-lgort     ,  "库存地点

charg TYPE   vbap-charg     ,  "批次

kwmeng TYPE vbap-kwmeng     ,  "订单数量

vrkme TYPE   vbap-vrkme     ,  "订单数量单位

kschl TYPE   konv-kschl     ,  "

netpr TYPE   vbap-netpr     ,  "订单单价

kpein TYPE   vbap-kpein     ,  "金额单位

kmein TYPE   vbap-kmein     ,  "基本单位

END OF ty_up.

DATA:gs_up TYPE ty_up,

gt_up TYPE TABLE OF ty_up WITH HEADER LINE.

DATA:gt_log LIKE TABLE OF zsdbatchso WITH HEADER LINE.

DATA BEGIN OF gt_log1 OCCURS 0.

INCLUDE STRUCTURE  zsdbatchso.

DATA sno TYPE i.

DATA END OF gt_log1.

DATA: con_but(20) TYPE c.

DATA: v_code TYPE sy-ucomm.

DATA: wwwdata_new LIKE wwwdatatab.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01.

PARAMETERS: p_file(80).

SELECTION-SCREEN SKIP.

PARAMETER:p_testr TYPE bapiflag-bapiflag AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.

SELECTION-SCREEN: BEGIN OF LINE,

COMMENT 1(20) text-c01.

SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN: BEGIN OF LINE,

COMMENT 1(60) text-c02.

SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN END OF BLOCK b3.

INITIALIZATION.

CONCATENATE space space ‘@[email protected]‘ ‘下载EXCEL模板‘ INTO con_but.

sscrfields-functxt_01 = con_but.

AT SELECTION-SCREEN.

PERFORM get_template.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_excel USING p_file.

START-OF-SELECTION.

PERFORM upload_data.

PERFORM process_data.

PERFORM create_so.

PERFORM save_log.

*&---------------------------------------------------------------------*

*&      Form  get_excel

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_P_FILE   text

*----------------------------------------------------------------------*

FORM get_excel  USING    p_p_file.

DATA: l_filetab   TYPE filetable,

l_rc        TYPE i.

CLEAR l_filetab.

REFRESH l_filetab.

* Open dialog

CALL METHOD cl_gui_frontend_services=>file_open_dialog

EXPORTING

*     WINDOW_TITLE         = ‘SAP Custom - Open File‘

*     DEFAULT_EXTENSION    =

default_filename     = ‘*.xls‘

*     FILE_FILTER          = ‘*.xls‘

initial_directory    = ‘d:\‘

multiselection       = ‘‘

CHANGING

file_table           = l_filetab

rc                   = l_rc

EXCEPTIONS

cntl_error           = 1

error_no_gui         = 2

not_supported_by_gui = 3

OTHERS               = 4.

* Get file path

CHECK l_rc EQ 1.

READ TABLE l_filetab INDEX 1 INTO p_file.

ENDFORM.                    " GET_EXCEL

*&---------------------------------------------------------------------*

*&      Form  upload_data

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM upload_data .

DATA: BEGIN OF i_excel OCCURS 0.

INCLUDE STRUCTURE alsmex_tabline.

DATA: END OF i_excel.

DATA: l_answer(1) TYPE c.

DATA: l_column TYPE i.

FIELD-SYMBOLS: <fs>.

DATA: l_pathname LIKE rlgrap-filename.

MOVE p_file TO l_pathname.

CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE‘

EXPORTING

filename                = l_pathname

i_begin_col             = ‘1‘

i_begin_row             = ‘1‘

i_end_col               = ‘99‘

i_end_row               = ‘9999‘

TABLES

intern                  = i_excel

EXCEPTIONS

inconsistent_parameters = 1

upload_ole              = 2

OTHERS                  = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

IF i_excel[] IS INITIAL.

CALL FUNCTION ‘POPUP_TO_CONFIRM_WITH_MESSAGE‘

EXPORTING

*         DEFAULTOPTION  = ‘Y‘

diagnosetext1  = ‘没有数据‘

*         DIAGNOSETEXT2  = ‘ ‘

*         DIAGNOSETEXT3  = ‘ ‘

textline1      = ‘没有数据‘

*         TEXTLINE2      = ‘ ‘

titel          = ‘错误‘

*         START_COLUMN   = 25

*         START_ROW      = 6

*         CANCEL_DISPLAY = ‘X‘

IMPORTING

answer         = l_answer.

ELSE.

DELETE i_excel WHERE row = ‘0001‘.

SORT i_excel BY row col.

LOOP AT i_excel.

MOVE i_excel-col TO l_column.

ASSIGN COMPONENT l_column OF STRUCTURE gs_up TO <fs>.

MOVE i_excel-value TO <fs>.

AT END OF row.

APPEND gs_up TO gt_up.

CLEAR gs_up.

ENDAT.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM.                    " UPLOAD_DATA

*&---------------------------------------------------------------------*

*&      Form  PROCESS_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM process_data .

LOOP AT gt_up.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-kunnr_ag

IMPORTING

output = gt_up-kunnr_ag.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-kunnr_re

IMPORTING

output = gt_up-kunnr_re.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-kunnr_rg

IMPORTING

output = gt_up-kunnr_rg.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-kunnr_za

IMPORTING

output = gt_up-kunnr_za.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-kunnr_we

IMPORTING

output = gt_up-kunnr_we.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = gt_up-matnr

IMPORTING

output = gt_up-matnr.

MODIFY gt_up.

ENDLOOP.

ENDFORM.                    " PROCESS_DATA

*&---------------------------------------------------------------------*

*&      Form  CREATE_SO

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM create_so .

DATA:

wa_order_header_in      LIKE bapisdhd1,

wa_order_items_in       LIKE bapisditm,

wa_order_partners       LIKE bapiparnr,

wa_order_schedules_in   LIKE bapischdl,

wa_order_conditions_in  LIKE bapicond,

wa_order_conditions_inx  LIKE bapicondx,

wa_order_text           LIKE bapisdtext ,

wa_return               LIKE bapiret2,

wa_return2              LIKE bapiret2.

DATA:

order_header_in       LIKE  TABLE OF  bapisdhd1,

order_items_in        LIKE  TABLE OF  bapisditm,

order_partners        LIKE  TABLE OF  bapiparnr,

order_schedules_in    LIKE  TABLE OF  bapischdl,

order_conditions_in   LIKE  TABLE OF  bapicond,

order_conditions_inx   LIKE  TABLE OF  bapicondx,

order_text            LIKE  TABLE OF  bapisdtext,

return1              LIKE  TABLE OF  bapiret2 WITH HEADER LINE,

return2               LIKE  TABLE OF  bapiret2.

DATA l_vbeln TYPE vbak-vbeln.

LOOP AT gt_up.

CLEAR wa_order_header_in.

wa_order_header_in-doc_type   =  gt_up-auart.

wa_order_header_in-sales_org  =  gt_up-vkorg.

wa_order_header_in-distr_chan = gt_up-vtweg.

wa_order_header_in-division =     gt_up-spart.

wa_order_header_in-doc_date = sy-datum.

wa_order_header_in-purch_no_c = gt_up-bstnk.

wa_order_header_in-ord_reason = gt_up-augru.

CLEAR:wa_order_items_in,order_items_in.

wa_order_items_in-itm_number = 10.

wa_order_items_in-material = gt_up-matnr.

wa_order_items_in-plant = ‘8100‘.

wa_order_items_in-store_loc = gt_up-lgort.

wa_order_items_in-batch = gt_up-charg.

wa_order_items_in-sales_unit = gt_up-vrkme.

APPEND wa_order_items_in TO order_items_in.

CLEAR order_partners.

CLEAR wa_order_partners.

wa_order_partners-partn_role = ‘AG‘.

*    wa_order_partners-itm_number = 10.

wa_order_partners-partn_numb = gt_up-kunnr_ag.

APPEND wa_order_partners TO order_partners.

CLEAR wa_order_partners.

wa_order_partners-partn_role = ‘RE‘.

*    wa_order_partners-itm_number = 10.

wa_order_partners-partn_numb = gt_up-kunnr_re.

APPEND wa_order_partners TO order_partners.

CLEAR wa_order_partners.

wa_order_partners-partn_role = ‘RG‘.

*    wa_order_partners-itm_number = 10.

wa_order_partners-partn_numb = gt_up-kunnr_rg.

APPEND wa_order_partners TO order_partners.

CLEAR wa_order_partners.

wa_order_partners-partn_role = ‘WE‘.

*    wa_order_partners-itm_number = 10.

wa_order_partners-partn_numb = gt_up-kunnr_we.

APPEND wa_order_partners TO order_partners.

CLEAR wa_order_partners.

wa_order_partners-partn_role = ‘ZA‘.

*    wa_order_partners-itm_number = 10.

wa_order_partners-partn_numb = gt_up-kunnr_za.

APPEND wa_order_partners TO order_partners.

CLEAR: wa_order_schedules_in,order_schedules_in.

wa_order_schedules_in-itm_number = 10.

wa_order_schedules_in-req_qty = gt_up-kwmeng.

APPEND wa_order_schedules_in TO order_schedules_in.

CLEAR: wa_order_conditions_in,order_conditions_in.

wa_order_conditions_in-itm_number = 10.

wa_order_conditions_in-cond_st_no = 10.

wa_order_conditions_in-cond_count = 1.

wa_order_conditions_in-cond_type = ‘PR00‘.

wa_order_conditions_in-cond_value = gt_up-netpr.

wa_order_conditions_in-currency = ‘CNY‘.

wa_order_conditions_in-cond_unit = gt_up-kmein.

wa_order_conditions_in-cond_p_unt = gt_up-kpein.

APPEND wa_order_conditions_in TO order_conditions_in.

CLEAR: wa_order_conditions_inx,order_conditions_inx.

wa_order_conditions_inx-itm_number = 10.

wa_order_conditions_inx-cond_st_no = 10.

wa_order_conditions_inx-cond_count = 1.

wa_order_conditions_inx-updateflag = ‘U‘.

wa_order_conditions_inx-cond_type = ‘X‘.

wa_order_conditions_inx-cond_value = ‘X‘.

wa_order_conditions_inx-currency = ‘X‘.

wa_order_conditions_inx-cond_unit = ‘X‘.

wa_order_conditions_inx-cond_p_unt = ‘X‘.

APPEND wa_order_conditions_inx TO order_conditions_inx.

CLEAR l_vbeln.

*    CALL FUNCTION ‘BAPI_SALESORDER_CREATEFROMDAT2‘

*      EXPORTING

*        order_header_in      = wa_order_header_in

*      IMPORTING

*        salesdocument        = l_vbeln

*      TABLES

*        return               = return1

*        order_items_in       = order_items_in

**       ORDER_ITEMS_INX      =

*        order_partners       = order_partners

*        order_schedules_in   = order_schedules_in

**       ORDER_SCHEDULES_INX  =

*        order_conditions_in  = order_conditions_in

*        order_conditions_inx = order_conditions_inx.

CALL FUNCTION ‘SD_SALESDOCUMENT_CREATE‘

EXPORTING

sales_header_in      = wa_order_header_in

testrun              = p_testr

IMPORTING

salesdocument_ex     = l_vbeln

TABLES

return               = return1

sales_items_in       = order_items_in

*       ORDER_ITEMS_INX      =

sales_partners       = order_partners

sales_schedules_in   = order_schedules_in

*       ORDER_SCHEDULES_INX  =

sales_conditions_in  = order_conditions_in

sales_conditions_inx = order_conditions_inx.

IF l_vbeln IS NOT INITIAL .

CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘

EXPORTING

wait = ‘X‘.

gt_log-vbeln = l_vbeln.

gt_log-gname = sy-uname.

gt_log-gdate = sy-datum.

gt_log-gtime = sy-uzeit.

APPEND gt_log.

CLEAR  gt_log.

ELSE.

IF p_testr = ‘X‘.

READ TABLE return1 WITH KEY type = ‘E‘.

IF sy-subrc = 0.

gt_log-log = return1-message.

APPEND gt_log.

ELSE.

gt_log-log = ‘可以创建销售订单‘.

APPEND gt_log.

ENDIF.

ELSE.

CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK‘.

READ TABLE return1 WITH KEY type = ‘E‘.

gt_log-log = return1-message.

APPEND gt_log.

ENDIF.

ENDIF.

CLEAR gt_up.

CLEAR return1.

CLEAR gt_log.

ENDLOOP.

ENDFORM.                    " CREATE_SO

*&---------------------------------------------------------------------*

*&      Form  SAVE_LOG

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM save_log .

DATA lv_sno TYPE i.

IF p_testr = ‘‘.

MODIFY zsdbatchso FROM TABLE gt_log .

COMMIT WORK AND WAIT.

ENDIF.

*  LOOP AT gt_log.

*    lv_sno = lv_sno + 1.

*    MOVE-CORRESPONDING gt_log TO gt_log1.

*    gt_log1-sno = lv_sno.

*    APPEND gt_log1.

*    CLEAR:gt_log1,gt_log.

*  ENDLOOP.

lv_sno = 0.

LOOP AT gt_log.

lv_sno = lv_sno + 1.

MOVE-CORRESPONDING gt_log TO gt_log1.

gt_log1-sno = lv_sno.

IF gt_log1-vbeln NE ‘‘.

WRITE:/ gt_log1-sno, ‘销售订单‘ ,gt_log-vbeln,‘创建成功‘.

ELSE.

WRITE:/ gt_log1-sno,gt_log-log.

ENDIF.

CLEAR:gt_log1,gt_log.

ENDLOOP.

ENDFORM.                    " SAVE_LOG

*&---------------------------------------------------------------------*

*&      Form  get_template

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM get_template .

v_code = sscrfields-ucomm.

CASE v_code.

WHEN ‘FC01‘.

PERFORM download_excel_template.

ENDCASE.

ENDFORM.                    " GET_TEMPLATE

*&---------------------------------------------------------------------*

*&      Form  DOWNLOAD_EXCEL_TEMPLATE

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM download_excel_template .

DATA: rc TYPE sy-subrc,

temp.

wwwdata_new-relid = ‘MI‘.

wwwdata_new-objid = ‘Z_BATCH_SO‘.              "SMW0定义的对象名称

*下载模板

CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT‘

EXPORTING

key         = wwwdata_new

destination = ‘D:\批量创建销售订单.XLS‘

IMPORTING

rc          = rc

CHANGING

temp        = temp.

IF rc NE 0.

MESSAGE ‘模板下载失败‘ TYPE ‘E‘.

ELSE.

MESSAGE ‘模板下载到D盘根目录成功‘ TYPE ‘S‘.

ENDIF.

ENDFORM.                    " DOWNLOAD_EXCEL_TEMPLATE

*Text elements

*----------------------------------------------------------

* 003 备注

* B01 文件路径

* C01 注意事项:

* C02 严格按照模板字段填写。所有字母必须大写,否则会导入失败。

时间: 2024-08-24 17:02:19

利用SD_SALESDOCUMENT_CREATE 批导动态数据SO的相关文章

利用函数CS_BI_BOM_CREATE_BATCH_INPUT1 开发BOM批导程序

项目中,静态数据BOM批导是项目上线时,必须的步骤,下面代码是在CX项目中利用函数CS_BI_BOM_CREATE_BATCH_INPUT1做的BOM批导程序,程序中用EXCEL表格作为导入模板,并把批到结果以txt格式保存下来,分享一下,希望对需要的兄弟有帮助. *----------------------------------------------------------------------* * Program Name          : BOM批导入 * Purpose  

利用函数BAPI_REQUIREMENTS_CREATE开发计划独立需求批导程序

项目中,计划独立需求批导也是项目上线时,用到的程序,下面代码是在某项目中利用函数BAPI_REQUIREMENTS_CREATE计划独立需求批导程序,分享一下,希望对需要的兄弟有帮助. *&---------------------------------------------------------------------* *& Report  ZPP_CUS_JHXQ *& *&--------------------------------------------

利用函数BAPI_PR_CREATE开发采购申请批导

项目中,期初采购申请批导也是必须的,下面代码是利用BAPI    BAPI_PR_CREATE开发的采购申请批导函数,批导结果会保存在txt文本文件中,分享一下,希望对用到的兄弟有帮助. *&---------------------------------------------------------------------* *& Report  ZMM_PR_BATCH_INPUT *& *&-------------------------------------

客户/供应商主数据批导

客户/供应商主数据维护中,SAP提供了两个强大的类cmd_ei_api=>maintain_bapi和VMD_EI_API 下面是客户主数据维护的例子,供应商的类似.当客户编码为数据类型时,一定要将客户编码补0,否则系统会出现莫名其妙的错误. *&---------------------------------------------------------------------* *& 程序名称:ZSDB0002 *& 作者    : *& 开发日期: *&am

PBOC2.0安全系列之—脱机认证之动态数据认证(DDA)

动态数据认证: 一,什么是动态数据认证(DDA) 由于上篇<< PBOC2.0安全系列之—脱机认证之静态数据认证(SDA)>>已经对静态数据认证部分做了详细的分析,一些基本知识本章不重复说明,需要明确指出的是:无论SDA和DDA,两者都是属于脱机认证的范围. 在上一篇中,我们知道静态数据认证(SDA)的目标是解决发卡行静态数据的防篡改,但局限是无法防止复制卡或者伪造卡的情况,而这种复制卡和伪造卡恰恰是金融卡安全面临的最大问题. 举两个现实的例子: 1,笔者本人亲自遇到的:某天突然收

【Paddy】如何将物理表分割成动态数据表与静态数据表

前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不变动的数据称为静态数据. 举个例子,1张1000W的表,每日动态数据只有1W条,999W条的数据都为静态.往往select或者重复改变的数据都在动态数据中.比如订单表. 所以,如果将动态数据库从表中剥离出来,分割两张表,一张动态数据表,一张静态数据表,从数据量的角度来看,性能是不是就会自然提高了?

Nginx与Tomcat实现请求动态数据与请求静态资源的分离

上篇博客说明了Nginx在应用架构中的作用,以及负载均衡的思路.这篇实践一下其中的访问静态资源与访问动态资源的操作. 一.认识访问静态资源与访问动态资源的区别 静态资源:指存储在硬盘内的数据,固定的数据,不需要计算的数据. 如:图片.字体.js文件.css文件等等.在用户访问静态资源时,服务器会直接将这些资源返回到用户的计算机内. 动态资源:指需要服务器根据用户的操作所返回的数据,以及存储在数据库的数据,经过一系列逻辑计算后返回的数据. 如:请求明天的天气信息数据.请求查看账户余额. 二.请求动

游戏设计一、关于游戏动态数据和静态数据的处理

最近的游戏项目遇到的问题 让我思考了一些东西  比如 游戏开始时会初始化很多数据到世界里面,比如玩家的金钱,玩家一边打怪 一边金钱猛涨,在打怪的时候,金钱的数据应该是直接写到世界的,而不是更新了金钱就写到数据库的,所以这里就有个问题,当玩家查点击 装备的时候 上面会有个金钱的额度 这个数值是通过数据库还是通过世界内存来的? 简单说下 世界内存就是动态数据 静态数据 都是放数据库的,如果要看到及时的额度 那就必须增加动态数值查询的接口

Highcharts 之 【动态数据】

最近项目中需要用到图表,找了几个开源框架,最后选择 Highcharts,原因是 Highcharts 功能强大,稳定,方便,而且开源,社区比较成熟. 首先下载 Highcharts,导入项目. 在 HTML 页面引入相应的 Js 文件.我这个项目是情绪监控相关,所谓情绪也就是热点的意思.大数据团队通过爬虫,先从数据库词典里拿到比较靠前的几个行业名称,然后通过爬虫在网上抓取这几个行业的热度值.每天固定时间抓取,统计一次. <!DOCTYPE HTML> <html> <hea