您的位置:首页 > 其它

abap-报价单转销售订单功能的开发

2010-06-29 10:09 1001 查看
原文:http://gnolux-blog.appspot.com/2010/06/29/abap_2010062901.html

公司业务背景:

一般是针对客户的应用领域,将相关的产品都会给一份报价,有效期一般都l较长.

产品本身使用了可配置,报价时只针对一个常用的特性,当建订单时可以从报

价单复制,并可以修改特性,数量,订单文本等信息,且报价单可以多次被多张订

单作为复制原。 创建销售单时可以将已有的行,复制为新行并可修改特性为其它

非常用的。

VA01:标准参照报价复制功能的缺陷:

1.不能同时从多张报价单参考复制.

2.同一张报价单只能被一张订单参照.

3.订单行项目不能复制添加为新行,对于不同行只是少量栏位不同的情况,操作不方便.

针对以上要求重新开发功能 ZVA01:



主界面如下图:



查找报价和添加界面:



将当前添加项目,转成销售订单 通过bapi : 'BAPI_SALESORDER_CREATEFROMDAT2' 实现



转到VA02修改创建的订单



源码如下:

*&---------------------------------------------------------------------*
*& PROGRAM NAME: Z_SD_ENH_036
*& T-CODE:  ZVA01
*& PORGRAM TYPE: Function
*& DESCRIPTION: 从报价单创建销售订单
*&              同时具有销售订单从文件批导入功能
*&------------------------------------------------------------------
*& AUTHOR:  LONGXU
*& DATE:    2010.04.15
*& Blog:    blog.gnolux.com
*&------------------------------------------------------------------
*& FUNCTION SPEC NO.:
*& FUNCITON DESC:
*&
*&-------------------------------------------------------------------
*& Modification Log:
*& Version   Date        Author       DESCRIPTION     CHANGE REQUEST
*& -------- ----------  -----------  -------------  -----------------
*&
*&-------------------------------------------------------------------
*& REFRENCE OBJECT :
*& NAME                   TYPE                DESC
*& ---------------------  -----------------   -----------------------
*&
*&-------------------------------------------------------------------
REPORT  Z_SD_ENH_036.

*&---------------------------------------------------------------------*
*&                  public variant define
*&---------------------------------------------------------------------*
DATA : l_rowno TYPE i.
DATA: g_order_header_in TYPE  bapisdhd1,
g_order_header_inx TYPE  bapisdhd1x,
g_salesdocument TYPE bapivbeln-vbeln.
DATA:     g_order_items_in LIKE TABLE OF bapisditm  WITH HEADER LINE,
g_order_items_inx LIKE TABLE OF bapisditmx WITH HEADER LINE,
g_order_schedules_in  LIKE TABLE OF bapischdl WITH HEADER LINE,
g_order_schedules_inx LIKE TABLE OF bapischdlx WITH HEADER LINE,
g_order_partners LIKE TABLE OF bapiparnr WITH HEADER LINE,
g_order_cfgs_value LIKE TABLE OF bapicuval WITH HEADER LINE,
g_order_cfgs_ref  LIKE TABLE OF bapicucfg WITH HEADER LINE,
g_order_cfgs_inst LIKE  TABLE OF bapicuins WITH HEADER LINE,
g_order_conditions_in  LIKE  TABLE OF  bapicond WITH HEADER LINE,
g_order_conditions_inx  LIKE  TABLE OF bapicondx WITH HEADER LINE,
g_return LIKE TABLE OF bapiret2 WITH HEADER LINE.
DATA : BEGIN OF i_upload OCCURS 0 ,
doc_number TYPE vbeln_va ,     "凭证编号
purch_no TYPE bstkd ,          "客户采购单号
doc_type TYPE auart ,          "凭证类型
sales_org TYPE vkorg ,         "销售组织
distr_chan TYPE vtweg ,        "分销渠道
division TYPE spart ,          "产品组
partn_numb1 TYPE kunnr ,       "售达方
partn_numb2 TYPE kunnr ,       "送达方
partn_numb3 TYPE kunnr ,       "人员,雇员
itm_number TYPE posnr_va ,     "行项目号
material TYPE matnr,           "物料号
req_qty TYPE wmeng,            "需求数量
sales_unit TYPE vrkme,         "销售计量单位
cd_unt_iso   TYPE  isocd_unit, "基本计量单位   NEW
salqtyden  TYPE umvkn,         "转换分母,denominator  : n个销售单位
salqtynum TYPE umvkz,          "转换分子,numerator    : m个基本单位 = n个销售单位
cd_p_unt2 TYPE bapikbetr1,     "单价
currency TYPE waers,           "订单币别
cond_p_unt TYPE  kpein ,       "单价的单位数量        NEW
cond_unit TYPE  kmein ,        "单价的单位
cust_mat35 TYPE kdmat,         "客户物料号
req_date    TYPE  edatu ,      "交货时间
value1 TYPE cux_value,         "特性1-切管长度
value2 TYPE cux_value,         "特性2-包装方式
value3(100) ,"TYPE cux_value,  "特性3-客制包装说明
value4(100), "TYPE cux_value,  "特性4-印字方式内容
short_text TYPE arktx,         "暂存mat_entrd_external,更新到行项目文本字段

"以下字段用于查看,并不作为创建订单的数据
"-----------------------------------------------
c_matx     TYPE arktx,         "物料中文描述
e_matx     TYPE arktx,         "物料英文描述
quo_number TYPE vbeln_va,      "报价单号
quo_itemno type posnr_va,      "报价行项号
SECL(1)                 ,      "选择标记
EXITS(1)                ,      "是否已经在当前订单行项中添加
cuobj      type vbap-cuobj,    "特性实例号
knumv      type vbak-knumv,
"-----------------------------------------------
END OF i_upload.
Data: wa_upload like line  of i_upload.
Data: i_upload2 like table of i_upload with header line.
data: l_answer.

*&---------------------------------------------------------------------*
*&   screen variable define
*&---------------------------------------------------------------------*
"=======================
"Screen 200 variable
"=======================
DATA:FCODE_200 LIKE SY-UCOMM,
grid_200_1 type   ref to   cl_gui_alv_grid,
con_200_1  type   ref to   cl_gui_custom_container,
p_kname    type   kna1-name1.
"============================================================
"=======================
"Screen 250 variable
"=======================
DATA:FCODE_250 LIKE SY-UCOMM,
grid_250_1 type  ref to cl_gui_alv_grid,
con_250_1 type ref to   cl_gui_custom_container.
"=============================================================

