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修改创建的订单
源码如下:
公司业务背景:
一般是针对客户的应用领域,将相关的产品都会给一份报价,有效期一般都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
相关文章推荐
- 开发平台之美:10分钟内实现一个销售订单功能的增删改查
- ecshop用AJAX开发商品订单异步评价功能
- ABAP中(生产订单、销售订单、内部订单)各自编号的数据字段类型
- 详解EBS接口开发之销售订单挑库发放
- 详解EBS接口开发之销售订单导入
- ABAP开发过程中常用的FM和BAPI(其它模块常用的或者是特殊功能的请查看其它文章)
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 网络订单提醒功能,网点区域功能增强
- WCF广州本田整车销售系统技术解析(四) 订单修改功能实现分析
- 详解EBS接口开发之销售订单挑库发放
- sap-abap 取销售订单行的已发货数量
- Odoo 条码扫码功能 采购订单、销售订单通过扫码增加明细
- 这些日子,2年ABAP经验,开发功能重点序列
- WCF广州本田整车销售系统技术解析(二) 订单管理功能实现分析
- WCF广州本田整车销售系统技术解析(三) 订单新增功能实现分析
- ORACLE EBS 销售订单(RMA) 开发接口案例
- SAP笔记-abap 银行对账功能开发
- 详解EBS接口开发之销售订单挑库发放
- NC供应链销售订单询价业务逻辑的整理和开发指导
- ABAP 读取销售订单抬头文本自建函数
- 开发商城支付功能时解决订单已经支付的bug