1、效果图

1.1筛选界面截图

1.2模板数据上传预览图

1.3导入效果图


2、附赠源代码

*&---------------------------------------------------------------------*
*& Report ZVA01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report zva01.
include: zotnp001."EXCEL封装的对象,及相关的操作方法
tables: sscrfields."定义按钮
type-pools: slis.
***********************************************************************
*
*数据类型定义逻辑块
*
************************************************************************
data: gw_textfield like smp_dyntxt.
data:   bdcdata like bdcdata    occurs 0 with header line.
data:   messtab like bdcmsgcoll occurs 0 with header line.
*data:  messtab2 like TABLE OF bdcmsgcoll .
data:   ctumode like ctu_params-dismode.
data:   g_dcount(5) type n value 0. "记录数
data:   ref_grid    type ref to cl_gui_alv_grid.
data:it_fieldcat type lvc_t_fcat,wa_fieldcat like line of it_fieldcat.
data:l_kalks type  knvv-kalks , "定价过程l_kschl type a904-kschl. "条件类型
"导入数据
data:begin of gt_tab occurs 0,txt     type string,index   type string, "销售订单auart   type VBAK-auart, "销售凭证类型vkorg   type VBAK-vkorg, "销售组织vtweg   type VBAK-vtweg, "分销渠道spart   type VBAK-spart, "产品组vkbur   type VBAK-vkbur, "销售办事处kunnr   type string, "售达方kunag   type string, "送达方bstnk   type string, "客户参考posnr   type string, "行项目matnr   type string, "物料kwmeng  type string, "订单数量werks   type string, "工厂lgort   type string, "库存地点augru   type string, "订货原因remarks type string, "抬头备注lin     type string, "行项目备注prsdt   type string, "行项目定价日期end of gt_tab.
data: begin of gt_out occurs 0, "显示结果txt     type string,index   type string, "销售订单auart   type VBAK-auart, "销售凭证类型vkorg   type VBAK-vkorg, "销售组织vtweg   type VBAK-vtweg, "分销渠道spart   type VBAK-spart, "产品组vkbur   type VBAK-vkbur, "销售办事处kunnr   type vbak-kunnr, "售达方kunag   type likp-kunag, "送达方bstnk   type string, "客户参考posnr   type vbap-posnr, "行项目matnr   type vbap-matnr, "物料kwmeng2 type string, "订单数量werks   type string, "工厂lgort   type string, "库存地点augru   type string, "订货原因remarks type string, "抬头备注lin     type string, "行项目备注prsdt   type sy-datum, "行项目定价日期box(1),text    type icons-text, "标识tabix   type string, "文本kschl   type konp-kschl, "条件类型kbetr   type konp-kbetr, "条件金额konwa   type konp-konwa, "条件货币kpein   type konp-kpein, "条件单位kmein   type konp-kmein, "计量单位kwmeng  type vbap-kwmeng, "订单数量end of gt_out.
data:begin of gs_a904,kschl type konp-kschl, "条件类型kbetr type konp-kbetr, "条件金额konwa type konp-konwa, "条件货币kpein type konp-kpein, "条件单位kmein type konp-kmein, "计量单位end of gs_a904.
define init_fieldcat.CLEAR WA_FIELDCAT.WA_FIELDCAT-FIELDNAME = &1.WA_FIELDCAT-COLTEXT = &2.APPEND WA_FIELDCAT TO IT_FIELDCAT.
end-of-definition.************************************************************************
*
*选择界面程序逻辑块
*
************************************************************************
selection-screen begin of block blk1 with frame title text-100.
parameters : p_file like rlgrap-filename memory id file.
selection-screen end of block blk1.selection-screen function key 1.initialization.gw_textfield-icon_id = '@EZ@'.gw_textfield-icon_text = text-001.sscrfields-functxt_01 = gw_textfield."点击下载模板at selection-screen.case sscrfields-ucomm.when 'FC01'.perform frm_get_excel_templet.endcase."选择文件路径at selection-screen output.at selection-screen on value-request for p_file.perform get_tempath.start-of-selection.if p_file is initial.message '请选择导入模板路径' type 'S' display like 'E'.exit.endif.************************************************************************
*
*数据处理逻辑块
*
************************************************************************"获取到上传文档的数据perform frm_upload_data."处理上传文档的数据perform frm_deal_data."AVL输出perform frm_output.form frm_upload_data .data :lt_excel like alsmex_tabline occurs 0 with header line,l_col    type i.field-symbols <fs>.field-symbols: <fs_tab>  type standard table,<fs_line> type any.data: dref_table type ref to data,dref_line  type ref to data.create data dref_table like table of gt_tab.assign dref_table->* to <fs_tab>.create data dref_line like gt_tab.assign dref_line->* to <fs_line>.call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'exportingfilename                = p_filei_begin_col             = 1i_begin_row             = 2i_end_col               = 50i_end_row               = 20000tablesintern                  = lt_excelexceptionsinconsistent_parameters = 1upload_ole              = 2others                  = 3.
************把 表 LT_TAB 的内容给到UPD_TAB1clear : gt_tab. refresh :gt_tab.delete lt_excel where row = '0001'.loop at lt_excel.l_col = lt_excel-col.assign component l_col of structure <fs_line> to <fs>.if <fs> is assigned.<fs> = lt_excel-value.endif.at end of row.append <fs_line> to <fs_tab>.clear <fs_line>.endat.endloop.append lines of <fs_tab> to gt_tab.g_dcount = lines( gt_tab ).  "导入的记录数unassign: <fs>,<fs_tab>,<fs_line>.clear: lt_excel[],lt_excel,l_col,dref_table,dref_line.
endform.                    " FRM_UPLOAD_DATAform frm_va01_bapi.data:l_order_header_in      like bapisdhd1, "销售订单抬头l_order_header_inx     like bapisdhd1x, "销售订单抬头更新gt_return              like table of bapiret2 with header line, "返回参数gt_order_items_in      like table of bapisditm with header line, "销售订单项目gt_order_items_inx     like table of bapisditmx with header line, "销售订单项目更新gt_order_partners      like table of bapiparnr with header line, "销售订单合作伙伴l_sender               like bapi_sender, "发送人逻辑系统l_salesdocumentin      like bapivbeln-vbeln, "销售订单l_logic_switch         like bapisdls, "逻辑切换的 SD 复选框l_order_conditions_in  like table of bapicond with header line, "条件类型l_order_conditions_inx like table of bapicondx with header line, "条件类型更新l_salesdocument        like bapivbeln-vbeln, "BAPI 销售订单gt_order_schedules_in  like table of bapischdl with header line, "计划行gt_order_schedules_inx like table of bapischdlx with header line, "计划行更新。GT_ORDER_TEXT LIKE TABLE OF BAPISDTEXT WITH HEADER LINE."文本data:cp_eind type string,l_w     type string,i_mes   type char200."记录销售订单抬头,用作循环使用data:begin of gt_head occurs 0,index type string, "销售订单auart type string, "销售凭证类型vkorg type string, "销售组织vtweg type string, "分销渠道spart type string, "产品组vkbur type string, "销售办事处bstnk type string, "客户参考augru type string, "订货原因kunnr type string, "售达方kunag type string, "送达方Remarks TYPE STRING,end of gt_head."获取到选中的订单loop at gt_out where box = 'X'.gt_head-index = gt_out-index.gt_head-auart = gt_out-auart.gt_head-vkorg = gt_out-vkorg.gt_head-vtweg = gt_out-vtweg.gt_head-spart = gt_out-spart.gt_head-vkbur = gt_out-vkbur.gt_head-bstnk = gt_out-bstnk.gt_head-augru = gt_out-augru.gt_head-kunnr = gt_out-kunnr .gt_head-kunag = gt_out-kunag.GT_HEAD-Remarks = GT_OUT-Remarks.append gt_head.endloop."删除重复项delete adjacent duplicates from gt_head comparing all fields.sort gt_head.
*  break k99997."进行数据处理loop at gt_head."销售订单clear l_salesdocumentin.
*  L_SALESDOCUMENTIN = GT_HEAD-INDEX.l_logic_switch-pricing = 'G'."销售订单抬头clear l_order_header_in.l_order_header_in-doc_type = gt_head-auart."销售订单凭证类型l_order_header_in-sales_org = gt_head-vkorg."销售组织l_order_header_in-distr_chan = gt_head-vtweg."分销渠道l_order_header_in-division = gt_head-spart."产品组l_order_header_in-sales_off = gt_head-vkbur."销售办事处l_order_header_in-purch_no_c = gt_head-bstnk."客户参考l_order_header_in-req_date_h = sy-datum."要求的交货日期l_order_header_in-doc_date = sy-datum."凭证日期(接收/发送)if gt_head-auart = 'ZRE' or gt_head-auart = 'ZFR'.l_order_header_in-ord_reason = gt_head-augru."订单原因endif."抬头更新clear l_order_header_inx.l_order_header_inx-doc_type = 'X'.l_order_header_inx-sales_org = 'X'.l_order_header_inx-distr_chan = 'X'.l_order_header_inx-division = 'X'.l_order_header_inx-sales_off = 'X'.l_order_header_inx-purch_no_c = 'X'.l_order_header_inx-req_date_h = 'X'.l_order_header_inx-doc_date = 'X'.if gt_out-auart = 'ZRE'.l_order_header_inx-ord_reason = 'X'.endif."销售合作伙伴gt_order_partners-partn_role = 'AG'."售达方gt_order_partners-partn_numb = gt_head-kunnr."售达方编号
*    GT_ORDER_PARTNERS-ITM_NUMBER = GT_OUT-POSNR."销售订单项目append gt_order_partners.clear gt_order_partners.gt_order_partners-partn_role = 'WE'."送达方gt_order_partners-partn_numb = gt_head-kunag."送达方编号
*    GT_ORDER_PARTNERS-ITM_NUMBER = GT_OUT-POSNR."销售订单项目append gt_order_partners.clear gt_order_partners."抬头备注GT_ORDER_TEXT-TEXT_ID = 'Z003'."文本IDGT_ORDER_TEXT-LANGU = '1'."语言GT_ORDER_TEXT-TEXT_LINE = gt_head-Remarks."文本APPEND GT_ORDER_TEXT.CLEAR GT_ORDER_TEXT.loop at gt_out where box = 'X' and index = gt_head-index.call function 'CONVERSION_EXIT_CUNIT_INPUT'exportinginput  = gt_out-kmeinimportingoutput = gt_out-kmein."销售订单项目gt_order_items_in-itm_number = gt_out-posnr."销售订单项目gt_order_items_in-material = gt_out-matnr."物料编码gt_order_items_in-plant = gt_out-werks."工厂gt_order_items_in-store_loc = gt_out-lgort."库存地点gt_order_items_in-target_qty = gt_out-kwmeng."目标数量gt_order_items_in-price_date = gt_out-prsdt."行项目定价日期append gt_order_items_in.clear gt_order_items_in."销售订单项目更新gt_order_items_inx-itm_number = gt_out-posnr.gt_order_items_inx-material = 'X'.gt_order_items_inx-plant = 'X'.gt_order_items_inx-store_loc = 'X'.gt_order_items_inx-target_qty = 'X'.gt_order_items_inx-price_date = 'X'.append gt_order_items_inx.clear gt_order_items_inx."计划行gt_order_schedules_in-itm_number = gt_out-posnr."销售凭证项目gt_order_schedules_in-req_qty = gt_out-kwmeng."各销售单位订单数量append gt_order_schedules_in.clear gt_order_schedules_in.gt_order_schedules_inx-itm_number = gt_out-posnr."销售凭证项目gt_order_schedules_inx-req_qty = 'X'."各销售单位订单数量append gt_order_schedules_inx.clear gt_order_schedules_inx."条件类型l_order_conditions_in-itm_number = gt_out-posnr."销售订单项目l_order_conditions_in-cond_type = gt_out-kschl."条件类型l_order_conditions_in-cond_value = gt_out-kbetr."条件金额l_order_conditions_in-currency = gt_out-konwa."条件货币l_order_conditions_in-cond_unit = gt_out-kmein ."条件单位l_order_conditions_in-cond_p_unt = gt_out-kpein."条件定价单位l_order_conditions_in-curr_iso = gt_out-konwa."IOS代码货币append l_order_conditions_in.clear l_order_conditions_in."条件类型更新l_order_conditions_inx-itm_number = gt_out-posnr."销售订单项目l_order_conditions_inx-cond_type = gt_out-kschl."条件类型l_order_conditions_inx-cond_value = 'X'."条件金额l_order_conditions_inx-currency = 'X'."条件货币l_order_conditions_inx-cond_unit = 'X' ."条件单位l_order_conditions_inx-cond_p_unt = 'X'."条件定价单位append l_order_conditions_inx.clear l_order_conditions_inx."项目备注GT_ORDER_TEXT-TEXT_ID = 'Z005'."文本 IDGT_ORDER_TEXT-ITM_NUMBER = gt_out-posnr."销售订单项目GT_ORDER_TEXT-LANGU = '1'."语言代码GT_ORDER_TEXT-TEXT_LINE = gt_out-LIN."文本行APPEND GT_ORDER_TEXT.CLEAR GT_ORDER_TEXT.endloop."调用销售订单创建BAPIif gt_head-auart = 'ZRE'."由于BAPI:BAPI_SALESORDER_CREATEFROMDAT2把业务对象定义死了, 所以退货订单用此BAPI进行创建call function 'SD_SALESDOCUMENT_CREATE'exporting
*         salesdocument        = salesdocumentinsales_header_in      = l_order_header_insales_header_inx     = l_order_header_inx
*         sender               = sender
*         binary_relationshiptype = binary_relationshiptype
*         int_number_assignment   = int_number_assignment
*         behave_when_error    = behave_when_errorlogic_switch         = l_logic_switch
*         business_object      = 'BUS2032'
*         testrun              = testrun
*         convert_parvw_auart  = convertimportingsalesdocument_ex     = l_salesdocumenttablesreturn               = gt_return[]sales_items_in       = gt_order_items_in[]sales_items_inx      = gt_order_items_inx[]sales_partners       = gt_order_partners[]sales_schedules_in   = gt_order_schedules_in[]sales_schedules_inx  = gt_order_schedules_inx[]sales_conditions_in  = l_order_conditions_in[]sales_conditions_inx = l_order_conditions_inx[]
*         sales_cfgs_ref       = order_cfgs_ref
*         sales_cfgs_inst      = order_cfgs_inst
*         sales_cfgs_part_of   = order_cfgs_part_of
*         sales_cfgs_value     = order_cfgs_value
*         sales_cfgs_blob      = order_cfgs_blob
*         sales_cfgs_vk        = order_cfgs_vk
*         sales_cfgs_refinst   = order_cfgs_refinst
*         sales_ccard          = order_ccardsales_text           = GT_ORDER_TEXT[]
*         sales_keys           = order_keys
*         extensionin          = extensionin
*         partneraddresses     = partneraddresses
*         extensionex          = extensionex.else.clear l_salesdocument.call function 'BAPI_SALESORDER_CREATEFROMDAT2'exporting
*         SALESDOCUMENTIN      = L_SALESDOCUMENTINorder_header_in      = l_order_header_inorder_header_inx     = l_order_header_inx
*         SENDER               = L_SENDER
*         BINARY_RELATIONSHIPTYPE       =
*         INT_NUMBER_ASSIGNMENT         =
*         BEHAVE_WHEN_ERROR    =logic_switch         = l_logic_switch
*         TESTRUN              =
*         CONVERT              = ' 'importingsalesdocument        = l_salesdocumenttablesreturn               = gt_return[]order_items_in       = gt_order_items_in[]order_items_inx      = gt_order_items_inx[]order_partners       = gt_order_partners[]order_schedules_in   = gt_order_schedules_in[]order_schedules_inx  = gt_order_schedules_inx[]order_conditions_in  = l_order_conditions_in[]order_conditions_inx = l_order_conditions_inx[]
*         ORDER_CFGS_REF       =
*         ORDER_CFGS_INST      =
*         ORDER_CFGS_PART_OF   =
*         ORDER_CFGS_VALUE     =
*         ORDER_CFGS_BLOB      =
*         ORDER_CFGS_VK        =
*         ORDER_CFGS_REFINST   =
*         ORDER_CCARD          =ORDER_TEXT           = GT_ORDER_TEXT[]
*         ORDER_KEYS           =
*         EXTENSIONIN          =
*         PARTNERADDRESSES     =
*         EXTENSIONEX          =
*         NFMETALLITMS         =.endif.* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功clear i_mes.loop at gt_return.i_mes = i_mes && '*' &&  gt_return-type && gt_return-number && gt_return-message.if gt_return-type eq 'E' orgt_return-type = 'A' orgt_return = 'X'.cp_eind = 'X'.  "失败endif.if gt_return-type eq 'W'.l_w = 'X'.endif.endloop.if cp_eind ne 'X'.if l_w <>  'X'."存在警告信息loop at gt_out where index = gt_head-index and box = 'X'.gt_out-tabix = i_mes.gt_out-text = icon_green_light .gt_out-index = l_salesdocument.modify gt_out.endloop.else."成功生成订单loop at gt_out where index = gt_head-index and box = 'X'.gt_out-tabix = i_mes.gt_out-text = icon_yellow_light  .gt_out-index = l_salesdocument.modify gt_out.endloop.endif."提交事务call function 'BAPI_TRANSACTION_COMMIT'exportingwait = 'X'.commit work and wait.else."存在错误,创建失败loop at gt_out where index = gt_head-index and box = 'X'.gt_out-tabix = i_mes.gt_out-text = icon_red_light .modify gt_out.endloop."回滚事务call function 'BAPI_TRANSACTION_ROLLBACK' .endif.clear l_order_header_in.clear l_order_header_inx.clear l_logic_switch.clear l_salesdocument.clear gt_return[].clear gt_order_items_in[].clear gt_order_items_inx[].clear gt_order_partners[].clear l_order_conditions_in[].clear l_order_conditions_inx[].clear gt_order_schedules_in[].clear gt_order_schedules_inx[].clear cp_eind.clear l_w.endloop.endform.
form bdc_dynpro using program dynpro.clear bdcdata.bdcdata-program  = program.bdcdata-dynpro   = dynpro.bdcdata-dynbegin = 'X'.append bdcdata.
endform.
form bdc_field using fnam fval.clear bdcdata.bdcdata-fnam = fnam.bdcdata-fval = fval.append bdcdata.
endform.
*&---------------------------------------------------------------------*
*&      FORM  FRM_GET_EXCEL_TEMPLET
*&---------------------------------------------------------------------*
*       下载EXCEL模版
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
form frm_get_excel_templet .data: l_excel_control type ref to excel_control,l_objid         type string value 'ZVA01',  "模板对象名l_filename      type string value '销售订单导入模板',  "模板的EXCEL文件名l_br,               "是否显示路径选择l_dst           type string value 'D:\'.    " 路径"创建对象create object l_excel_control."下载相关的EXCEL模板call method l_excel_control->get_excel_templetexportingi_objid                  = l_objidi_filename               = l_filenameis_back_run              = l_brchangingc_destination            = l_dstexceptionstemplet_is_not_fount     = 1can_not_save_file        = 2templet_download_failure = 3others                   = 4.if sy-subrc ne 0.if sy-subrc eq 1.message '没有找到相应的模板!' type 'S' display like 'E'.stop.elseif sy-subrc eq 2.stop.elseif sy-subrc eq 3.message '模板下载失败!' type 'S' display like 'E'.stop.else.message '取得模板错误!' type 'S' display like 'E'.stop.endif.endif.clear: l_excel_control,l_objid,  "模板对象名l_filename,  "模板的EXCEL文件名l_br,               "是否显示路径选择l_dst.    " 路径
endform.                    " FRM_GET_EXCEL_TEMPLET
*&---------------------------------------------------------------------*
*&      FORM  GET_TEMPATH
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
form get_tempath .call function 'WS_FILENAME_GET'exportingdef_filename     = ' 'def_path         = 'C:\'mask             = 'EXCEL 文件 (*.XLS)|*.XLS;*.XLSX|'mode             = '0'title            = 'FIND THE TEXT FILE FOR UPLOAD'importingfilename         = p_fileexceptionsinv_winsys       = 1no_batch         = 2selection_cancel = 3selection_error  = 4others           = 5.endform.                    " GET_TEMPATH
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATA
*&---------------------------------------------------------------------*
*& 处理文档数据
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form frm_deal_data ."记录销售订单抬头,用作循环使用data:begin of gt_head occurs 0,index   type string, "销售订单auart   type string, "销售凭证类型vkorg   type string, "销售组织vtweg   type string, "分销渠道spart   type string, "产品组vkbur   type string, "销售办事处bstnk   type string, "客户参考augru   type string, "订货原因kunnr   type string, "售达方kunag   type string, "送达方remarks type string, "抬头备注end of gt_head.data:l_index type i.data:matcher type ref to cl_abap_matcher.data:match   type c length 1.DATA:L_QX TYPE CHAR1."记录是否有权限"获取到选中的订单loop at gt_tab.gt_head-index = gt_tab-index.gt_head-auart = gt_tab-auart.gt_head-vkorg = gt_tab-vkorg.gt_head-vtweg = gt_tab-vtweg.gt_head-spart = gt_tab-spart.gt_head-vkbur = gt_tab-vkbur.gt_head-bstnk = gt_tab-bstnk.gt_head-augru = gt_tab-augru.gt_head-kunnr = gt_tab-kunnr .gt_head-kunag = gt_tab-kunag.gt_head-remarks = gt_tab-remarks .append gt_head.endloop."删除重复项delete adjacent duplicates from gt_head comparing all fields.sort gt_head.loop at gt_tab.move-corresponding gt_tab to gt_out.clear l_kalks.call function 'CONVERSION_EXIT_ALPHA_INPUT'exportinginput  = gt_out-kunnrimportingoutput = gt_out-kunnr.call function 'CONVERSION_EXIT_ALPHA_INPUT'exportinginput  = gt_out-kunagimportingoutput = gt_out-kunag.call function 'CONVERSION_EXIT_ALPHA_INPUT'exportinginput  = gt_out-posnrimportingoutput = gt_out-posnr.call function 'CONVERSION_EXIT_MATN1_INPUT'exportinginput  = gt_out-matnrimportingoutput = gt_out-matnr."权限校验CLEAR L_QX.
*    BREAK-POINT."销售部门权限authority-check object 'ZVKBUR1'id 'ZVKBUR'field GT_OUT-VKBUR.if sy-subrc <> 0.gt_out-tabix = gt_out-tabix && '*没有销售部门' && GT_OUT-VKBUR && '的权限' .gt_out-text = icon_red_light.L_QX = 'X'.ENDIF."凭证类型权限authority-check object 'V_VBAK_AAT'id 'AUART'field GT_OUT-AUARTid 'ACTVT'FIELD '01'.if sy-subrc <> 0.gt_out-tabix = gt_out-tabix && '*没有凭证类型' && GT_OUT-AUART && '创建的权限' .gt_out-text = icon_red_light.L_QX = 'X'.ENDIF.
"销售范围权限authority-check object 'V_VBAK_VKO'id 'VKORG'field GT_OUT-VKORGid 'VTWEG'FIELD GT_OUT-VTWEGID 'SPART'FIELD GT_OUT-SPARTID 'ACTVT'FIELD '01'.if sy-subrc <> 0.gt_out-tabix = gt_out-tabix && '*没有销售范围' && GT_OUT-VKORG && '创建的权限' .gt_out-text = icon_red_light.L_QX = 'X'.ENDIF.IF L_QX <> 'X'."有权限"检查必填字段if gt_out-index is initial or gt_out-auart is initial or gt_out-vkorg is initial or gt_out-vtweg is initial orgt_out-spart is initial or  gt_out-vkbur is initial or gt_out-kunnr is initial or gt_out-kunag is initial orgt_out-posnr is initial or gt_out-matnr is initial or gt_out-kwmeng is initial or gt_out-werks is initial orgt_out-lgort is initial.gt_out-tabix = gt_out-tabix && '*存在必填字段为空值,请检查!' .gt_out-text = icon_red_light.endif.if gt_out-auart = 'ZOR' or gt_out-auart = 'ZYR'.if gt_out-bstnk is initial.gt_out-tabix = gt_out-tabix && '*客户参考必填,请检查!'   .gt_out-text = icon_red_light.endif.elseif gt_out-auart = 'ZRE' or gt_out-auart = 'ZFR'.if gt_out-augru is initial.gt_out-tabix =  gt_out-tabix &&  '*订货原因必填,请检查!' .gt_out-text = icon_red_light.endif.endif."校验抬头数据一致性clear l_index.loop  at gt_head where index = gt_tab-index.l_index = l_index + 1.endloop.if l_index > 1.gt_out-tabix =  gt_out-tabix &&  '*该订单抬头数据不一致,请检查!' .gt_out-text = icon_red_light.endif."校验订单类型是否正确if gt_out-auart = 'ZOR' or gt_out-auart = 'ZYR' or gt_out-auart = 'ZRE' or gt_out-auart = 'ZFR'.else.gt_out-tabix =  gt_out-tabix &&  '*不能导入此' && gt_out-auart && '订单类型,请检查!' .gt_out-text = icon_red_light.endif."校验销售订单、行项目是否为数字clear: matcher , match ."正则表达式matcher = cl_abap_matcher=>create( pattern = '\d+' text = gt_out-index ).match = matcher->match( ).if match <> 'X'.gt_out-tabix =  gt_out-tabix &&  '*销售订单' && gt_out-index  && '不是数字类型,请填写数字!' .gt_out-text = icon_red_light.endif.clear: matcher , match ."正则表达式matcher = cl_abap_matcher=>create( pattern = '\d+' text = gt_out-posnr ).match = matcher->match( ).if match <> 'X'.gt_out-tabix =  gt_out-tabix &&  '*行项目' && gt_out-posnr  && '不是数字类型,请填写数字!' .gt_out-text = icon_red_light.endif."校验售达方和送达方select*from knvvinto table @data(gt_knvv)where kunnr = @gt_out-kunnrand vkorg = @gt_out-vkorgand vtweg = '00'and spart = '00'.if gt_knvv is initial.gt_out-tabix =  gt_out-tabix &&  '*请BP维护售达方' && gt_out-kunnr  && '的'  && gt_out-vkorg && '销售视图!'.gt_out-text = icon_red_light.endif.clear gt_knvv.if gt_out-kunnr <> gt_out-kunag."售达方与送达方不一样的时候,检查送达方select*from knvvinto table gt_knvvwhere kunnr = gt_out-kunagand vkorg = gt_out-vkorgand vtweg = '00'and spart = '00'.if gt_knvv is initial.gt_out-tabix =  gt_out-tabix &&  '*请BP维护送达方' && gt_out-kunag  && '的'  && gt_out-vkorg && '销售视图!'.gt_out-text = icon_red_light.endif.clear gt_knvv.endif."校验行项目gt_tab-posnr = gt_tab-posnr mod 10.if gt_tab-posnr <> 0.gt_out-tabix =  gt_out-tabix &&  '*行项目,请以10为单位递增!'.gt_out-text = icon_red_light.endif."物料工厂校验select*from marainto table @data(gt_mara)where matnr = @gt_out-matnr.if gt_mara is initial.gt_out-tabix =  gt_out-tabix &&  '*该' && gt_out-matnr &&  '物料不存在'.gt_out-text = icon_red_light.else."物料存在"工厂检验select*from marcinto table @data(gt_marc)where matnr = @gt_out-matnrand werks = @gt_out-werks.if gt_marc is initial.gt_out-tabix =  gt_out-tabix &&  '*该' && gt_out-matnr && '物料不存在' && gt_out-werks && '工厂视图!'.gt_out-text = icon_red_light.else."工厂存在"库存地点检验select*from mardinto table @data(gt_mard)where matnr = @gt_out-matnrand werks = @gt_out-werksand lgort = @gt_out-lgort.IF gt_mard is INITIAL.gt_out-tabix =  gt_out-tabix &&  '*该' && gt_out-matnr && '物料不存在' && gt_out-werks && '工厂下的' && gt_out-lgort && '库存地点!'.gt_out-text = icon_red_light.ENDIF.endif."销售视图校验SELECT*FROM MVKEINTO TABLE @DATA(GT_MVKE)WHERE matnr = @gt_out-matnrAND VKORG = @GT_OUT-VKORGAND VTWEG = '00'.IF  GT_MVKE IS INITIAL.gt_out-tabix =  gt_out-tabix &&  '*该' && gt_out-matnr && '物料不存在' && GT_OUT-VKORG && '销售视图!' .gt_out-text = icon_red_light.ENDIF.endif.clear gt_mara.clear gt_marc.clear gt_mard.CLEAR GT_MVKE.IF GT_OUT-AUGRU is NOT INITIAL."订货原因检查SELECT*FROM TVAUINTO TABLE @DATA(GT_TVAU)WHERE AUGRU = @GT_OUT-AUGRU.IF GT_TVAU IS INITIAL.gt_out-tabix =  gt_out-tabix &&  '*该订货原因不存在,请填写正确的订货原因编码!' .gt_out-text = icon_red_light.ENDIF.ENDIF.CLEAR GT_TVAU."条件类型if gt_out-prsdt is initial.gt_out-prsdt = sy-datum.endif.if gt_out-auart <> 'ZFR'.selectkalksfrom knvvinto l_kalkswhere kunnr = gt_out-kunnrand vkorg = gt_out-vkorgand vtweg = '00'and spart = '00'.endselect.if l_kalks = 'Z1'."不含税if gt_out-auart = 'ZYR'.gt_out-kschl = 'ZPR5'.else.gt_out-kschl = 'ZPR1'.endif.elseif l_kalks = 'Z2'."含税if gt_out-auart = 'ZYR'.gt_out-kschl = 'ZPR4'.else.gt_out-kschl = 'ZPR0'.endif.endif.selecta904~kschlkbetrkonwakpeinkmeinfrom a904join konp on konp~knumh = a904~knumhinto gs_a904where a904~kschl = gt_out-kschland kbstat = '02'and a904~kfrst = ''and a904~vkorg = gt_out-vkorgand a904~kunnr = gt_out-kunnrand a904~vkbur = gt_out-vkburand a904~matnr = gt_out-matnrand a904~datbi >= gt_out-prsdtand a904~datab <= gt_out-prsdt.endselect.if gs_a904 is initial.gt_out-tabix =  gt_out-tabix && '*不存在有效价格,请检查!'.gt_out-text = icon_red_light.endif.gt_out-kschl = gs_a904-kschl.gt_out-kbetr = gs_a904-kbetr.gt_out-konwa = gs_a904-konwa.gt_out-kpein = gs_a904-kpein.gt_out-kmein = gs_a904-kmein.clear gs_a904.endif.call function 'CONVERSION_EXIT_CUNIT_OUTPUT'exportinginput  = gt_out-kmeinimportingoutput = gt_out-kmein.ENDIF.gt_out-kwmeng  = gt_tab-kwmeng .if gt_out-txt is initial.append gt_out.endif.clear gt_out.endloop.endform.
*&---------------------------------------------------------------------*
*&      FORM  FRM_OUTPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
form frm_output .data: l_title     type lvc_title,lt_layout   type lvc_s_layo,l_colpos    like sy-cucol value 1,lt_fieldcat type slis_t_fieldcat_alv.lt_layout-cwidth_opt = 'X'.lt_layout-box_fname = 'BOX'.refresh : lt_fieldcat."""" 凭证抬头部份init_fieldcat 'INDEX'  '销售订单'  .init_fieldcat 'TEXT' '标识符' .init_fieldcat 'TABIX' '错误信息'.init_fieldcat 'AUART'  '销售凭证类型'  .init_fieldcat 'VKORG'  '销售组织'  .init_fieldcat 'VTWEG'  '分销渠道' .init_fieldcat 'SPART'  '产品组'  .init_fieldcat 'VKBUR'  '销售办事处'    .init_fieldcat 'KUNNR'  '售达方'  .init_fieldcat 'KUNAG'  '送达方'  .init_fieldcat 'BSTNK'  '客户参考'  .init_fieldcat 'POSNR'  '行项目'  .init_fieldcat 'MATNR'  '物料'  .init_fieldcat 'KWMENG'  '订单数量'  .init_fieldcat 'WERKS'  '工厂'  .init_fieldcat 'LGORT'  '库存地点'  .init_fieldcat 'AUGRU'  '订货原因'  .init_fieldcat 'REMARKS'  '抬头备注'  .init_fieldcat 'LIN'  '行项目备注'  .init_fieldcat 'PRSDT'  '行项目定价日期' .init_fieldcat 'KSCHL'  '条件类型' .init_fieldcat 'KBETR'  '条件金额' .init_fieldcat 'KONWA'  '条件货币' .init_fieldcat 'KPEIN'  '定价单位' .init_fieldcat 'KMEIN'  '计量单位' .call function 'REUSE_ALV_GRID_DISPLAY_LVC'exportingi_callback_program       = sy-repidi_callback_pf_status_set = 'ALV_PF_STATUS'it_fieldcat_lvc          = it_fieldcatis_layout_lvc            = lt_layouti_callback_user_command  = 'USER_COMMAND'
*     I_GRID_TITLE             = L_TITLE
*     I_DEFAULT                = 'X'i_save                   = 'A'tablest_outtab                 = gt_outexceptionsprogram_error            = 1others                   = 2.if sy-subrc <> 0.message id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.endif.
endform.                    " FRM_OUTPUT
**************设置状态栏******************************
form alv_pf_status using rt_extab type slis_t_extab.data: begin of ex_tab occurs 0,fcode like sy-ucomm,end of ex_tab.set pf-status 'ZSD_VA01' excluding ex_tab.
endform.
"ADD BY KDL_D02 20190624
form user_command using r_ucomm like sy-ucommrs_selfield type slis_selfield.data: l_rsnum(10),   "字符型预留号l_rspos(4),    "字符型预留行号l_msg type string.   "存放消息"声明一个ALV实例"取得当前的ALV传给声明的实例,其目的就是取当ALV的对象。call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'importinge_grid = ref_grid."从ALV实例出来的数据更新ALV对应的内表call method ref_grid->check_changed_data.case r_ucomm.when 'INPUT'.data:l_x.loop at gt_out where  box = 'X'.if gt_out-text = icon_red_light.l_x = 'X'.elseif gt_out-text = icon_yellow_light or gt_out-text = icon_green_light .l_x = 'S'.endif.endloop.if l_x = 'X'.message '存在错误数据,不能进行导入!' type 'E'.elseif l_x = 'S'.message '请勿重复导入数据!!!' type 'E'.else.data:answer  type char2.call function 'POPUP_TO_CONFIRM_STEP'exportingdefaultoption  = 'Y'textline1      = '警告:'textline2      = '是否需要进行导入!(PS:导入前请认真核查数据是否有误,如未核查,可以点击否或者取消来取消导入操作)'titel          = '销售订单导入'start_column   = 25start_row      = 6cancel_display = 'X'importinganswer         = answer.if  answer = 'J'.perform frm_va01_bapi.elseif answer = 'N'  or answer = 'A' .message '操作已取消!!!' type  'S'.endif.endif.clear l_x.perform frm_refresh_alv.when '&IC1'.read table gt_out index rs_selfield-tabindex into data(wa_sel_temp).if rs_selfield-value is not initial.IF wa_sel_temp-text = icon_yellow_light or wa_sel_temp-text = icon_green_light.if rs_selfield-fieldname = 'INDEX'."VA03跳转set parameter id 'AUN' field rs_selfield-value.call transaction 'VA03' and skip first screen.endif.ENDIF.endif.when others.exit.endcase.
endform.
form frm_refresh_alv .data: gr_alvgrid type ref to cl_gui_alv_grid.call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'importinge_grid = gr_alvgrid.call method gr_alvgrid->refresh_table_displayexportingi_soft_refresh = 'X'exceptionsfinished       = 1others         = 2.
endform.

ABAP 销售订单BAPI创建批导程序相关推荐

  1. ABAP创建销售订单BAPI示例

    ABAP中创建销售订单BAPI 1.BAPI种类 2.BAPI区别 3.创建抬头行项目输入结构 4.创建接口函数,并配置传入传出参数 5.代码 1.BAPI种类 BAPI_SALESORDER_CRE ...

  2. ABAP 销售订单创建BAPI:BAPI_SALESORDER_CREATEFROMDAT2总结

    1.运用过程的问题与原因 1.1报错:请输入买方或运达方 原因:其实就是订单抬头没有买方,主要是因为销售订单合作伙伴表ORDER_PARTNERS中字段ITM_NUMBER销售和分销凭证的项目号给赋值 ...

  3. SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE

    SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6021 AcctngSales ...

  4. 创建销售订单BAPI一些心得

    1.创建销售订单使用的BAPI BAPI_SALESORDER_CREATEFROMDAT2 但是  BUSINESS OBJECT限制为 BUS2032 使用FM: DATA           L ...

  5. SAP ABAP 销售订单创建BAPI 正常订单/借贷项订单/退货订单

    通过:SD_OBJECT_TYPE_DETERMINE获取业务对象. 正常订单:BAPI_SALESORDER_CREATEFROMDAT2 业务对象:BUS2032 退货订单:BAPI_CUSTOM ...

  6. ABAP 生产订单的创建与修改函数

    如果生产订单过多,可以批量创建生产订单,例如通过上传excel文件来批量创建,系统也有相应BAPI,否则BDC又很慢. 创建生产订单: 'BAPI_PRODORD_CREATE' CALL FUNCT ...

  7. sap 采购订单 bapi (创建外协采购订单-组件为手工输入)

    其实则不然,只要把U改成 'E' 即可 另外:采购价格问题. 如果采购订单凭证日期决定的信息记录有效就会取信息记录,不会取EXCEL . 处理方法:1 保证取不到信息记录. 2 或者 修改后台配置(取 ...

  8. BAPI : 计划订单的创建,修改和删除批导问题

    #遇见问题: 1.这三个BAPI一般用在批导程序中,有时候赋值过程中就会忽视计划订单的前导零.并且,在SE37里面对BAPI进行测试的时候,不输入前导零BAPI也会返回正确的结果,然而程序里并不行.个 ...

  9. SAP ABAP EXCEL 下载模板并导入(数据批导)

    SAP ABAP EXCEL 下载模板并导入(数据批导) 文章目录 SAP ABAP EXCEL 下载模板并导入(数据批导) 前言 上传 EXCEL 模板 下载 EXCEL 模板 定义屏幕 初始化设置 ...

  10. python实现快速创建订单_从销售订单和Od中的产品订单创建新记录

    我想在调用事件后用sale order自定义类中的产品创建记录集.我将在中创建一个记录销售订单和创建发票一样,我将在我的自定义模块中创建记录.在 我所做的是: 在我的自定义类中:class Loadi ...

最新文章

  1. FeiBoStr 斐波那契
  2. 0215互联网新闻 | TikTok在美月度用户数量过去三个月内增加3000万;5G智能手机测试机首批正式交付...
  3. SpringBoot入门教程(十五)集成Druid
  4. python常见数据存储 csv txt pickle
  5. diskgenius扩容c盘重启电脑卡住_电脑开机显示:reboot and select proper boot device怎么办?...
  6. 索引(转载自百度百科)
  7. 计算机键盘打出来都是英语大写怎么办,电脑键盘上大小写怎么切换
  8. 汉字转html实体符号js_js转html实体
  9. python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...
  10. visio studio调试 字符串断点
  11. 数据结构java学生成绩排序_数据结构学习--Java简单排序
  12. max6675一直读0_女儿读完我要收藏起来的英文杂志,它让0~15岁孩子阅读无缝对接!...
  13. php面试题 mysql 主从_php面试题之五——MySQL数据库(基础部分)
  14. 关于vscode CloudMusic 插件无法登陆
  15. wifi无线破解之跑pin最详细教程 2017
  16. Delphi动态创建MainMenu和PopupMenu菜单的方法
  17. android 镜像结构,android查看分区和镜像文件的结构
  18. 手机号码清洗的优势是什么
  19. shentou mianshiti
  20. 6年等来的Win11,果里果气…兼容安卓App这是躺平了?

热门文章

  1. 2021年中国研究生数学建模竞赛D题——抗乳腺癌候选药物的优化建模
  2. 手机通话断了怎么显示链接服务器,手机每次通话三分钟就自动挂断了,怎么回事啊...
  3. Github客户端下载(安卓系统)
  4. Photoshop CC(2018)安装破解
  5. iphone 6p拆机,换开机键排线
  6. DDoS攻击的工具介绍
  7. C语言libiconv编程,libiconv字符集转换库在C#中的使用
  8. Python 地图篇 - 使用pyecharts绘制世界地图、中国地图、省级地图、市级地图实例详解
  9. 机器学习笔记 - 使用Keras + Unet 进行图像分割
  10. SQLyog 安装教程