"$ Region Class Definition and implementation
CLASS lcl_event_receiver DEFINITION DEFERRED.
data event_receiver type ref to lcl_event_receiver.
****************************************************************
* LOCAL CLASSES: Definition
****************************************************************
*CLASS lcl_dragdrop_obj DEFINITION.
*  PUBLIC SECTION.
*    DATA: wa TYPE i_upload,
*          index TYPE i.   "Index of Line to be moved
*ENDCLASS.                    "LCL_DRAGDROP DEFINITION
*===============================================================
* class lcl_event_receiver: local class to
*                         define and handle own functions.
*
* Definition:
* ~~~~~~~~~~~
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
*-------------------------define example--------------------------
*    CLASS-METHODS  handle_menu_button               FOR EVENT MENU_BUTTON          OF cl_gui_alv_grid IMPORTING e_object e_ucomm.
*    CLASS-METHODS  handle_user_after_user_command   FOR EVENT AFTER_USER_COMMAND   OF cl_gui_alv_grid.
*    CLASS-METHODS  handle_user_befor_user_command   FOR EVENT BEFORE_USER_COMMAND  OF cl_gui_alv_grid.
*    CLASS-METHODS  handle_data_changed              FOR EVENT DATA_CHANGED         OF cl_gui_alv_grid IMPORTING e_data_changed.
*    CLASS-METHODS  handle_toolbar                   FOR EVENT TOOLBAR              OF cl_gui_alv_grid IMPORTING e_object e_interactive.
*    CLASS-METHODS  handle_user_command              FOR EVENT USER_COMMAND         OF cl_gui_alv_grid IMPORTING e_ucomm.
*    CLASS-METHODS  handle_db_click                  FOR EVENT DOUBLE_CLICK         OF cl_gui_alv_grid IMPORTING e_row e_column .
*-----------------------------------------------------------------
CLASS-METHODS  grid_200_1_toolbar               FOR EVENT TOOLBAR              OF cl_gui_alv_grid IMPORTING e_object e_interactive.
CLASS-METHODS  grid_200_1_user_command          FOR EVENT USER_COMMAND         OF cl_gui_alv_grid IMPORTING e_ucomm.
CLASS-METHODS  grid_200_1_db_click              FOR EVENT DOUBLE_CLICK         OF cl_gui_alv_grid IMPORTING e_row e_column .
CLASS-METHODS  grid_150_1_db_click              FOR EVENT DOUBLE_CLICK         OF cl_gui_alv_grid IMPORTING e_row e_column .
CLASS-METHODS  grid_250_1_toolbar               FOR EVENT TOOLBAR              OF cl_gui_alv_grid IMPORTING e_object e_interactive.
CLASS-METHODS  grid_250_1_user_command          FOR EVENT USER_COMMAND         OF cl_gui_alv_grid IMPORTING e_ucomm.
**    Handling Event Drag
*    CLASS-METHODS  grid_200_1_drag                  FOR EVENT ondrag               OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj.
**    Handling event DROP
*    CLASS-METHODS  grid_200_1_drop                  FOR EVENT ondrop               OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj.
*
PRIVATE SECTION.
ENDCLASS.                    "lcl_event_receiver DEFINITION
*
* lcl_event_receiver (Definition)
*===============================================================
****************************************************************
* LOCAL CLASSES: Implementation
****************************************************************
*===============================================================
* class lcl_event_receiver (Implementation)
*
*
CLASS lcl_event_receiver IMPLEMENTATION.
*------------------Implement Example---------------------------------
*  METHOD handle_user_after_user_command .
*    "BREAK-POINT.
*  ENDMETHOD.                    "handle_user_after_user_command
*  METHOD handle_user_befor_user_command .
*    "BREAK-POINT.
*  ENDMETHOD.                    "handle_user_befor_user_command
*  METHOD handle_menu_button.
** § 3.At event MENU_BUTTON query your function code and define a
**     menu in the same way as a context menu.
**..........
** Part II: Evaluate 'e_ucomm' to see which menu button of the toolbar
**          has been clicked on.
**          Define then the corresponding menu.
**          The menu contains function codes that are evaluated
**          in 'grid_250_2_user_command'.
**...........
*
**  query e_ucomm to find out which menu button has been clicked on
*    IF e_ucomm = 'TO_SFLIGHT'.
*      CALL METHOD e_object->add_function
*                  EXPORTING fcode   = 'TO_SPFLI'
*                            text    = text-100. "Overview
**  § 3a.) choose a default function and define the same function code
**         as used for the menu.
*      CALL METHOD e_object->add_function
*                  EXPORTING fcode   = 'TO_SFLIGHT'
*                            text    = text-200. "Flights
*
*    ENDIF.
*  ENDMETHOD.                                                    "handle_menu_button
*  METHOD  handle_data_changed.
*    "BREAK-POINT.
*  ENDMETHOD.                                                    "handle_data_changed
*  METHOD handle_toolbar.
*    data:gs_toolbar  TYPE stb_button.
*    data:icount type i.
*
*    CLEAR gs_toolbar.
*    MOVE 'DELLINE' TO gs_toolbar-function.
*    MOVE ICON_DELETE_ROW TO gs_toolbar-icon.
*    MOVE '删除交货行'(200) TO gs_toolbar-quickinfo.
*    MOVE space TO gs_toolbar-disabled.
*    insert gs_toolbar inTO e_object->mt_toolbar index 1.
*
*    CLEAR gs_toolbar.
*    MOVE 'ADDLINE' TO gs_toolbar-function.
*    MOVE ICON_INSERT_ROW TO gs_toolbar-icon.
*    MOVE '添加交货行'(200) TO gs_toolbar-quickinfo.
*    MOVE space TO gs_toolbar-disabled.
*    insert gs_toolbar inTO  e_object->mt_toolbar index 1.
*  ENDMETHOD.                                                    "grid_250_1_toolbar
*  METHOD handle_db_click.
*   data wa_ZFIE023_INV like LINE OF I_ZFIE023_INV.
*   data wa_LIPS like LINE OF I_VBAP.
*   READ TABLE I_VBAP INDEX e_row-index INTO wa_LIPS.
*
*   CASE e_column.
*     WHEN 'AUBEL' or 'AUPOS'.
*        SET PARAMETER ID: 'AUN' FIELD wa_LIPS-AUBEL.
*        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*     WHEN 'VGBEL' or 'VGPOS'.
*        SET PARAMETER ID: 'VL' FIELD wa_LIPS-VGBEL.
*        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
*  ENDMETHOD.                                                     "handle_db_click
*  METHOD handle_user_command.
*    DATA:gi_index_rows TYPE lvc_t_row .
*    data:wa_row like line of gi_index_rows.
*    DATA:l_lines type i.
*
*    "BREAK-POINT.
*    CASE e_ucomm.
*
*      WHEN 'ADDLINE'.
*        Clear e_ucomm.
*        CLEAR I_VBAP[].
*        SET USER-COMMAND 'OK'.
*        call SCREEN '0350'.
*        CALL METHOD grid_250_1->refresh_table_display.
*  ENDMETHOD.                                                     "handle_user_command
*--------------------------------------------------------------------------
METHOD grid_200_1_toolbar.
*    data:gs_toolbar  TYPE stb_button.
*    data:icount type i.
*
*    CLEAR gs_toolbar.
*    MOVE 'DELLINE' TO gs_toolbar-function.
*
*    MOVE ICON_DELETE_ROW TO gs_toolbar-icon.
*    MOVE '删除交货行'(200) TO gs_toolbar-quickinfo.
*
*    MOVE space TO gs_toolbar-disabled.
*    insert gs_toolbar inTO e_object->mt_toolbar index 1.
*
*    CLEAR gs_toolbar.
*    MOVE 'ADDLINE' TO gs_toolbar-function.
*    MOVE ICON_INSERT_ROW TO gs_toolbar-icon.
*    MOVE '添加交货行'(200) TO gs_toolbar-quickinfo.
*    MOVE space TO gs_toolbar-disabled.
*    insert gs_toolbar inTO  e_object->mt_toolbar index 1.
ENDMETHOD.                    "grid_250_1_toolbar
METHOD grid_150_1_db_click.
*   data wa_ZFIE023_INV like LINE OF I_ZFIE023_INV.
*   data wa_LIPS like LINE OF I_VBAP.
*   READ TABLE I_VBAP INDEX e_row-index INTO wa_LIPS.
*
*
*   CASE e_column.
*     WHEN 'AUBEL' or 'AUPOS'.
*
*        SET PARAMETER ID: 'AUN' FIELD wa_LIPS-AUBEL.
*        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*
*
*     WHEN 'VGBEL' or 'VGPOS'.
*        SET PARAMETER ID: 'VL' FIELD wa_LIPS-VGBEL.
*        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
ENDMETHOD.                    "grid_150_1_db_click
METHOD grid_200_1_db_click.
*   data wa_ZFIE023_INV like LINE OF I_ZFIE023_INV.
*   data wa_ZFIE023_RV like LINE OF I_ZFIE023_RV.
*   READ TABLE I_ZFIE023_INV INDEX e_row-index INTO wa_ZFIE023_INV.
ENDMETHOD.                    "grid_250_1_db_click
METHOD grid_200_1_user_command.
DATA:gi_index_rows TYPE lvc_t_row .
data:wa_row like line of gi_index_rows.
DATA:l_lines type i.
"BREAK-POINT.
*    CASE e_ucomm.
*
*      WHEN 'ADDLINE'.
*        Clear e_ucomm.
*        CLEAR I_VBAP[].
*        SET USER-COMMAND 'OK'.
*        call SCREEN '0350'.
*        CALL METHOD grid_250_1->refresh_table_display.
*
*      WHEN 'DELLINE'.
*        Clear e_ucomm.
*        CALL METHOD grid_250_1->get_selected_rows
*          IMPORTING
*            et_index_rows = gi_index_rows[].
*        DESCRIBE TABLE gi_index_rows LINES l_lines.
*        IF l_lines = 0.
*          MESSAGE '请选中一个订单行!' type 'E'.
*          EXIT.
*        ENDIF.
*
*        CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
*          EXPORTING
*            defaultoption = 'N'
*            diagnosetext1 = '系统将删除选中的发票行,'
*            textline1     = '确定继续?'
*            titel         = '询问'
*          IMPORTING
*            answer        = l_answer.
*
*        IF l_answer <> 'J'.
*          EXIT.
*        ENDIF.
*
*        data  wa_tmpcinvp LIKE LINE OF I_ZSDE029_PINVP.
*        clear wa_tmpcinvp.
*
*
*        "READ TABLE gi_index_rows into wa_row INDEX 1.
*        sort gi_index_rows by index DESCENDING.
*        loop at gi_index_rows into wa_row .
*          READ TABLE I_ZSDE029_PINVP into  wa_tmpcinvp INDEX  wa_row-index  .
*          DELETE TABLE I_ZSDE029_PINVP from  wa_tmpcinvp .
*        ENDLOOP.
*
*        CALL METHOD grid_250_1->refresh_table_display.
*
*    ENDCASE.
ENDMETHOD.                    "grid_200_1_user_command
METHOD grid_250_1_toolbar.
data:gs_toolbar  TYPE stb_button.
data:icount type i.
CLEAR gs_toolbar.
MOVE 'ISL' TO gs_toolbar-function.
MOVE ICON_SKIP TO gs_toolbar-icon.
MOVE '反选'(200) TO gs_toolbar-quickinfo.
MOVE space TO gs_toolbar-disabled.
insert gs_toolbar inTO e_object->mt_toolbar index 1.
CLEAR gs_toolbar.
MOVE 'SLN' TO gs_toolbar-function.
MOVE ICON_DESELECT_ALL TO gs_toolbar-icon.
MOVE '不选'(200) TO gs_toolbar-quickinfo.
MOVE space TO gs_toolbar-disabled.
insert gs_toolbar inTO e_object->mt_toolbar index 1.
CLEAR gs_toolbar.
MOVE 'SLA' TO gs_toolbar-function.
MOVE ICON_SELECT_ALL TO gs_toolbar-icon.
MOVE '全选'(200) TO gs_toolbar-quickinfo.
MOVE space TO gs_toolbar-disabled.
insert gs_toolbar inTO  e_object->mt_toolbar index 1.
ENDMETHOD.                    "grid_250_1_toolbar
METHOD grid_250_1_user_command.
DATA:gi_index_rows TYPE lvc_t_row .
data:wa_row like line of gi_index_rows.
DATA:l_lines type i.
"BREAK-POINT.
data wa_upload LIKE LINE OF i_upload2.
CASE e_ucomm.
when 'SLA'.
Clear e_ucomm.
LOOP AT i_upload2 into wa_upload.
wa_upload-SECL = 'X'.
modify i_upload2 from wa_upload TRANSPORTING SECL.
ENDLOOP.
CALL METHOD grid_250_1->refresh_table_display.
WHEN 'SLN'.
Clear e_ucomm.
LOOP AT i_upload2 into wa_upload.
wa_upload-SECL = ''.
modify i_upload2 from wa_upload TRANSPORTING SECL.
ENDLOOP.
CALL METHOD grid_250_1->refresh_table_display.
WHEN 'ISL'.
Clear e_ucomm.
CALL METHOD grid_250_1->check_changed_data.
LOOP AT i_upload2 into wa_upload.
if wa_upload-SECL = ''.
wa_upload-SECL = 'X'.
else.
wa_upload-SECL = ''.
endif.
modify i_upload2 from wa_upload TRANSPORTING SECL.
ENDLOOP.
CALL METHOD grid_250_1->refresh_table_display.
ENDCASE.
ENDMETHOD.                    "grid_250_1_user_command
**  OnDrag event is used to 'fetch' information from the drag source.
*  METHOD grid_200_1_drag.
*    DATA: dataobj TYPE REF TO lcl_dragdrop_obj,
*          line TYPE i_upload.
** Read dragged row
*    READ TABLE i_upload INDEX e_row-index INTO line.
** create and fill dataobject for events ONDROP
*    CREATE OBJECT dataobj.
** Remembering row index to move a line
*    MOVE e_row-index TO dataobj->index.
** store the dragged line.
*    READ TABLE i_upload INTO dataobj->wa INDEX e_row-index.
** Assigning data object to the refering event parameter
*    e_dragdropobj->object = dataobj.
*  ENDMETHOD.                    "HANDLE_ALV_DRAG
*
*
**Event handler for event 'OnDrop'. This event is used
**to use your dragged information in combination with your drop source.
*  METHOD grid_200_1_drop.
*    DATA: dataobj TYPE REF TO lcl_dragdrop_obj,
*          drop_index TYPE i,
*          stable TYPE lvc_s_stbl.
** Refresh Alv Grid Control without scrolling
*    stable-row = 'X'.
*    stable-col = 'X'.
** Catch-Statement to ensure the drag&drop-Operation is aborted properly.
*    CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
*      dataobj ?= e_dragdropobj->object.
*      DELETE it_t016t INDEX dataobj->index.
*      INSERT dataobj->wa INTO it_t016t INDEX e_row-index.
**Refreshing the ALV
*      CALL METHOD c_alv->refresh_table_display
*        EXPORTING
*          i_soft_refresh = 'X'
*          is_stable      = stable.
*    ENDCATCH.
*    IF sy-subrc <> 0.
** If anything went wrong aborting the drag and drop operation:
*      CALL METHOD e_dragdropobj->abort.
*    ENDIF.
*  ENDMETHOD.                    "HANDLE_ALV_DROP
*---------------------------------------------------------------------
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
*
* lcl_event_receiver (Implementation)
*===================================================================
"$ Endregion Class Definition and implementation

