做网站上的在线支付怎么做/seo搜狗
突然想到看到采购项目编号(ebelp)和自己定义的flag数据是一样的,既然这样那为何还要用flag呢,直接用采购项目编号作为判断不就行了么。如果后面几行ebelp为递增的话,那么这几行就是在一个PO里的。还有个改动就是将一些步骤抽到一些函数里。
DATA:BEGIN OF gt_data OCCURS 0,bsart TYPE string,"采购凭证类型lifnr TYPE string,"供应商帐户号ekorg TYPE string,"采购组织ekgrp TYPE string,"采购组bukrs TYPE string,"公司代码ihrez TYPE string,"您的参考 抬头->通信ebelp TYPE string,"采购凭证的项目编号knttp TYPE string,"科目分配类别matnr TYPE string,"商品代码
* txz01 TYPE string,"短文本menge TYPE string,"采购订单数量meins TYPE string,"采购订单的计量单位eeind TYPE string,"交货日期Wnetpr TYPE string,"净价waers TYPE string,"货币 Wmatkl TYPE string,"物料组werks TYPE string,"工厂bednr TYPE string,"需求跟踪号afnam TYPE string,"需求者/请求者姓名mwskz TYPE string,"销售税代码 税码sakto TYPE string,"总帐科目kostl TYPE string,"成本中心anln1 TYPE string,"资产aufnr TYPE string,"订单str1 TYPE string,"行项目文本-来自采购申请项目详细清单str2 TYPE string,"行项目文本-规格型号str3 TYPE string,"行项目文本-RFQ Referencebstae TYPE string,"确认控制END OF gt_data.DATA: BEGIN OF gt_out OCCURS 0,text(255),END OF gt_out.DATA: poheader LIKE TABLE OF bapimepoheader WITH HEADER LINE , "采购订单抬头数据poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,return LIKE TABLE OF bapiret2 WITH HEADER LINE,poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE, "采购订单项目poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE, "采购订单交货计划行的字段poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,poaccount LIKE TABLE OF bapimepoaccount WITH HEADER LINE, "采购订单的帐户分配字段poaccountx LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,pocond LIKE TABLE OF bapimepocond WITH HEADER LINE, "采购订单中的条件pocondx LIKE TABLE OF bapimepocondx WITH HEADER LINE,potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE.DATA: epo LIKE bapimepoheader-po_number.DATA: l_return LIKE return.
DATA: lv_message(255).CONSTANTS: con VALUE 'X'.DATA: pp_file TYPE string.DATA: lifnr TYPE elifn,netpr TYPE bprei,bstae TYPE bstae,matnr TYPE matnr,waers TYPE waers,frontLine like gt_data.PARAMETERS:p_file(128) .AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.PERFORM get_file.START-OF-SELECTION.PERFORM get_data.PERFORM create_po.PERFORM write_out.*&---------------------------------------------------------------------*FORM get_file .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_filename = p_filemask = ',*.txt,*.TXT.'mode = 'O'title = 'File Name'IMPORTINGfilename = p_fileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.pp_file = p_file.
ENDFORM. " GET_FILE
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*FORM get_data .CALL FUNCTION 'GUI_UPLOAD'EXPORTINGfilename = pp_filefiletype = 'ASC'has_field_separator = 'X'
* HEADER_LENGTH = 0read_by_line = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =TABLESdata_tab = gt_dataEXCEPTIONSfile_open_error = 1file_read_error = 2no_batch = 3gui_refuse_filetransfer = 4invalid_type = 5no_authority = 6unknown_error = 7bad_data_format = 8header_not_allowed = 9separator_not_allowed = 10header_too_long = 11unknown_dp_error = 12access_denied = 13dp_out_of_memory = 14disk_full = 15dp_timeout = 16OTHERS = 17.IF sy-subrc <> 0.CASE sy-subrc.WHEN 1.MESSAGE 'FILE_OPEN_ERROR ' TYPE 'E'.WHEN 2.MESSAGE 'FILE_READ_ERROR ' TYPE 'E'.WHEN 3.MESSAGE 'NO_BATCH' TYPE 'E'.WHEN 4.MESSAGE 'GUI_REFUSE_FILETRANSFER ' TYPE 'E'.WHEN 5.MESSAGE 'INVALID_TYPE ' TYPE 'E'.WHEN 6.MESSAGE ' NO_AUTHORITY' TYPE 'E'.WHEN 7.MESSAGE 'UNKNOWN_ERROR' TYPE 'E'.WHEN 8.MESSAGE 'BAD_DATA_FORMAT ' TYPE 'E'.WHEN 9.MESSAGE 'HEADER_NOT_ALLOWED' TYPE 'E'.WHEN 10.MESSAGE 'SEPARATOR_NOT_ALLOWED' TYPE 'E'.WHEN 11.MESSAGE 'HEADER_TOO_LONG ' TYPE 'E'.WHEN 12.MESSAGE 'UNKNOWN_DP_ERROR' TYPE 'E'.WHEN 13.MESSAGE ' ACCESS_DENIED ' TYPE 'E'.WHEN 14.MESSAGE 'DP_OUT_OF_MEMORY ' TYPE 'E'.WHEN 15.MESSAGE 'DISK_FULL ' TYPE 'E'.WHEN 16.MESSAGE 'DP_TIMEOUT' TYPE 'E'.WHEN 17.MESSAGE ' OTHERS ' TYPE 'E'.WHEN OTHERS.ENDCASE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form CREATE_PO
*&---------------------------------------------------------------------*FORM create_po .data: totalline TYPE i .data: i TYPE i VALUE 1.DESCRIBE TABLE gt_data LINES totalline.LOOP AT gt_data.CLEAR waers.waers = gt_data-waers.* 不如读到下一行时在判断前面的是否createPERFORM SETOTHER.
"为了一个po可以采购多个材料,如果下面几个为一个po则行项目编号为1 2 3 新的po的话就为1IF i <= totalline . "CLEAR frontLine.READ TABLE gt_data[] INTO frontLine INDEX ( i + 1 ). "取下一行的行项目编号判断一个PO是否此采购完.IF frontLine-MENGE = 1 or frontLine-MENGE = ''."下一个数据行的flag为1的话就是新的一个PO 或者为空即当前行为最后一行PERFORM SETHEADER.PERFORM CREATEPO.ENDIF.i = i + 1.ENDIF.ENDLOOP.
ENDFORM. " CREATE_PO
*&---------------------------------------------------------------------*
*& Form WRITE_OUT
*&---------------------------------------------------------------------*
FORM write_out .LOOP AT gt_out.WRITE: / gt_out-text.ENDLOOP.
ENDFORM. "write_out" SETPOHEADERFORM SETOTHER.CLEAR netpr.netpr = gt_data-netpr.CLEAR bstae.bstae = gt_data-bstae.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = bstaeIMPORTINGoutput = bstae.CLEAR matnr.matnr = gt_data-matnr.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = matnrIMPORTINGoutput = matnr.poitem-po_item = gt_data-ebelp. "采购凭证的项目编号poitem-acctasscat = gt_data-knttp."科目分配类别poitem-material = matnr."商品代码
* poitem-short_text = gt_data-txz01."短文本poitem-quantity = gt_data-menge."采购订单数量poitem-po_unit = gt_data-meins ."采购订单的计量单位poitem-net_price = netpr."净价poitem-matl_group = gt_data-matkl."物料组poitem-plant = gt_data-werks. "工厂poitem-trackingno = gt_data-bednr."需求跟踪号poitem-preq_name = gt_data-afnam."需求者/请求者姓名poitem-tax_code = gt_data-mwskz."销售税代码poitem-conf_ctrl = bstae."确认控制代码
* poitem-GR_BASEDIV = '' . "基于收货的发票校验 默认为选中 这样设置就是不选中APPEND poitem.CLEAR poitem.poitemx-po_item = gt_data-ebelp. "采购凭证的项目编号poitemx-acctasscat = con ."科目分配类别poitemx-material = con."商品代码
* poitemx-short_text = con."短文本poitemx-quantity = con."采购订单数量poitemx-po_unit = con ."采购订单的计量单位poitemx-net_price = con."净价poitemx-matl_group = con."物料组poitemx-plant = con."工厂poitemx-trackingno = con."需求跟踪号poitemx-preq_name = con."需求者/请求者姓名poitemx-tax_code = con."销售税代码poitemx-conf_ctrl = con."确认控制代码poitemx-ret_item = con."退货项目
* poitemx-GR_BASEDIV = con.APPEND poitemx.CLEAR poitemx.poschedule-po_item = gt_data-ebelp. "采购凭证的项目编号
* poschedule-sched_line = gt_data-ebelp. "采购凭证的项目编号poschedule-del_datcat_ext = 'D'."交货日期的类别poschedule-delivery_date = gt_data-eeind."交货日期poschedule-quantity = gt_data-menge."采购订单数量APPEND poschedule.CLEAR poschedule.poschedulex-po_item = gt_data-ebelp. "采购凭证的项目编号
* poschedulex-sched_line = gt_data-ebelp. "采购凭证的项目编号poschedulex-del_datcat_ext = con."交货日期的类别poschedulex-delivery_date = con."交货日期poschedulex-quantity = con."采购订单数量APPEND poschedulex.CLEAR poschedulex.poaccount-po_item = gt_data-ebelp. "采购凭证的项目编号poaccount-gl_account = gt_data-sakto."总帐科目poaccount-costcenter = gt_data-kostl."成本中心poaccount-asset_no = gt_data-anln1."主资产号poaccount-orderid = gt_data-aufnr."订单号poaccount-co_area = 'BELL'."成本控制APPEND poaccount.CLEAR poaccount.poaccountx-po_item = gt_data-ebelp. "采购凭证的项目编号poaccountx-gl_account = con."总帐科目poaccountx-costcenter = con."成本中心poaccountx-asset_no = con."主资产号poaccountx-orderid = con."订单号poaccountx-co_area = con."成本控制APPEND poaccountx.CLEAR poaccountx.potextitem-po_item = gt_data-ebelp. "采购凭证的项目编号potextitem-text_id = 'F03'."来自采购申请项目详细清单potextitem-text_line = gt_data-str1."行项目文本-来自采购申请项目详细清单APPEND potextitem.CLEAR potextitem.potextitem-po_item = gt_data-ebelp. "采购凭证的项目编号potextitem-text_id = 'F04'." 规格/型号potextitem-text_line = gt_data-str2."行项目文本-规格型号APPEND potextitem.CLEAR potextitem.potextitem-po_item = gt_data-ebelp. "采购凭证的项目编号potextitem-text_id = 'F09'." RFQ Referencepotextitem-text_line = gt_data-str3."行项目文本- RFQ ReferenceAPPEND potextitem.CLEAR potextitem.
ENDFORM.FORM SETHEADER.CLEAR lifnr.lifnr = gt_data-lifnr.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = lifnrIMPORTINGoutput = lifnr.poheader-doc_type = gt_data-bsart.poheader-vendor = lifnr.poheader-purch_org = gt_data-ekorg.poheader-pur_group = gt_data-ekgrp.poheader-comp_code = gt_data-bukrs.poheader-ref_1 = gt_data-ihrez.poheader-doc_date = sy-datum.
* poheader-LANGU = 1.poheader-langu = sy-langu.poheader-currency = waers."货币APPEND poheader.poheaderx-doc_type = con.poheaderx-vendor = con.poheaderx-purch_org = con.poheaderx-pur_group = con.poheaderx-comp_code = con.poheaderx-ref_1 = con.poheaderx-doc_date = con.poheaderx-langu = con.poheaderx-currency = con."货币APPEND poheaderx.ENDFORM.*&---------------------------------------------------------------------*
*& Form CREATEPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATEPO .CALL FUNCTION 'BAPI_PO_CREATE1'EXPORTINGpoheader = poheaderpoheaderx = poheaderx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =IMPORTINGexppurchaseorder = epo
* EXPHEADER =
* EXPPOEXPIMPHEADER =TABLESreturn = returnpoitem = poitempoitemx = poitemx
* POADDRDELIVERY =poschedule = poscheduleposchedulex = poschedulexpoaccount = poaccount
* POACCOUNTPROFITSEGMENT =poaccountx = poaccountx
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =potextitem = potextitem
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =.LOOP AT return WHERE type = 'E' OR type = 'A'.ENDLOOP.IF sy-subrc = 0.CLEAR: lv_message.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.LOOP AT return INTO l_return WHERE type = 'E' .CONCATENATE lv_message l_return-message ';'INTO lv_message.ENDLOOP.CONCATENATE gt_data-ihrez lv_message INTO gt_out-text.APPEND gt_out.CLEAR gt_out.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.CONCATENATE epo '创建成功' INTO gt_out-text.APPEND gt_out.CLEAR gt_out.ENDIF.REFRESH: poitem,poitemx,poschedule,poschedulex,poaccount,poaccountx,potextitem ,poheader,poheaderx,return.CLEAR: poitem,poitemx,poschedule,poschedulex,poaccount,poaccountx,potextitem ,poheader,poheaderx,return.
ENDFORM.