*&---------------------------------------------------------------------*
*&   public form define
*&---------------------------------------------------------------------*
*&----------------------------------------------------------------------
*&
*& 此功能用于从文件导入并创建销售订单
*&
*&----------------------------------------------------------------------
**& define selection screen.
*SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.
*PARAMETER: p_file LIKE rlgrap-filename OBLIGATORY.
*SELECTION-SCREEN END   OF BLOCK blk.
*&----------------------------------------------------------------------

*&---------------------------------------------------------------------*
*&      Form  get_path
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_PATH  text
*----------------------------------------------------------------------*
FORM frm_getpath  CHANGING p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name  = syst-cprog
dynpro_number = syst-dynnr
field_name    = ' '
IMPORTING
file_name     = p_file.
ENDFORM.                    " get_path
*&---------------------------------------------------------------------*
*&      Form  alpha_input
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P  text
*----------------------------------------------------------------------*
FORM alpha_input  CHANGING p_p.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input  = p_p
IMPORTING
output = p_p.
ENDFORM.                    " alpha_input
*&---------------------------------------------------------------------*
*&      Form  frm_upfile2talbe
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_FILE  text
*      -->i_upload  text
*----------------------------------------------------------------------*
FORM frm_upfile2talbe "TABLES  i_upload STRUCTURE i_upload
USING value(p_p_file)
value(p_p_sort).
DATA : ls_file TYPE string.
DATA : ls_material TYPE matnr.
CLEAR ls_file.
ls_file = p_p_file.
CLEAR i_upload.
CLEAR i_upload[].
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename            = ls_file
filetype            = 'ASC'
has_field_separator = '#'
codepage            = '8400'
TABLES
data_tab            = i_upload.
IF sy-subrc NE 0.
WRITE:/ '导入文件不成功', sy-subrc.
STOP.
ENDIF.
SORT i_upload ASCENDING BY   doc_number
purch_no
doc_type
sales_org
distr_chan
division
partn_numb1
partn_numb2
partn_numb3
itm_number.
LOOP AT i_upload.
PERFORM alpha_input  CHANGING i_upload-sales_org.
PERFORM alpha_input  CHANGING i_upload-distr_chan.
PERFORM alpha_input  CHANGING i_upload-division.
PERFORM alpha_input  CHANGING i_upload-partn_numb1.
PERFORM alpha_input  CHANGING i_upload-partn_numb2.
PERFORM alpha_input  CHANGING i_upload-partn_numb3.
CONDENSE i_upload-cust_mat35.
IF not ( '1900' < i_upload-req_date(4) AND i_upload-req_date(4) < '9999' AND
1 <= i_upload-req_date+4(2) AND i_upload-req_date+4(2) <= 12  AND
1 <= i_upload-req_date+6(2) AND i_upload-req_date+6(2) <= 31  ) .
WRITE:/ '日期期格式: YYYYMMDD'.
STOP.
ENDIF.
MODIFY i_upload.
ENDLOOP.
ENDFORM.                    " frm_upfile2talbe

FORM frm_uptable2database  .
LOOP AT i_upload.
move i_upload to wa_upload.
AT NEW  doc_number.
l_rowno = 10.
CLEAR g_order_items_in. CLEAR g_order_items_in[].
CLEAR g_order_items_inx. CLEAR g_order_items_inx[].
CLEAR  g_order_partners .CLEAR g_order_partners[].
CLEAR g_order_schedules_in. CLEAR g_order_schedules_in[].
CLEAR g_order_schedules_inx. CLEAR g_order_schedules_inx[].
CLEAR  g_order_cfgs_value.CLEAR g_order_cfgs_value[].
CLEAR g_order_conditions_in. CLEAR g_order_conditions_in[].
CLEAR g_order_conditions_inx. CLEAR g_order_conditions_inx[].
CLEAR g_return . CLEAR g_return[].
CLEAR g_order_header_in.CLEAR g_order_header_inx.
*      g_order_header_in-doc_number = wa_upload-doc_number.
g_order_header_in-doc_type = wa_upload-doc_type.
g_order_header_in-sales_org = wa_upload-sales_org.
g_order_header_in-distr_chan = wa_upload-distr_chan.
g_order_header_in-division = wa_upload-division.
g_order_header_in-purch_no_c = wa_upload-purch_no.
*      g_order_header_inx-doc_number = 'X'.
g_order_header_inx-doc_type = 'X'.
g_order_header_inx-sales_org = 'X'.
g_order_header_inx-distr_chan = 'X'.
g_order_header_inx-division = 'X'.
g_order_header_inx-purch_no_c = 'X'.
g_order_partners-partn_role = 'AG'.
g_order_partners-partn_numb = wa_upload-partn_numb1.
PERFORM alpha_input CHANGING g_order_partners-partn_numb.
APPEND g_order_partners.
g_order_partners-partn_role = 'WE'.
g_order_partners-partn_numb = wa_upload-partn_numb2 .
PERFORM alpha_input CHANGING g_order_partners-partn_numb.
APPEND g_order_partners.
g_order_partners-partn_role = 'ZM'.
g_order_partners-partn_numb = wa_upload-partn_numb3.
PERFORM alpha_input CHANGING g_order_partners-partn_numb.
APPEND g_order_partners.
ENDAT.
PERFORM frm_fillitems TABLES g_order_items_in
g_order_items_inx
g_order_partners
g_order_schedules_in
g_order_schedules_inx
g_order_cfgs_ref
g_order_cfgs_value
g_order_conditions_in
g_order_conditions_inx
USING wa_upload.
AT END OF doc_number.
PERFORM frm_createso TABLES g_order_items_in
g_order_items_inx
g_order_partners
g_order_schedules_in
g_order_schedules_inx
g_order_cfgs_ref
g_order_cfgs_value
g_order_conditions_in
g_order_conditions_inx
g_return.
CONDENSE g_salesdocument.
IF g_salesdocument = ''.
PERFORM  frm_printerr TABLES g_return
USING 'E'.
ELSE.
PERFORM frm_writetext .
WRITE: / '成功导入订单:',wa_upload-doc_number,
'销售订单号  :',g_salesdocument .
ULINE .
"PERFORM  frm_printerr TABLES g_return  USING 'W'.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  frm_createso
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_ORDER_ITEMS_IN        text
*      -->P_G_ORDER_ITEMS_INX       text
*      -->P_G_ORDER_PARTNERS        text
*      -->P_G_ORDER_SCHEDULES_IN    text
*      -->P_G_ORDER_SCHEDULES_INX   text
*      -->P_G_ORDER_CFGS_REF        text
*      -->P_G_ORDER_CFGS_VALUE      text
*      -->P_G_ORDER_CONDITIONS_IN   text
*      -->P_G_ORDER_CONDITIONS_INX  text
*      -->P_I_RETURN                text
*----------------------------------------------------------------------*
FORM frm_createso  TABLES p_g_order_items_in STRUCTURE  bapisditm
p_g_order_items_inx STRUCTURE  bapisditmx
p_g_order_partners STRUCTURE bapiparnr
p_g_order_schedules_in STRUCTURE bapischdl
p_g_order_schedules_inx STRUCTURE bapischdlx
p_g_order_cfgs_ref STRUCTURE bapicucfg
p_g_order_cfgs_value STRUCTURE bapicuval
p_g_order_conditions_in  STRUCTURE bapicond
p_g_order_conditions_inx STRUCTURE bapicondx
p_i_return STRUCTURE bapiret2.
"BREAK-POINT.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in      = g_order_header_in
order_header_inx     = g_order_header_inx
IMPORTING
salesdocument        = g_salesdocument
TABLES
return               = p_i_return
order_items_in       = p_g_order_items_in
order_items_inx      = p_g_order_items_inx
order_partners       = p_g_order_partners
order_schedules_in   = p_g_order_schedules_in
order_schedules_inx  = p_g_order_schedules_inx
order_conditions_in  = p_g_order_conditions_in
order_conditions_inx = p_g_order_conditions_inx
order_cfgs_ref       = p_g_order_cfgs_ref
order_cfgs_value     = p_g_order_cfgs_value.
IF    g_salesdocument IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait   = 'X'
IMPORTING
return = p_i_return.
ENDIF.
ENDFORM.                    "frm_createso
*&---------------------------------------------------------------------*
*&      Form  frm_printerr
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_RETURN  text
*----------------------------------------------------------------------*
FORM frm_printerr  TABLES   p_i_return STRUCTURE bapiret2
USING err.
LOOP AT p_i_return WHERE type = err.
WRITE :/(12) i_upload-doc_number,
(2)  p_i_return-type,
(30) p_i_return-message
.
message p_i_return-message type err .
ENDLOOP.
ENDFORM.                    " frm_printerr
*&---------------------------------------------------------------------*
*&      Form  frm_fillitems
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->i_upload  text
*      -->P_I_ITEMS  text
*----------------------------------------------------------------------*
FORM frm_fillitems  TABLES p_g_order_items_in STRUCTURE  bapisditm
p_g_order_items_inx STRUCTURE  bapisditmx
p_g_order_partners STRUCTURE bapiparnr
p_g_order_schedules_in STRUCTURE bapischdl
p_g_order_schedules_inx STRUCTURE bapischdlx
p_g_order_cfgs_ref STRUCTURE bapicucfg
p_g_order_cfgs_value STRUCTURE bapicuval
p_g_order_conditions_in  STRUCTURE bapicond
p_g_order_conditions_inx STRUCTURE bapicondx
USING    p_indexdata   STRUCTURE i_upload.
DATA : l_kzkfg LIKE mara-kzkfg.
DATA  : l_kalks TYPE kalks.
CLEAR p_g_order_items_in .     CLEAR p_g_order_items_inx .
CLEAR p_g_order_partners.
CLEAR p_g_order_schedules_in.  CLEAR p_g_order_schedules_inx.
CLEAR p_g_order_conditions_in. CLEAR  p_g_order_conditions_inx.
CLEAR p_g_order_cfgs_ref.
CLEAR p_g_order_cfgs_value.
PERFORM alpha_input  CHANGING  i_upload-material.
CLEAR l_kzkfg.
SELECT SINGLE kzkfg
INTO l_kzkfg
FROM mara
WHERE matnr =  i_upload-material.
PERFORM alpha_input  CHANGING i_upload-sales_org.
PERFORM alpha_input  CHANGING i_upload-distr_chan.
PERFORM alpha_input  CHANGING i_upload-division.
PERFORM alpha_input  CHANGING i_upload-partn_numb1.
CLEAR l_kalks.
SELECT SINGLE kalks
INTO l_kalks
FROM knvv
WHERE  vkorg = i_upload-sales_org
AND  vtweg = i_upload-distr_chan
AND  spart = i_upload-division
AND  kunnr = i_upload-partn_numb1 .
CONDENSE l_kalks.
* items_in
p_g_order_items_in-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_items_in-itm_number.
p_g_order_items_in-material = i_upload-material.
PERFORM alpha_input  CHANGING p_g_order_items_in-material.
*  p_g_order_items_in-REASON_REJ = '00'.
p_g_order_items_in-cust_mat35 = i_upload-cust_mat35.
p_g_order_items_in-sales_unit = i_upload-sales_unit.
p_g_order_items_in-currency = i_upload-currency.
IF l_kzkfg IS NOT INITIAL.
p_g_order_items_in-po_itm_no = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_items_in-po_itm_no.
ENDIF.
*  p_g_order_items_in-target_qty = i_upload-req_qty.
*  p_g_order_items_in-target_qu = i_upload-sales_unit.
p_g_order_items_in-salqtynum =  i_upload-salqtynum.
p_g_order_items_in-salqtyden =  i_upload-salqtyden.
p_g_order_items_in-mat_entrd_external  = i_upload-short_text .
APPEND p_g_order_items_in.
* intems_inx
p_g_order_items_inx-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_items_inx-itm_number.
p_g_order_items_inx-updateflag = 'I'.
p_g_order_items_inx-itm_number = 'X'.
p_g_order_items_inx-material      = 'X'.
p_g_order_items_inx-cust_mat35 = 'X'.
p_g_order_items_inx-sales_unit    = 'X'.
*  p_g_order_items_inx-target_qty = 'X'.
*  p_g_order_items_inx-target_qu = 'X'.
p_g_order_items_inx-salqtynum =  'X'.
p_g_order_items_inx-salqtyden =  'X'.
*  p_g_order_items_inx-REASON_REJ = 'X'.
IF l_kzkfg IS NOT INITIAL.
p_g_order_items_in-config_id =  l_rowno.
PERFORM alpha_input  CHANGING p_g_order_items_in-config_id.
p_g_order_items_inx-config_id = 'X'.
p_g_order_items_inx-po_itm_no = 'X'.
ENDIF.
APPEND p_g_order_items_inx.
*  conditions_in
p_g_order_conditions_in-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_conditions_in-itm_number.
"BREAK-POINT.
CASE l_kalks.
WHEN 1.
p_g_order_conditions_in-cond_type = 'PR01'.
WHEN 2.
p_g_order_conditions_in-cond_type = 'PR00'.
WHEN 3.
p_g_order_conditions_in-cond_type = 'PI01'.
WHEN OTHERS .
p_g_order_conditions_in-cond_type = 'PR00'.
ENDCASE.
*  p_g_order_conditions_in-cond_type = 'PR00'.
p_g_order_conditions_in-cond_value = i_upload-cd_p_unt2."#?#?.
p_g_order_conditions_in-cond_p_unt =  i_upload-cond_p_unt.   "#?#?#?#?        NEW
p_g_order_conditions_in-cond_unit    =  i_upload-cond_unit.
p_g_order_conditions_in-currency = i_upload-currency.
APPEND p_g_order_conditions_in.
* conditions_inx
p_g_order_conditions_inx-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_conditions_inx-itm_number.
CASE l_kalks.
WHEN 1.
p_g_order_conditions_inx-cond_type = 'PR01'.
WHEN 2.
p_g_order_conditions_inx-cond_type = 'PR00'.
WHEN 3.
"   p_g_order_conditions_inx-cond_type = 'PI01'.
WHEN OTHERS .
p_g_order_conditions_inx-cond_type = 'PR00'.
ENDCASE.
*  p_g_order_conditions_inx-cond_type = 'PR00'.
p_g_order_conditions_inx-cond_value = 'X'.
p_g_order_conditions_inx-updateflag = 'X'.
p_g_order_conditions_inx-cond_unit = 'X'.
p_g_order_conditions_inx-cond_p_unt = 'X'.
p_g_order_conditions_inx-currency = 'X'.
APPEND p_g_order_conditions_inx.
* schedules_in
p_g_order_schedules_in-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_schedules_in-itm_number.
*  p_g_order_schedules_in-sched_line  = '0001'.
p_g_order_schedules_in-req_date = i_upload-req_date .
p_g_order_schedules_in-req_qty =  i_upload-req_qty.
APPEND p_g_order_schedules_in.
* schedules_inx
p_g_order_schedules_inx-itm_number = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_schedules_inx-itm_number.
*  p_g_order_schedules_inx-sched_line  = '0001'.
p_g_order_schedules_inx-req_date = 'X'.
p_g_order_schedules_inx-req_qty = 'X'.
p_g_order_schedules_inx-updateflag = 'X'.
APPEND p_g_order_schedules_inx.

* cfgs
IF l_kzkfg IS NOT INITIAL.
*   cfgs_ref
p_g_order_cfgs_ref-posex = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_ref-posex.
p_g_order_cfgs_ref-config_id =  l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_ref-config_id.
p_g_order_cfgs_ref-root_id = l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_ref-root_id.
APPEND p_g_order_cfgs_ref.
*   cfgs_value
p_g_order_cfgs_value-config_id =  l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-config_id.
p_g_order_cfgs_value-inst_id = p_g_order_cfgs_value-config_id.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-inst_id.
p_g_order_cfgs_value-charc = 'I_CUT_LENGTH'.
IF sy-mandt = '800' or sy-mandt = '888'.
break-point.
p_g_order_cfgs_value-charc = 'I_CUT_LENG'.
ENDIF.
p_g_order_cfgs_value-value = i_upload-value1.
APPEND p_g_order_cfgs_value.
p_g_order_cfgs_value-config_id =   l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-config_id.
p_g_order_cfgs_value-inst_id = p_g_order_cfgs_value-config_id.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-inst_id.
p_g_order_cfgs_value-charc = 'I_PACKAGE'.
IF sy-mandt = '800' OR sy-mandt = '888'.
p_g_order_cfgs_value-charc = 'I_PACKING'.
ENDIF.
p_g_order_cfgs_value-value = i_upload-value2.
APPEND p_g_order_cfgs_value.
p_g_order_cfgs_value-config_id =   l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-config_id.
p_g_order_cfgs_value-inst_id =  p_g_order_cfgs_value-config_id.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-inst_id.
p_g_order_cfgs_value-charc = 'C_PACKAGE'.
IF sy-mandt = '800' OR sy-mandt = '888'.
p_g_order_cfgs_value-charc = 'C_PACK_PS'.
ENDIF.
p_g_order_cfgs_value-value = i_upload-value3(30).
APPEND p_g_order_cfgs_value.
p_g_order_cfgs_value-config_id =   l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-config_id.
p_g_order_cfgs_value-inst_id = p_g_order_cfgs_value-config_id.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-inst_id.
p_g_order_cfgs_value-charc = 'PRINT1'.
IF sy-mandt = '800' OR sy-mandt = '888'.
p_g_order_cfgs_value-charc = 'C_PRINT_PS'.
ENDIF.
p_g_order_cfgs_value-value = i_upload-value4.
APPEND p_g_order_cfgs_value.
break-point.
IF sy-mandt = '800' ."800下多出的特性
p_g_order_cfgs_value-config_id =   l_rowno.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-config_id.
p_g_order_cfgs_value-inst_id = p_g_order_cfgs_value-config_id.
PERFORM alpha_input  CHANGING p_g_order_cfgs_value-inst_id.
p_g_order_cfgs_value-charc = 'C_PRINT_SL'.
p_g_order_cfgs_value-value = '02'.
APPEND p_g_order_cfgs_value.
ENDIF.
ENDIF.
l_rowno =  l_rowno + 10 .
ENDFORM.                    " frm_fillitems
*&---------------------------------------------------------------------*
*&      Form  frm_WriteText
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_writetext .
* Write SO ITEM Text
DATA : ls_tdname LIKE thead-tdname.
DATA header LIKE thead.
DATA lines TYPE STANDARD TABLE OF tline .
DATA w_line TYPE tline.
LOOP AT g_order_items_in.
CLEAR  ls_tdname.
CLEAR header.
CLEAR lines.CLEAR lines[].
CLEAR w_line.
CONCATENATE g_salesdocument
g_order_items_in-itm_number
INTO  ls_tdname.
header-tdobject = 'VBBP'.
header-tdname = ls_tdname.
header-tdid = '0001'.
header-tdspras  = '1'."sy-langu.
w_line-tdformat = '*'.
w_line-tdline = g_order_items_in-mat_entrd_external .
CONDENSE w_line.
APPEND w_line TO lines.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header          = header
savemode_direct = 'X'
TABLES
lines           = lines
EXCEPTIONS
id              = 1
language        = 2
name            = 3
object          = 4
OTHERS          = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL FUNCTION 'COMMIT_TEXT'.
IF sy-subrc <> 0.
MESSAGE '保存文本出错!' TYPE 'W'.
sy-subrc = 0.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.                    " frm_WriteText

*&------------------------------------------------------------------------
*&  screen 1000 define
*&------------------------------------------------------------------------
tables: vbak.
PARAMETER: p_vkorg like vbak-vkorg OBLIGATORY,
p_kunnr like vbak-kunnr OBLIGATORY,
p_edatu    type   edatu OBLIGATORY,
p_auart    type   vbak-auart  OBLIGATORY.
data: dynn(4) value '0251'.
SELECTION-SCREEN BEGIN OF SCREEN 0251 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK block_0 WITH FRAME TITLE text-001.
PARAMETER: p_MATKL like vbap-MATKL .
SELECT-OPTIONS   p_vbeln for vbak-vbeln.
PARAMETER:       p_arktx like vbap-arktx.
SELECTION-SCREEN END OF BLOCK block_0.
SELECTION-SCREEN END OF SCREEN 0251.

INITIALIZATION.
*&------------------------------------------------------------------------
*&
*& 此功能用于从文件导入并创建销售订单
*&
*&------------------------------------------------------------------------
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*  PERFORM frm_getpath CHANGING p_file.
*&------------------------------------------------------------------------
START-OF-SELECTION.
*&------------------------------------------------------------------------
*&
*& 此功能用于从文件导入并创建销售订单
*&
*&------------------------------------------------------------------------
*  PERFORM frm_upfile2talbe "TABLES i_upload
*                                   USING p_file
*                                             'DOC_NUMBER'.
*&------------------------------------------------------------------------
*PERFORM frm_upfile2talbe USING p_file 'DOC_NUMBER'.
select single name1 into p_kname from kna1 where kna1~kunnr = p_kunnr .
call screen '200'.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  S200_ALV_INI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM S200_ALV_INI.
data: gt_fieldcat  type lvc_t_fcat.
data: gs_layout type lvc_s_layo.
data: gs_variant type disvariant.
if con_200_1 is initial.
create object con_200_1
EXPORTING
container_name = 'CON_200_1'.
create object grid_200_1
EXPORTING
i_parent = con_200_1.
endif.
"定义grid格式
clear gs_layout.
gs_layout-smalltitle  = ''.
gs_layout-grid_title  = ''.
gs_layout-detailtitl  = '细节信息'(003).
gs_layout-zebra   =  'X'."定义GRID的样式如斑马条式
gs_layout-sel_mode  = 'C'.
gs_layout-cwidth_opt  = 'X'.
gs_layout-no_toolbar  = ''.
"gs_layout-BOX_FNAME = 'MARK'.
"定义列
DATA: ls_fieldcat like line of gt_fieldcat.
CLEAR gt_fieldcat[].
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DOC_NUMBER'.
ls_fieldcat-coltext = '凭证编号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PURCH_NO'.
ls_fieldcat-coltext = '客户采购单号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DOC_TYPE'.
ls_fieldcat-coltext = '凭证类型'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALES_ORG'.
ls_fieldcat-coltext = '销售组织'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DISTR_CHAN'.
ls_fieldcat-coltext = '分销渠道'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DIVISION'.
ls_fieldcat-coltext = '产品组'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB1'.
ls_fieldcat-coltext = '售达方'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB2'.
ls_fieldcat-coltext = '送达方'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB3'.
ls_fieldcat-coltext = '业务员'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'ITM_NUMBER'.
ls_fieldcat-coltext = '行项目号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'MATERIAL'.
ls_fieldcat-coltext = '物料号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'C_MATX'.
ls_fieldcat-coltext = '中文描述'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'E_MATX'.
ls_fieldcat-coltext = '英文描述'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'REQ_QTY'.
ls_fieldcat-coltext = '需求数量'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALES_UNIT'.
ls_fieldcat-coltext = '销售计量单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CD_UNT_ISO'.
ls_fieldcat-coltext = '基本计量单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALQTYDEN'.
ls_fieldcat-coltext = '转换分母'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALQTYNUM'.
ls_fieldcat-coltext = '转换分子'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CD_P_UNT2'.
ls_fieldcat-coltext = '单价'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CURRENCY'.
ls_fieldcat-coltext = '订单币别'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'COND_P_UNT'.
ls_fieldcat-coltext = '单价的单位数量'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'COND_UNIT'.
ls_fieldcat-coltext = '单价的单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CUST_MAT35'.
ls_fieldcat-coltext = '客户物料号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'REQ_DATE'.
ls_fieldcat-coltext = '交货时间'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE1'.
ls_fieldcat-coltext = '切管长度'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE2'.
ls_fieldcat-coltext = '包装方式'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE3'.
ls_fieldcat-coltext = '包装说明'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE4'.
ls_fieldcat-coltext = '印字方式'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SHORT_TEXT'.
ls_fieldcat-coltext = '行项目文本'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'QUO_NUMBER'.
ls_fieldcat-coltext = '报价单号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'QUO_ITEMNO'.
ls_fieldcat-coltext = '报价行项号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CONCATENATE sy-repid '200' into gs_variant-report.
"gs_variant-report = sy-repid. "指定保存变式的程序名.
call method grid_200_1->set_table_for_first_display
EXPORTING
is_variant      = gs_variant
is_layout       = gs_layout"采用自定义的格式
I_SAVE          = 'A'
I_DEFAULT       = 'X'
CHANGING
it_outtab       = i_upload[]
it_fieldcatalog = gt_fieldcat[].
SET HANDLER event_receiver->grid_200_1_user_command
event_receiver->grid_200_1_toolbar
event_receiver->grid_200_1_db_click FOR grid_200_1.
CALL METHOD grid_200_1->set_toolbar_interactive.
ENDFORM.                    "S200_ALV_INI
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'G200'.
SET TITLEBAR 'T200'.
PERFORM S200_ALV_INI.
ENDMODULE.                 " STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
DATA:gi_index_rows TYPE lvc_t_row ,
gs_index_rows TYPE lvc_s_row .
data:wa_row like line of gi_index_rows.
DATA:l_lines type i.
case  FCODE_200.
when 'BACK'.
Clear FCODE_200.
LEAVE to screen 0 .
when 'EXIT'.
Clear FCODE_200.
LEAVE PROGRAM.
when 'CANCEL'.
Clear FCODE_200.
leave to screen 0 .
when 'ADDLINE'.
Clear FCODE_200.
call screen '250'.
call method grid_200_1->refresh_table_display.
when 'CHKOUT'.
Clear FCODE_200.
g_salesdocument = ''.
perform frm_uptable2database .
data msgtxt(100).
if g_salesdocument <> ''.
CONCATENATE '订单创建成功:'   g_salesdocument ',订单号是是否跳转到订单修改界面,' into msgtxt.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = msgtxt
textline1     = '确定继续?'
titel         = '询问'
IMPORTING
answer        = l_answer.
IF l_answer <> 'J'.
leave to screen 0 .
EXIT.
ENDIF.
SET PARAMETER ID: 'AUN' FIELD  g_salesdocument.
CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.
leave to screen 0 .
endif.
when 'DELLINE'.
Clear FCODE_200.
CALL METHOD grid_200_1->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows[].
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
MESSAGE '请选中一个行项!' type 'E'.
EXIT.
ENDIF.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = '系统将删除选中的行,'
textline1     = '确定继续?'
titel         = '询问'
IMPORTING
answer        = l_answer.
IF l_answer <> 'J'.
EXIT.
ENDIF.
clear wa_upload.
"READ TABLE gi_index_rows into wa_row INDEX 1.
sort gi_index_rows by index DESCENDING.
loop at gi_index_rows into wa_row .
READ TABLE i_upload into  wa_upload INDEX  wa_row-index  .
DELETE TABLE i_upload from  wa_upload .
ENDLOOP.
CALL METHOD grid_200_1->refresh_table_display.
WHEN 'GTOP'.
Clear FCODE_200.
CALL METHOD grid_200_1->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows[].
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
MESSAGE '请选中一个行项!' type 'E'.
EXIT.
ENDIF.
clear wa_upload.
sort gi_index_rows by index .
data: sindex type i.
sindex = 1.
loop at gi_index_rows into wa_row .
READ TABLE i_upload into  wa_upload INDEX  wa_row-index  .
DELETE TABLE i_upload from  wa_upload .
INSERT wa_upload into i_upload index sindex .
sindex = sindex + 1.
ENDLOOP.
"CALL METHOD grid_200_1->refresh_table_display.
WHEN 'GUP'.
Clear FCODE_200.
CALL METHOD grid_200_1->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows[].
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
MESSAGE '请选中一个行项!' type 'E'.
EXIT.
ENDIF.
clear wa_upload.
sort gi_index_rows by index .
loop at gi_index_rows into wa_row .
sindex = wa_row-index - 1.
if sindex < 1 .
exit.
endif.
READ TABLE i_upload into  wa_upload INDEX  wa_row-index  .
DELETE TABLE i_upload from  wa_upload .
INSERT wa_upload into i_upload index sindex .
ENDLOOP.
"CALL METHOD grid_200_1->refresh_table_display.
WHEN 'GDOWN'.
Clear FCODE_200.
CALL METHOD grid_200_1->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows[].
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
MESSAGE '请选中一个行项!' type 'E'.
EXIT.
ENDIF.
clear wa_upload.
sort gi_index_rows by index DESCENDING .
DESCRIBE TABLE i_upload LINES l_lines.
loop at gi_index_rows into wa_row .
sindex = wa_row-index + 1.
if sindex > l_lines .
exit.
endif.
READ TABLE i_upload into  wa_upload INDEX  wa_row-index  .
DELETE TABLE i_upload from  wa_upload .
INSERT wa_upload into i_upload index sindex .
ENDLOOP.
"CALL METHOD grid_200_1->refresh_table_display.
WHEN 'GBOTM'.
Clear FCODE_200.
CALL METHOD grid_200_1->get_selected_rows
IMPORTING
et_index_rows = gi_index_rows[].
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines = 0.
MESSAGE '请选中一个行项!' type 'E'.
EXIT.
ENDIF.
clear wa_upload.
sort gi_index_rows by index DESCENDING .
DESCRIBE TABLE i_upload LINES l_lines.
sindex = l_lines .
loop at gi_index_rows into wa_row .
READ TABLE i_upload into  wa_upload INDEX  wa_row-index  .
DELETE TABLE i_upload from  wa_upload .
"if sindex > l_lines .
"  append wa_upload to i_upload .
"else.
INSERT wa_upload into i_upload index sindex .
"endif.
sindex = sindex - 1 .
ENDLOOP.
"CALL METHOD grid_200_1->refresh_table_display.
endcase.
ENDMODULE.                 " USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*&      Form  S250_ALV_INI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM S250_ALV_INI.
data: gt_fieldcat  type lvc_t_fcat.
data: gs_layout type lvc_s_layo.
data: gs_variant type disvariant.
data:gt_toolbar_excluding   Type  UI_FUNCTIONS.
if con_250_1 is initial.
create object con_250_1
EXPORTING
container_name = 'CON_250_1'.
create object grid_250_1
EXPORTING
i_parent = con_250_1.
endif.

"定义 gird toolbar
CLEAR gt_toolbar_excluding.
APPEND:
cl_gui_alv_grid=>MC_FC_PRINT               to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_LYSTYLE_DRAG_DROP_ROWS to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_LYSTYLE_NO_DELETE_ROWS to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_LYSTYLE_NO_INSERT_ROWS to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_TO_OFFICE to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_ABC    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_CHAIN    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_CRBATCH    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_CRWEB    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_LINEITEMS    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_MASTER_DATA    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_MORE    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_REPORT    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_XINT    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CALL_XXL    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_CHECK    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_MB_EXPORT    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_GRAPH     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_HELP     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_HTML     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_INFO     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_PC_FILE   to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_VIEWS   to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_APPEND_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_COPY     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_COPY_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_CUT     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_DELETE_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_INSERT_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_MOVE_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_PASTE     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_PASTE_NEW_ROW     to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_REFRESH    to gt_toolbar_excluding,
cl_gui_alv_grid=>MC_FC_LOC_UNDO     to gt_toolbar_excluding.
"定义grid格式
clear gs_layout.
gs_layout-smalltitle  = ''.
gs_layout-grid_title  = ''.
gs_layout-detailtitl  = '细节信息'(003).
gs_layout-zebra   =  'X'."定义GRID的样式如斑马条式
gs_layout-sel_mode  = 'B'.
gs_layout-cwidth_opt  = 'X'.
gs_layout-no_toolbar  = ''.
gs_layout-NO_ROWMARK = 'X'.
gs_layout-EDIT_MODE = ''.
"gs_layout-BOX_FNAME = 'MARK'.

"定义列
DATA: ls_fieldcat like line of gt_fieldcat.
CLEAR gt_fieldcat[].
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SECL'.
ls_fieldcat-coltext = '选择'.
ls_fieldcat-outputlen = 2.
ls_fieldcat-checkbox = 'X'.
"ls_fieldcat-input = 'X'.
ls_fieldcat-edit = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'EXITS'.
ls_fieldcat-coltext = '已被添加'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DOC_NUMBER'.
ls_fieldcat-coltext = '凭证编号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PURCH_NO'.
ls_fieldcat-coltext = '客户采购单号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DOC_TYPE'.
ls_fieldcat-coltext = '凭证类型'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALES_ORG'.
ls_fieldcat-coltext = '销售组织'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DISTR_CHAN'.
ls_fieldcat-coltext = '分销渠道'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'DIVISION'.
ls_fieldcat-coltext = '产品组'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB1'.
ls_fieldcat-coltext = '售达方'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB2'.
ls_fieldcat-coltext = '送达方'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'PARTN_NUMB3'.
ls_fieldcat-coltext = '业务员'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'ITM_NUMBER'.
ls_fieldcat-coltext = '行项目号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'MATERIAL'.
ls_fieldcat-coltext = '物料号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'E_MATX'.
ls_fieldcat-coltext = '英文描述'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'C_MATX'.
ls_fieldcat-coltext = '中文描述'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'REQ_QTY'.
ls_fieldcat-coltext = '需求数量'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALES_UNIT'.
ls_fieldcat-coltext = '销售计量单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CD_UNT_ISO'.
ls_fieldcat-coltext = '基本计量单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALQTYDEN'.
ls_fieldcat-coltext = '转换分母'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SALQTYNUM'.
ls_fieldcat-coltext = '转换分子'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CD_P_UNT2'.
ls_fieldcat-coltext = '单价'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CURRENCY'.
ls_fieldcat-coltext = '订单币别'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'COND_P_UNT'.
ls_fieldcat-coltext = '单价的单位数量'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'COND_UNIT'.
ls_fieldcat-coltext = '单价的单位'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'CUST_MAT35'.
ls_fieldcat-coltext = '客户物料号'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'REQ_DATE'.
ls_fieldcat-coltext = '交货时间'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE1'.
ls_fieldcat-coltext = '切管长度'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE2'.
ls_fieldcat-coltext = '包装方式'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE3'.
ls_fieldcat-coltext = '包装说明'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'VALUE4'.
ls_fieldcat-coltext = '印字方式'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'SHORT_TEXT'.
ls_fieldcat-coltext = '行项目文本'.
"ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'QUO_NUMBER'.
ls_fieldcat-coltext = '报价单号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname    = 'QUO_ITEMNO'.
ls_fieldcat-coltext = '报价行项号'.
ls_fieldcat-CONVEXIT = 'ALPHA'.
APPEND ls_fieldcat TO gt_fieldcat.
CONCATENATE sy-repid '250' into gs_variant-report.
"gs_variant-report = sy-repid. "指定保存变式的程序名.
call method grid_250_1->set_table_for_first_display
EXPORTING
is_variant           = gs_variant
it_toolbar_excluding = gt_toolbar_excluding
is_layout            = gs_layout"采用自定义的格式
I_SAVE               = 'A'
I_DEFAULT            = 'X'
CHANGING
it_outtab            = I_UPLOAD2[]
it_fieldcatalog      = gt_fieldcat[].
SET HANDLER event_receiver->grid_250_1_user_command
event_receiver->grid_250_1_toolbar FOR grid_250_1.
CALL METHOD grid_250_1->set_toolbar_interactive.
ENDFORM.                    "S250_ALV_INI
*&---------------------------------------------------------------------*
*&      Module  STATUS_0250  OUTP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0250 OUTPUT.
SET PF-STATUS 'G250'.
SET TITLEBAR 'T250'.
PERFORM S250_ALV_INI.
ENDMODULE.                 " STATUS_0250  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0250  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0250 INPUT.
case  FCODE_250.
when 'BACK'.
Clear FCODE_250.
LEAVE to screen 0 .
when 'EXIT'.
Clear FCODE_250.
LEAVE PROGRAM.
when 'CANCEL' or 'RTN'.
Clear FCODE_250.
leave to screen 0 .
when 'RUN'.
Clear FCODE_250.
PERFORM GetQuotationFromDb.
CALL METHOD grid_250_1->refresh_table_display.
when 'COF' .
Clear FCODE_250.
CALL METHOD grid_250_1->check_changed_data.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = '是否将选中报价行项添加到当前待创建订单'
textline1     = '确定继续?'
titel         = '询问'
IMPORTING
answer        = l_answer.
IF l_answer <> 'J'.
EXIT.
ENDIF.
"to do copy upload2 to upload
LOOP AT I_UPLOAD2 WHERE SECL = 'X' AND EXITS <> 'X' .
i_upload = i_upload2.
i_UPLOAD2-EXITS = 'X'.
i_upload-req_date = p_edatu.
i_upload-doc_type = p_auart.
append i_upload .
modify i_upload2 TRANSPORTING EXITS.
ENDLOOP.
leave to screen 0 .
endcase.
ENDMODULE.                 " USER_COMMAND_0250  INPUT
FORM GetQuotationFromDb.
data: p_ARKTX_t(255),p_MATKL_t(255).
CONCATENATE '%' p_ARKTX '%' into p_ARKTx_t.
CONCATENATE '%' p_MATKL '%' into p_MATKL_t.
select
"doc_number                    "凭证编号
bstnk as purch_no              "客户采购单号
auart as doc_type              "凭证类型
vbak~vkorg as sales_org             "销售组织
vbak~vtweg as distr_chan            "分销渠道
vbak~spart as division              "产品组
vbpa1~kunnr as partn_numb1     "售达方
vbpa2~kunnr as partn_numb2     "送达方
vbpa3~PERNR as partn_numb3     "人员,雇员
"itm_number                    "行项目号
vbap~matnr as material              "物料号
vbap~KWMENG as req_qty               "需求数量
vbap~vrkme as sales_unit            "销售计量单位
vbap~MEINS as cd_unt_iso            "基本计量单位   NEW
vbap~umvkn as salqtyden             "转换分母,denominator  : n个销售单位
vbap~umvkz as salqtynum             "转换分子,numerator    : m个基本单位 = n个销售单位
"cd_p_unt2 TYPE bapikbetr1,     "单价
"currency TYPE waers,           "订单币别
"cond_p_unt TYPE  kpein ,       "单价的单位数量        NEW
"cond_unit TYPE  kmein ,        "单价的单位
vbap~kdmat as cust_mat35             "客户物料号
"req_date    TYPE  edatu ,      "交货时间
"value1 TYPE cux_value,         "特性1-切管长度
"value2 TYPE cux_value,         "特性2-包装方式
"value3(100) ,"TYPE cux_value,  "特性3-客制包装说明
"value4(100), "TYPE cux_value,  "特性4-印字方式内容
"short_text TYPE arktx,         "行项目文本字段

"以下字段用于查看,并不作为创建订单的数据
"-----------------------------------------------
makt1~MAKTX as  c_matx          "物料中文描述
makt2~MAKTX as  e_matx          "物料英文描述
vbap~vbeln as quo_number        "报价单号
vbap~posnr as quo_itemno        "报价行项号
vbap~cuobj                      "特性实例号
vbak~knumv                      "定价关联序号
into corresponding fields of table i_upload2
from vbap
inner join vbak on vbak~vbeln = vbap~vbeln
inner join vbpa as vbpa1 on vbpa1~VBELN = vbap~VBELN and vbpa1~posnr = '000000' and vbpa1~PARVW = 'AG'
inner join vbpa as vbpa2 on vbpa2~VBELN = vbap~VBELN and vbpa2~posnr = '000000' and vbpa2~PARVW = 'WE'
inner join vbpa as vbpa3 on vbpa3~VBELN = vbap~VBELN and vbpa3~posnr = '000000' and vbpa3~PARVW = 'ZM'
"left  join konv on konv~knumv = vbak~knumv and konv~kposn = vbap~posnr and ( kshcl = 'PR00' or kshcl = 'PR01' ) 聚集表不能关联,需要在 loop 中分别取出
inner  join MAKT as MAKT1 on makt1~matnr = vbap~matnr and makt1~spras = '1'
inner  join MAKT as MAKT2 on makt2~matnr = vbap~matnr and makt2~spras = 'E'
where vbap~vbeln in p_vbeln
and vbak~kunnr = p_kunnr
and vbak~vkorg = p_vkorg
and ( MAKT1~MAKTX like p_ARKTX_t or MAKT2~MAKTX like p_ARKTX_t )
and vbap~MATKL like p_MATKL_t
and vbak~bnddt >= sy-datum.
loop at i_upload2.
IF i_upload2-cuobj <> 0 . " ê??é??????á?
DATA: i_configuration LIKE api_value OCCURS 0 WITH HEADER LINE.
DATA: stratwtb(50) TYPE c.
CALL FUNCTION 'VC_I_GET_CONFIGURATION'
EXPORTING
instance           = i_upload2-cuobj
language           = sy-langu
print_sales        = 'X'
TABLES
configuration_idoc = i_configuration
EXCEPTIONS
OTHERS             = 4.
LOOP AT i_configuration .
case i_configuration-atnam .
when 'I_CUT_LENG'.
i_upload2-value1 =  i_configuration-atwrt.
REPLACE 'm' WITH '' INTO i_upload2-value1.
when 'I_PACKING'.
i_upload2-value2 =  i_configuration-atwrt.
when 'C_PACK_PS'.
i_upload2-value3 =  i_configuration-atwrt.
when 'C_PRINT_PS'.
i_upload2-value4 =  i_configuration-atwrt.
"when 'C_PRINT_SL'.
"   i_upload2-value5 =  i_configuration-atwrt.
endcase.
ENDLOOP.
ENDIF.
select single
kbetr waers kpein kmein
into  (i_upload2-cd_p_unt2 ,  i_upload2-currency , i_upload2-cond_p_unt , i_upload2-cond_unit)
from  konv
where konv~knumv = i_upload2-knumv
and konv~kposn = i_upload2-quo_ItemNo
and ( konv~kschl = 'PR00' or konv~kschl = 'PR01' ) . "聚集表不能关联,需要在 loop 中分别取出
perform getSalesItmTxt using i_upload2-quo_number i_upload2-quo_ItemNo changing i_upload2-short_text .
loop at i_upload where quo_number = i_upload2-quo_number and quo_itemno = i_upload2-quo_itemno.
i_upload2-EXITS = 'X'.
exit.
endloop.
MODIFY i_upload2 TRANSPORTING  value1 value2 value3 value4 short_text cd_p_unt2 currency cond_p_unt cond_unit EXITS .

endloop.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GetSalesItmTxt
*&---------------------------------------------------------------------*
*       取得销售订单行项目文本
*----------------------------------------------------------------------*
*      -->p_VBELN   text
*      -->p_POSNR   text
*      <--p_TEXT    Text
*----------------------------------------------------------------------*
FORM GetSalesItmTxt USING   p_VBELN   LIKE    VBAK-VBELN
p_POSNR   LIKE    VBAP-POSNR
CHANGING  p_TEXT."    TYPE    String.
DATA: itab_sohead like thead ,
itab_soline like tline occurs 0 with header line .
DATA: p_Name Like THEAD-TDNAME,
p1 LIKE p_VBELN,
p2 LIKE p_POSNR .
DATA:tmp TYPE String value ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input  = p_VBELN
IMPORTING
output = p1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input  = p_POSNR
IMPORTING
output = p2.
CONCATENATE p1 p2 into p_Name.
" ID :0001   Name: 销售单+行项目号 0000110298000010     object: VBBP
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID                      = '0001'
LANGUAGE                = '1'
NAME                    = p_Name
OBJECT                  = 'VBBP'
IMPORTING
HEADER                  = itab_sohead
TABLES
LINES                   = itab_soline
EXCEPTIONS
ID                      = 1
LANGUAGE                = 2
NAME                    = 3
NOT_FOUND               = 4
OBJECT                  = 5
REFERENCE_CHECK         = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS                  = 8.
Loop at itab_soline.
CONCATENATE ' ' tmp itab_soline-tdline INTO tmp.
endloop .
IF tmp <> ''.
p_TEXT =  tmp.
exit.
ENDIF.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID                      = '0001'
LANGUAGE                = 'E'
NAME                    = p_Name
OBJECT                  = 'VBBP'
IMPORTING
HEADER                  = itab_sohead
TABLES
LINES                   = itab_soline
EXCEPTIONS
ID                      = 1
LANGUAGE                = 2
NAME                    = 3
NOT_FOUND               = 4
OBJECT                  = 5
REFERENCE_CHECK         = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS                  = 8.
Loop at itab_soline.
CONCATENATE ' ' tmp itab_soline-tdline INTO tmp.
endloop .
p_TEXT =  tmp.
ENDFORM.                    "GetSalesItmTxt

*&---------------------------------------------------------------------*
*&      Form  GetSalesItmTxt
*&---------------------------------------------------------------------*
*       取得销售订单行项目文本
*----------------------------------------------------------------------*
*      -->p_VBELN   text
*      -->p_POSNR   text
*      <--p_TEXT    Text
*----------------------------------------------------------------------*
FORM GetSalesTxt USING   p_VBELN   LIKE    VBAK-VBELN
CHANGING  p_TEXT."    TYPE    String.
DATA: itab_sohead like thead ,
itab_soline like tline occurs 0 with header line .
DATA: p_Name Like THEAD-TDNAME,
p1 LIKE p_VBELN.
DATA:tmp TYPE String value ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input  = p_VBELN
IMPORTING
output = p1.
p_Name = p1.
"CONCATENATE p1 p2 into p_Name.
" ID :0001   Name: 销售单+行项目号 0000110298000010     object: VBBP
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID                      = '0001'
LANGUAGE                = '1'
NAME                    = p_Name
OBJECT                  = 'VBBK'
IMPORTING
HEADER                  = itab_sohead
TABLES
LINES                   = itab_soline
EXCEPTIONS
ID                      = 1
LANGUAGE                = 2
NAME                    = 3
NOT_FOUND               = 4
OBJECT                  = 5
REFERENCE_CHECK         = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS                  = 8.
Loop at itab_soline.
CONCATENATE ' ' tmp itab_soline-tdline INTO tmp.
endloop .
IF tmp <> ''.
p_TEXT =  tmp.
exit.
ENDIF.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID                      = '0001'
LANGUAGE                = 'E'
NAME                    = p_Name
OBJECT                  = 'VBBK'
IMPORTING
HEADER                  = itab_sohead
TABLES
LINES                   = itab_soline
EXCEPTIONS
ID                      = 1
LANGUAGE                = 2
NAME                    = 3
NOT_FOUND               = 4
OBJECT                  = 5
REFERENCE_CHECK         = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS                  = 8.
Loop at itab_soline.
CONCATENATE ' ' tmp itab_soline-tdline INTO tmp.
endloop .
p_TEXT =  tmp.
ENDFORM.                    "GetSalesTxt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: