转自:https://www.cnblogs.com/freeandeasy/p/11810272.html
作者的话:
可以批导创建及修改信息记录的主数据。而且可以对条件中的时间段及其数量等级中的金额进行批导及修改。可以根据自己的实际需求进行修改。这就很棒,就很nice!!!
对于时间段及其数量等级的创建及修改也是在网上各种找资料,不过对于这个BAPI_PRICES_CONDITIONS函数还是没有很好的理解。
report zme11_12 no standard page HEADING.
type-POOLS:truxs,icon.
tables sscrfields. data:begin of it_fname occurs ,
name type char255,
end of it_fname. data:bdcdata like bdcdata occurs with header line. "用来存储屏幕字段参数值,传递录屏参数
data:messtab like bdcmsgcoll occurs with header line. "记录执行BDC过程中产生的消息
data:result_mesg type table of string with header line. "结果信息 data: ti_bapicondct like standard table of bapicondct with header line ,
ti_bapicondhd like standard table of bapicondhd with header line ,
ti_bapicondit like standard table of bapicondit with header line ,
ti_bapicondqs like standard table of bapicondqs with header line ,
ti_bapicondvs like standard table of bapicondvs with header line,
bapiret2 like standard table of bapiret2 with header line,
to_bapiknumhs like standard table of bapiknumhs with header line,
to_mem_initial like standard table of cnd_mem_initial with header line,
ls_a017 type a017. data text2 type text1_007s. "附加税值名
data p type i. types:begin of ty_tab1,
flag type c, "记录标识
wx type c, "是否外协
eina_mahn1 type mahn1, "CLX
eina_urztp type urztp, "价格执行方式
eina_urzzt type urzzt, "编号
eine_norbm type norbm, "标准数量
eine_mwskz type mwskz, "税代码
eine_netpr type iprei, "净价
eine_waers type waers, "净价货币
eine_angnr type angnr, "报价
eine_peinh type epein, "价格单位
* rm06i_ltex1 TYPE ltext, "记录信息文本
rv13a_datab type kodatab, "有效时间从
rv13a_datbi type kodatbi, "有效时间到
* konp_konwa TYPE konwa, "PB00比率单位(货币或百分数)
konp_kschl2 type kscha, "条件类型2
konm_kbetr2 type konp-kbetr, "条件金额2
konp_konwa2 type konwa, "ZVA1比率单位(货币或百分数)
eina_lifnr type elifn, "供应商
eina_matnr type matnr, "材料
eine_ekorg type ekorg, "采购组织
eine_werks type ewerk, "工厂
konm_kstbm type kstbm, "条件等级数量
konm_kbetr type konp-kbetr, "条件金额
end of ty_tab1.
data:gt_tab1 type table of ty_tab1,
wa_tab1 type ty_tab1. types:begin of numb_levels,
flag type c, "记录标识
eina_lifnr type elifn, "供应商
eina_matnr type matnr, "材料
eine_ekorg type ekorg, "采购组织
eine_werks type ewerk, "工厂
konm_kstbm type kstbm, "条件等级数量
konm_kbetr type kbetr, "条件金额
lifab type eina-lifab, "起始时间
lifbi type eina-lifbi, "截止时间
end of numb_levels.
data:gt_nl type table of numb_levels,
wa_nl type numb_levels. types:begin of ty_tab2,
flag type c, "记录标识
wx type c, "是否外协
lifnr type lfa1-lifnr,
matnr type mara-matnr,
ekorg type eine-ekorg,
werks type eine-werks,
netpr type iprei, "PB00金额
konp_konwa type konwa, "比率单位(货币或百分数)
peinh like eine-peinh, "价格单位
konp_kschl2 type kscha, "条件类型2
konp_kbetr2 type kbetr_kond, "金额2
konp_konwa2 type konwa, "比率单位(货币或百分数)
lifab type eina-lifab, "起始时间
lifbi type eina-lifbi, "截止时间
konm_kstbm type kstbm, "条件等级数量
konm_kbetr type kbetr, "条件金额
end of ty_tab2.
data:gt_tab2 type table of ty_tab2,
wa_tab2 type ty_tab2. data: aplfzc() type c, "计划交货天数
normbc() type c , "标准数量
netprc() type c, "净价
peinhc() type c, "条件定价单位
lv_bprme type bprme. "条件单位 SELECTION-screen begin of block blk_001 with frame title text- .
parameters:p_file like rlgrap-filename.
SELECTION-screen end of block blk_001.
SELECTION-screen begin of block blk_002 with frame title text-. "创建或修改
parameters:radio_1 radiobutton group radi, "创建
radio_2 radiobutton group radi. "修改
SELECTION-screen end of block blk_002. SELECTION-screen function key . "应用工具栏增加按钮 initialization.
write icon_change_text as icon to sscrfields-functxt_01+().
sscrfields-functxt_01+(*) = '下载模板'."分配字符位置 at SELECTION-screen.
perform dl_template. "模板下载 at SELECTION-screen on value-REQUEST for p_file .
perform open. START-of-SELECTION.
if radio_1 = 'X'.
perform upload_file1.
perform process_file1.
perform create_me11.
else.
perform upload_file2.
perform process_file2.
perform update_me12.
endif. end-of-SELECTION.
perform result_message. "显示执行结果 *&---------------------------------------------------------------------*
*& Form create_me11
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form create_me11.
loop at gt_tab1 into wa_tab1 where flag = 'X'.
clear: aplfzc,normbc,netprc,peinhc.
aplfzc = wa_tab1-eina_mahn1.
normbc = wa_tab1-eine_norbm.
netprc = wa_tab1-eine_netpr. "净价
peinhc = wa_tab1-eine_peinh.
condense aplfzc no-GAPS.
condense normbc no-GAPS.
condense netprc no-GAPS.
condense peinhc no-GAPS.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = wa_tab1-eina_matnr
importing
output = wa_tab1-eina_matnr.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = wa_tab1-eina_lifnr
importing
output = wa_tab1-eina_lifnr. select single waers from lfm1 into wa_tab1-eine_waers where lifnr = wa_tab1-eina_lifnr and ekorg = wa_tab1-eine_ekorg. if wa_tab1-eine_waers = 'USD'.
wa_tab1-eine_mwskz = 'J0'.
elseif wa_tab1-eine_waers = 'CNY'.
wa_tab1-eine_mwskz = 'J6'.
endif. select single t007s~text1 into text2 from t007s where t007s~mwskz = wa_tab1-eine_mwskz and t007s~spras = sy-langu and t007s~kalsm = 'TAXCN'. "附加税值名
if text2+() = '%'.
p = text2+().
else.
p = text2+().
endif. netprc = netprc * ( + ( p / ) ). "增值税
condense netprc no-GAPS. clear: bdcdata,bdcdata[] .
perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-WERKS'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'EINA-LIFNR' wa_tab1-eina_lifnr."供应商
perform bdc_field using 'EINA-MATNR' wa_tab1-eina_matnr. "材料
perform bdc_field using 'EINE-EKORG' wa_tab1-eine_ekorg. "采购组织
perform bdc_field using 'EINE-WERKS' wa_tab1-eine_werks. "工厂
if wa_tab1-wx = 'X'.
perform bdc_field using 'RM06I-LOHNB' 'X'.
else.
perform bdc_field using 'RM06I-NORMB' 'X'.
endif. perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINA-URZZT'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'EINA-MAHN1' aplfzc. "CLX
perform bdc_field using 'EINA-URZTP' wa_tab1-eina_urztp. "价格执行方式
perform bdc_field using 'EINA-URZZT' wa_tab1-eina_urzzt. "编号 perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-MWSKZ'.
perform bdc_field using 'BDC_OKCODE' '=KO'. "/00
perform bdc_field using 'EINE-NORBM' normbc. "标准数量
perform bdc_field using 'EINE-MWSKZ' wa_tab1-eine_mwskz. "税代码
perform bdc_field using 'EINE-NETPR' netprc. "净价
perform bdc_field using 'EINE-WAERS' wa_tab1-eine_waers. "净价货币 perform bdc_dynpro using 'SAPMV13A' ''.
perform bdc_field using 'BDC_CURSOR' 'RV13A-DATBI'.
perform bdc_field using 'BDC_OKCODE' '=BACK'.
perform bdc_field using 'RV13A-DATAB' wa_tab1-rv13a_datab. "开始时间
perform bdc_field using 'RV13A-DATBI' wa_tab1-rv13a_datbi. "结束时间
perform bdc_field using 'KONP-KPEIN(01)' peinhc. "单位 perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-APLFZ'.
perform bdc_field using 'BDC_OKCODE' '/00'. "/00
perform bdc_field using 'EINE-NORBM' normbc. "标准数量
perform bdc_field using 'EINE-MWSKZ' wa_tab1-eine_mwskz. "税代码
perform bdc_field using 'EINE-NETPR' netprc. "净价 perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-ANGNR'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'EINE-ANGNR' wa_tab1-eine_angnr. "报价 perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'RM06I-LTEX1(01)'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
* PERFORM bdc_field USING 'RM06I-LTEX1(01)' wa_tab1-rm06i_ltex1. "记录信息 call transaction 'ME11' using bdcdata mode 'N' update 'S' MESSAGES into messtab.
read table messtab with key msgtyp = 'E'.
if sy-subrc = .
loop at messtab where msgtyp = 'E'.
call function 'MESSAGE_TEXT_BUILD' "消息编号及变量使用函数转换为消息内容输出
exporting
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
importing
message_text_output = result_mesg.
endloop.
append result_mesg.
clear result_mesg.
else.
perform condition using wa_tab1.
endif. endloop.
endform. "create_me11 *&---------------------------------------------------------------------*
*& Form CONDITION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_wa_tab1 text
*----------------------------------------------------------------------*
form condition using value(lt_tab) type ty_tab1.
data num type n LENGTH . "数量等级行号
clear:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme.
data esokzc type c.
if lt_tab-wx = 'X'.
esokzc = ''.
else.
esokzc = ''.
endif.
select single * into CORRESPONDING fields of ls_a017
from a017 where kschl = 'PB00' "条件类型 "kappl = 'M' "应用:M采购
and lifnr = lt_tab-eina_lifnr "供应商帐户号
and matnr = lt_tab-eina_matnr "物料
and ekorg = lt_tab-eine_ekorg "采购组织
and werks = lt_tab-eine_werks "工厂
and esokz = esokzc. "采购信息记录分类-(0:标准 3:分包合同)
clear esokzc. select single kmein into lv_bprme from konp where knumh = ls_a017-knumh. "konp:条件(项目) kmein:条件单位 ti_bapicondct-operation = '' . "004修改 _009创建
ti_bapicondct-cond_usage = 'A'. "条件表用途:定价
ti_bapicondct-table_no = '' . "条件表
ti_bapicondct-applicatio = 'M' .
ti_bapicondct-cond_type = 'PB00' .
ti_bapicondct-valid_to = lt_tab-rv13a_datbi. "条件记录有效截止日期
ti_bapicondct-valid_from = lt_tab-rv13a_datab. "条件记录有效起始日
ti_bapicondct-cond_no = ls_a017-knumh . "条件记录号
append ti_bapicondct .
clear ti_bapicondct . *KONH的BAPI结构----条件( 抬头 )
ti_bapicondhd-operation = '' .
ti_bapicondhd-cond_no = ls_a017-knumh . "条件记录号
ti_bapicondhd-created_by = sy-uname. "创建对象的人员名称
ti_bapicondhd-creat_date = sy-datum. "记录的创建日期
ti_bapicondhd-cond_usage = 'A' .
ti_bapicondhd-table_no = '' .
ti_bapicondhd-applicatio = 'M' .
ti_bapicondhd-cond_type = ' PB00' .
ti_bapicondhd-valid_from = lt_tab-rv13a_datbi.
ti_bapicondhd-valid_to = lt_tab-rv13a_datab.
append ti_bapicondhd.
clear ti_bapicondhd. *KONP的BAPI结构
ti_bapicondit-operation = '' .
ti_bapicondit-cond_no = ls_a017-knumh.
ti_bapicondit-cond_count = '' . "条件的序列号
ti_bapicondit-applicatio = 'M' .
ti_bapicondit-cond_type = 'PB00' .
ti_bapicondit-scaletype = 'A' .
ti_bapicondit-scalebasin = 'C' . "等级基值指示符,数量规模
ti_bapicondit-scale_qty = . "条件等级数量
ti_bapicondit-calctypcon = 'C' . "条件计算类型--- C:数量 A:百分比
ti_bapicondit-cond_value = netprc. "BAPIs 的货币金额(带有 9 个小数位)-净价
ti_bapicondit-condcurr = lt_tab-eine_waers. "比率单位(货币或百分数):CNY
ti_bapicondit-cond_p_unt = peinhc. "条件定价单位(单位=1)
ti_bapicondit-cond_unit = lv_bprme. "条件单位(EA)
ti_bapicondit-condcurren = lt_tab-eine_waers.
ti_bapicondit-unitmeasur = lv_bprme. "条件等级计量单位
append ti_bapicondit.
clear ti_bapicondit. call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = lt_tab-eina_lifnr
importing
output = lt_tab-eina_lifnr.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = lt_tab-eina_matnr
importing
output = lt_tab-eina_matnr.
*PB00--->设置等级数量
loop at gt_nl into wa_nl where konm_kbetr > . "数量等级金额>0
if lt_tab-eina_lifnr = wa_nl-eina_lifnr and lt_tab-eina_matnr = wa_nl-eina_matnr and lt_tab-eine_ekorg = wa_nl-eine_ekorg and lt_tab-eine_werks = wa_nl-eine_werks.
num = num + .
ti_bapicondqs-operation = '' .
ti_bapicondqs-cond_no = ls_a017-knumh.
ti_bapicondqs-cond_count = '' .
ti_bapicondqs-line_no = num.
ti_bapicondqs-scale_qty = wa_nl-konm_kstbm. "条件等级数量
ti_bapicondqs-cond_unit = lv_bprme. "条件单位
ti_bapicondqs-currency = wa_nl-konm_kbetr. "BAPIs 的货币金额(带有 9 个小数位)
ti_bapicondqs-condcurr = lt_tab-eine_waers. "比率单位(货币或百分数)
append ti_bapicondqs .
clear ti_bapicondqs .
endif.
endloop.
clear num. if lt_tab-eine_waers = 'CNY'.
*如果货币单位为CNY,添加ZVA1类型
ti_bapicondit-operation = '' .
ti_bapicondit-cond_no = ls_a017-knumh.
ti_bapicondit-cond_count = ''. "条件的序列号
ti_bapicondit-applicatio = 'M'.
ti_bapicondit-cond_type = 'ZVA1'. "类型2:ZVA1
ti_bapicondit-scaletype = 'A'. "A基础等级
ti_bapicondit-scalebasin = 'C' . "等级基值指示符,数量规模
ti_bapicondit-scale_qty = ''. "条件等级数量
ti_bapicondit-calctypcon = 'A' . "条件计算类型--- C:数量 A:百分比
if lt_tab-konm_kbetr2 <> or lt_tab-konm_kbetr2 <> ''.
ti_bapicondit-cond_value = lt_tab-konm_kbetr2. "BAPIs 的货币金额(带有 9 个小数位)-(-5%)konm_kbetr2
endif.
ti_bapicondit-condcurr = lt_tab-konp_konwa2. "比率单位(货币或百分数):CNY
ti_bapicondit-cond_unit = lt_tab-konp_konwa2. "条件单位
ti_bapicondit-cond_unit = lv_bprme.
ti_bapicondit-unitmeasur = lv_bprme. "条件等级计量单位
append ti_bapicondit.
clear ti_bapicondit.
*ZVA1--->设置等级数量
loop at gt_nl into wa_nl where konm_kbetr < . "数量等级金额>0
if lt_tab-eina_lifnr = wa_nl-eina_lifnr and lt_tab-eina_matnr = wa_nl-eina_matnr and lt_tab-eine_ekorg = wa_nl-eine_ekorg and lt_tab-eine_werks = wa_nl-eine_werks.
num = num + .
ti_bapicondqs-operation = '' .
ti_bapicondqs-cond_no = ls_a017-knumh.
ti_bapicondqs-cond_count = '' .
ti_bapicondqs-line_no = num.
ti_bapicondqs-scale_qty = wa_nl-konm_kstbm. "条件等级数量
ti_bapicondqs-cond_unit = lv_bprme. "条件单位
ti_bapicondqs-currency = wa_nl-konm_kbetr. "BAPIs 的货币金额(带有 9 个小数位)
ti_bapicondqs-condcurr = lt_tab-konp_konwa2. "比率单位(货币或百分数)
append ti_bapicondqs .
clear ti_bapicondqs .
endif.
endloop.
clear num.
endif. call function 'BAPI_PRICES_CONDITIONS'
tables
ti_bapicondct = ti_bapicondct
ti_bapicondhd = ti_bapicondhd
ti_bapicondit = ti_bapicondit
ti_bapicondqs = ti_bapicondqs
ti_bapicondvs = ti_bapicondvs
to_bapiret2 = bapiret2
to_bapiknumhs = to_bapiknumhs
to_mem_initial = to_mem_initial
exceptions
update_error =
others = .
if sy-subrc = .
data gv_infnr type infnr.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = lt_tab-eina_lifnr
importing
output = lt_tab-eina_lifnr.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = lt_tab-eina_matnr
importing
output = lt_tab-eina_matnr.
select single infnr into gv_infnr from eina where matnr = lt_tab-eina_matnr and lifnr = lt_tab-eina_lifnr.
concatenate gv_infnr ' 信息记录已创建!' into result_mesg.
append result_mesg.
clear result_mesg.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
result_mesg = '操作错误!'.
append result_mesg.
clear:gv_infnr,result_mesg.
endif.
endform. " CONDITION
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form upload_file2 .
data: it_raw_data type truxs_t_text_data.
field-SYMBOLS <fs> type ty_tab2.
field-SYMBOLS:<fw>.
data: i_excel type table of alsmex_tabline,"表格结构。"
w_excel type alsmex_tabline.
data:num_col type i.
refresh: gt_tab2.
"调用此函数,将Excel中的内容以类似坐标的形式存储到I_excel内表中。"
call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
exporting
filename = p_file
i_begin_col =
i_begin_row =
i_end_col = "控制传入字段个数
i_end_row =
tables
intern = i_excel
exceptions
inconsistent_parameters =
upload_ole =
others = .
delete i_excel where row = . "删除第一行文本抬头。
if i_excel is initial.
call function 'POPUP_TO_CONFIRM_WITH_MESSAGE'
exporting
* DEFAULTOPTION = 'Y'
diagnosetext1 = '数据错误'
* DIAGNOSETEXT2 = ' '
* DIAGNOSETEXT3 = ' '
textline1 = 'Excel表格中没有内容!'
titel = '提示' .
return.
endif.
sort i_excel by row col. loop at i_excel into w_excel.
num_col = w_excel-col.
assign component num_col of structure wa_tab2 to <fw>.
<fw> = w_excel-value.
at end of row.
append wa_tab2 to gt_tab2.
clear:wa_tab2.
endat.
clear:w_excel.
endloop.
endform. " UPLOAD_FILE2
*&---------------------------------------------------------------------*
*& Form UPDATE_ME12
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form update_me12.
loop at gt_tab2 into wa_tab2 where flag = 'X'.
clear: aplfzc,normbc,netprc,peinhc.
* aplfzc = wa_tab2-aplfz.
* normbc = wa_tab2-eine_norbm."标准数量
* netprc = wa_tab2-netpr.
peinhc = wa_tab2-peinh.
* CONDENSE aplfzc NO-GAPS.
** Condense normbc No-GAPS.
* CONDENSE netprc NO-GAPS.
condense peinhc no-GAPS. call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = wa_tab2-matnr
importing
output = wa_tab2-matnr.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = wa_tab2-lifnr
importing
output = wa_tab2-lifnr. netprc = wa_tab2-netpr.
condense netprc no-GAPS. clear bdcdata[].
perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-WERKS'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'EINA-LIFNR' wa_tab2-lifnr.
perform bdc_field using 'EINA-MATNR' wa_tab2-matnr.
perform bdc_field using 'EINE-EKORG' wa_tab2-ekorg.
perform bdc_field using 'EINE-WERKS' wa_tab2-werks.
if wa_tab2-wx = 'X'.
perform bdc_field using 'RM06I-LOHNB' 'X'.
else.
perform bdc_field using 'RM06I-NORMB' 'X'.
endif. perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_OKCODE' '=EINE'. perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-MWSKZ'.
perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_dynpro using 'SAPMM06I' ''.
perform bdc_field using 'BDC_CURSOR' 'EINE-ANGNR'.
perform bdc_field using 'BDC_OKCODE' '=KO'. perform bdc_dynpro using 'SAPLV14A' ''.
perform bdc_field using 'BDC_CURSOR' 'VAKE-DATAB(01)'.
perform bdc_field using 'BDC_OKCODE' '=NEWD'. perform bdc_dynpro using 'SAPMV13A' ''.
perform bdc_field using 'BDC_CURSOR' 'KONP-KBETR(01)'.
perform bdc_field using 'BDC_OKCODE' '=SICH'.
perform bdc_field using 'RV13A-DATAB' wa_tab2-lifab.
perform bdc_field using 'RV13A-DATBI' wa_tab2-lifbi.
perform bdc_field using 'KONP-KBETR(01)' netprc. call transaction 'ME12' using bdcdata
mode 'N'
update 'S'
MESSAGES into messtab.
read table messtab with key msgtyp = 'E'.
if sy-subrc = .
loop at messtab where msgtyp = 'E'.
call function 'MESSAGE_TEXT_BUILD' "消息编号及变量使用函数转换为消息内容输出
exporting
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
importing
message_text_output = result_mesg.
endloop.
append result_mesg.
clear result_mesg.
else.
perform condition2 using wa_tab2. "更新数量等级
endif.
endloop.
endform. "UPDATE_ME12 *&---------------------------------------------------------------------*
*& Form condition2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LT_TAB text
*----------------------------------------------------------------------*
form condition2 using value(lt_tab) type ty_tab2.
data num type n LENGTH . "数量等级行号
clear:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme,num.
data esokzc type c.
if lt_tab-wx = 'X'.
esokzc = ''.
else.
esokzc = ''.
endif.
select single * into CORRESPONDING fields of ls_a017
from a017 where kschl = 'PB00' "条件类型
and lifnr = lt_tab-lifnr "供应商帐户号
and matnr = lt_tab-matnr "物料
and ekorg = lt_tab-ekorg "采购组织
and werks = lt_tab-werks "工厂
and datab = lt_tab-lifab "起始时间
and datbi = lt_tab-lifbi "截止时间
and esokz = esokzc. "采购信息记录分类-(0:标准 3:分包合同)
clear esokzc. select single kmein into lv_bprme from konp where knumh = ls_a017-knumh. "konp:条件(项目) kmein: ti_bapicondct-operation = '' . "004修改 _009创建
ti_bapicondct-cond_usage = 'A'. "条件表用途:定价
ti_bapicondct-table_no = '' . "条件表
ti_bapicondct-applicatio = 'M' .
ti_bapicondct-cond_type = 'PB00' .
ti_bapicondct-valid_from = lt_tab-lifab. "条件记录有效起始日
ti_bapicondct-valid_to = lt_tab-lifbi. "条件记录有效截止日期
ti_bapicondct-cond_no = ls_a017-knumh . "条件记录号
append ti_bapicondct .
clear ti_bapicondct . *KONH的BAPI结构----条件( 抬头 )
ti_bapicondhd-operation = '' .
ti_bapicondhd-cond_no = ls_a017-knumh . "条件记录号
ti_bapicondhd-created_by = sy-uname. "创建对象的人员名称
ti_bapicondhd-creat_date = sy-datum. "记录的创建日期
ti_bapicondhd-cond_usage = 'A' .
ti_bapicondhd-table_no = '' .
ti_bapicondhd-applicatio = 'M' .
ti_bapicondhd-cond_type = ' PB00' .
ti_bapicondhd-valid_from = lt_tab-lifab.
ti_bapicondhd-valid_to = lt_tab-lifbi.
append ti_bapicondhd .
clear ti_bapicondhd . *KONP的BAPI结构
ti_bapicondit-operation = '' .
ti_bapicondit-cond_no = ls_a017-knumh.
ti_bapicondit-cond_count = '' . "条件的序列号
ti_bapicondit-applicatio = 'M' .
ti_bapicondit-cond_type = 'PB00' .
ti_bapicondit-scaletype = 'A' .
ti_bapicondit-scalebasin = 'C' . "等级基值指示符,数量规模
ti_bapicondit-scale_qty = . "条件等级数量
ti_bapicondit-calctypcon = 'C' . "条件计算类型--- C:数量 A:百分比
ti_bapicondit-cond_value = netprc. "BAPIs 的货币金额(带有 9 个小数位)-净价
ti_bapicondit-condcurr = lt_tab-konp_konwa. "比率单位(货币或百分数):CNY
ti_bapicondit-cond_p_unt = peinhc. "条件定价单位(单位=1)
ti_bapicondit-cond_unit = lv_bprme. "条件单位
ti_bapicondit-condcurren = lt_tab-konp_konwa.
ti_bapicondit-unitmeasur = lv_bprme. "条件等级计量单位
append ti_bapicondit.
clear ti_bapicondit.
*PB00--->设置等级数量
loop at gt_nl into wa_nl where konm_kbetr > . "数量等级金额>0
if lt_tab-lifab = wa_nl-lifab and lt_tab-lifbi = wa_nl-lifbi.
num = num + .
ti_bapicondqs-operation = '' .
ti_bapicondqs-cond_no = ls_a017-knumh.
ti_bapicondqs-cond_count = '' .
ti_bapicondqs-line_no = num.
ti_bapicondqs-scale_qty = wa_nl-konm_kstbm. "条件等级数量
ti_bapicondqs-cond_unit = lv_bprme. "条件单位
ti_bapicondqs-currency = wa_nl-konm_kbetr. "BAPIs 的货币金额(带有 9 个小数位)
ti_bapicondqs-condcurr = lt_tab-konp_konwa. "比率单位(货币或百分数)
append ti_bapicondqs .
clear ti_bapicondqs .
endif.
endloop.
clear num. if lt_tab-konp_konwa = 'CNY'.
*如果货币单位为CNY,添加ZVA1类型
ti_bapicondit-operation = '' .
ti_bapicondit-cond_no = ls_a017-knumh.
ti_bapicondit-cond_count = ''. "条件的序列号
ti_bapicondit-applicatio = 'M'.
ti_bapicondit-cond_type = lt_tab-konp_kschl2. "进项税扣除ZVA1
ti_bapicondit-scaletype = 'A'. "A基础等级
ti_bapicondit-scalebasin = 'C' . "等级基值指示符,数量规模
ti_bapicondit-scale_qty = ''. "条件等级数量
ti_bapicondit-calctypcon = 'A' . "条件计算类型--- C:数量 A:百分比
if lt_tab-konp_kbetr2 <> or lt_tab-konp_kbetr2 <> ''.
ti_bapicondit-cond_value = lt_tab-konp_kbetr2. "BAPIs 的货币金额(带有 9 个小数位)-(-5%)konm_kbetr2
endif.
ti_bapicondit-condcurr = lt_tab-konp_konwa2. "比率单位(货币或百分数):CNY
ti_bapicondit-cond_unit = lt_tab-konp_konwa2. "条件单位
ti_bapicondit-cond_unit = lv_bprme.
ti_bapicondit-unitmeasur = lv_bprme. "条件等级计量单位
append ti_bapicondit.
clear ti_bapicondit.
*ZVA1--->设置等级数量
loop at gt_nl into wa_nl where konm_kbetr < . "数量等级金额>0
if lt_tab-lifab = wa_nl-lifab and lt_tab-lifbi = wa_nl-lifbi.
num = num + .
ti_bapicondqs-operation = '' .
ti_bapicondqs-cond_no = ls_a017-knumh.
ti_bapicondqs-cond_count = '' .
ti_bapicondqs-line_no = num.
ti_bapicondqs-scale_qty = wa_nl-konm_kstbm. "条件等级数量
ti_bapicondqs-cond_unit = lv_bprme. "条件单位
ti_bapicondqs-currency = wa_nl-konm_kbetr. "BAPIs 的货币金额(带有 9 个小数位)
ti_bapicondqs-condcurr = lt_tab-konp_konwa2. "比率单位(货币或百分数)
append ti_bapicondqs .
clear ti_bapicondqs .
endif.
endloop.
clear num.
endif.
call function 'BAPI_PRICES_CONDITIONS'
tables
ti_bapicondct = ti_bapicondct
ti_bapicondhd = ti_bapicondhd
ti_bapicondit = ti_bapicondit
ti_bapicondqs = ti_bapicondqs
ti_bapicondvs = ti_bapicondvs
to_bapiret2 = bapiret2
to_bapiknumhs = to_bapiknumhs
to_mem_initial = to_mem_initial
exceptions
update_error =
others = .
if sy-subrc = .
concatenate '物料' lt_tab-matnr ' 已创建有效期 ' lt_tab-lifab '-' lt_tab-lifbi into result_mesg.
append result_mesg.
clear result_mesg.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
result_mesg = '操作错误!'.
append result_mesg.
clear result_mesg.
endif.
endform. " CONDITION
*&---------------------------------------------------------------------*
*& Form PROCESS_FILE1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_file1 .
loop at gt_tab1 into wa_tab1.
wa_nl-flag = wa_tab1-flag.
wa_nl-eina_lifnr = wa_tab1-eina_lifnr. "供应商
wa_nl-eina_matnr = wa_tab1-eina_matnr. "材料
wa_nl-eine_ekorg = wa_tab1-eine_ekorg. "采购组织
wa_nl-eine_werks = wa_tab1-eine_werks. "工厂
wa_nl-konm_kstbm = wa_tab1-konm_kstbm.
wa_nl-konm_kbetr = wa_tab1-konm_kbetr.
append wa_nl to gt_nl.
endloop.
endform. " PROCESS_FILE1 *&---------------------------------------------------------------------*
*& Form process_file2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form process_file2 .
loop at gt_tab2 into wa_tab2.
wa_nl-flag = wa_tab1-flag.
wa_nl-lifab = wa_tab2-lifab. "起始时间
wa_nl-lifbi = wa_tab2-lifbi. "截止时间
wa_nl-konm_kstbm = wa_tab2-konm_kstbm.
wa_nl-konm_kbetr = wa_tab2-konm_kbetr.
append wa_nl to gt_nl.
endloop.
endform. "process_file2 *&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(PROGRAM) text
* -->VALUE(DYNPRO) text
*----------------------------------------------------------------------*
form bdc_dynpro using value(program) value(dynpro).
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO *&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(FNAM) text
* -->VALUE(FVAL) text
*----------------------------------------------------------------------*
form bdc_field using value(fnam) value(fval).
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "bdc_field
*&---------------------------------------------------------------------*
*& Form OPEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form open .
call function 'KD_GET_FILENAME_ON_F4'
exporting
program_name = syst-repid
dynpro_number = syst-dynnr
mask = '*.xlsx,*.xls'
static = 'X'
changing
file_name = p_file.
endform. " OPEN *&---------------------------------------------------------------------*
*& Form upload_file
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form upload_file1.
data: it_raw_data type truxs_t_text_data.
field-SYMBOLS <fs> type ty_tab1.
field-SYMBOLS:<fw>.
data: i_excel type table of zalsmex_tabline,"表格结构。"
w_excel type zalsmex_tabline.
data:num_col type i.
refresh: gt_tab1.
"调用此函数,将Excel中的内容以类似坐标的形式存储到I_excel内表中。"
call function 'ZZALSM_EXCEL_TO_INTERNAL_TABLE'
exporting
filename = p_file
i_begin_col =
i_begin_row =
i_end_col = "控制传入字段个数
i_end_row =
tables
intern = i_excel
exceptions
inconsistent_parameters =
upload_ole =
others = .
delete i_excel where row = . "删除第一行文本抬头。
if i_excel is initial.
call function 'POPUP_TO_CONFIRM_WITH_MESSAGE'
exporting
diagnosetext1 = '数据错误'
textline1 = 'Excel表格中没有内容!'
titel = '提示'.
return.
endif.
sort i_excel by row col. loop at i_excel into w_excel.
num_col = w_excel-col.
assign component num_col of structure wa_tab1 to <fw>.
<fw> = w_excel-value.
at end of row.
append wa_tab1 to gt_tab1.
clear:wa_tab1.
endat.
clear:w_excel.
endloop.
endform. " UPLOAD_FILE *&---------------------------------------------------------------------*
*& Form result_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form result_message.
clear: aplfzc,normbc,netprc,peinhc.
clear:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme.
loop at result_mesg.
write: / result_mesg.
endloop.
endform. "sub_output_result
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form dl_template.
case sscrfields-ucomm.
when 'FC01'.
if radio_1 = 'X'.
perform download_template1. "创建
else.
perform download_template2. "修改
endif.
endcase.
endform. " DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TEMPLATE1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_template1 .
data lv_file like rlgrap-filename.
data lv_string type string. call function 'KD_GET_FILENAME_ON_F4'
exporting
* PROGRAM_NAME = SYST-REPID
* DYNPRO_NUMBER = SYST-DYNNR
* field_name = lv_string
static = 'X'
mask = ',EXCEL,*.xls.'
* FILEOPERATION = 'R'
* PATH =
changing
file_name = lv_file.
clear wa_tab1.
wa_tab1-flag = 'X'. "记录标识
wa_tab1-wx = ''. "是否外协
wa_tab1-eina_mahn1 = ''. "CLX
wa_tab1-eina_urztp = ''. "价格执行方式
wa_tab1-eina_urzzt = ''. "编号
wa_tab1-eine_norbm = ''. "标准数量
wa_tab1-eine_mwskz = 'J6'. "税代码
wa_tab1-eine_netpr = ''. "净价
wa_tab1-eine_waers = 'CNY'. "净价货币
wa_tab1-eine_angnr = ''. "报价
wa_tab1-eine_peinh = ''. "价格单位
* wa_tab1-rm06i_ltex1 = '信息文本'. "记录信息文本
wa_tab1-rv13a_datab = ''. "有效时间从
wa_tab1-rv13a_datbi = ''. "有效时间到
* wa_tab1-konp_konwa = 'CNY'. "PB00比率单位(货币或百分数)
wa_tab1-konp_kschl2 = 'ZVA1'. "条件类型2
wa_tab1-konm_kbetr2 = '-5'. "条件金额2
wa_tab1-konp_konwa2 = '%'. "ZVA1比率单位(货币或百分数)
wa_tab1-eina_lifnr = ''. "供应商
wa_tab1-eina_matnr = 'YCL*'. "材料
wa_tab1-eine_ekorg = ''. "采购组织
wa_tab1-eine_werks = ''. "工厂
wa_tab1-konm_kstbm = ''. "条件等级数量
wa_tab1-konm_kbetr = ''. "条件金额
append wa_tab1 to gt_tab1.
clear wa_tab1.
wa_tab1-eina_lifnr = ''. "供应商
wa_tab1-eina_matnr = 'YCL*'. "材料
wa_tab1-eine_ekorg = ''. "采购组织
wa_tab1-eine_werks = ''. "工厂
wa_tab1-konm_kstbm = ''. "条件等级数量
wa_tab1-konm_kbetr = ''. "条件金额
append wa_tab1 to gt_tab1.
clear wa_tab1.
wa_tab1-eina_lifnr = ''. "供应商
wa_tab1-eina_matnr = 'YCL*'. "材料
wa_tab1-eine_ekorg = ''. "采购组织
wa_tab1-eine_werks = ''. "工厂
wa_tab1-konm_kstbm = ''. "条件等级数量
wa_tab1-konm_kbetr = '-5'. "条件金额
append wa_tab1 to gt_tab1.
clear wa_tab1.
wa_tab1-eina_lifnr = ''. "供应商
wa_tab1-eina_matnr = 'YCL*'. "材料
wa_tab1-eine_ekorg = ''. "采购组织
wa_tab1-eine_werks = ''. "工厂
wa_tab1-konm_kstbm = ''. "条件等级数量
wa_tab1-konm_kbetr = '-4'. "条件金额
append wa_tab1 to gt_tab1.
clear wa_tab1. if it_fname is initial.
perform append_filename using:'新记录标识',
'是否外协',
'CLX',
'价格执行方式',
'编号',
'标准数量',
'税代码',
'净价',
'货币',
'报价',
'价格单位',
* '记录信息文本',
'开始时间(8位数字)',
'结束时间(8位数字)',
* 'PB00单位',
'条件类型2',
'金额2',
'单位2',
'供应商',
'物料',
'采购组织',
'工厂',
'条件等级数量',
'条件金额'.
endif.
lv_string = lv_file.
call function 'GUI_DOWNLOAD'
exporting
* BIN_FILESIZE =
filename = lv_string
* filetype = 'DBF'
filetype = 'DAT'
append = 'X'
write_field_separator = 'X'
* codepage = '8400' "指定写文件时用的字符集
tables
data_tab = gt_tab1
fieldnames = it_fname[].
if sy-subrc <> .
message id sy-msgid type sy-msgty number sy-msgno into result_mesg
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
append result_mesg.
clear result_mesg.
endif.
clear: wa_tab1,gt_tab1,it_fname[].
endform. " DOWNLOAD_TEMPLATE1
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TEMPLATE2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_template2 .
data lv_file like rlgrap-filename.
data lv_string type string. call function 'KD_GET_FILENAME_ON_F4'
exporting
* PROGRAM_NAME = SYST-REPID
* DYNPRO_NUMBER = SYST-DYNNR
* field_name = lv_string
static = 'X'
mask = ',EXCEL,*.xls.'
* FILEOPERATION = 'R'
* PATH =
changing
file_name = lv_file.
clear wa_tab2.
wa_tab2-flag = 'X'. "记录标识
wa_tab2-wx = ''. "是否外协
wa_tab2-lifnr = ''. "供应商
wa_tab2-matnr = 'YCL*'. "材料
wa_tab2-ekorg = ''. "采购组织
wa_tab2-werks = ''. "工厂
wa_tab2-netpr = ''. "PB00金额
wa_tab2-konp_konwa = 'CNY'. "PB00金额
wa_tab2-peinh = ''. "价格单位
wa_tab2-konp_kschl2 = 'ZVA1'. "条件类型2
wa_tab2-konp_kbetr2 = '-5'. "条件金额2
wa_tab2-konp_konwa2 = '%'. "ZVA1比率单位(货币或百分数)
wa_tab2-lifab = ''. "有效时间从
wa_tab2-lifbi = ''. "有效时间到
wa_tab2-konm_kstbm = ''. "条件等级数量
wa_tab2-konm_kbetr = ''. "条件金额
append wa_tab2 to gt_tab2.
clear wa_tab2.
wa_tab2-lifab = ''. "有效时间从
wa_tab2-lifbi = ''. "有效时间到
wa_tab2-konm_kstbm = ''. "条件等级数量
wa_tab2-konm_kbetr = ''. "条件金额
append wa_tab2 to gt_tab2.
clear wa_tab2.
wa_tab2-lifab = ''. "有效时间从
wa_tab2-lifbi = ''. "有效时间到
wa_tab2-konm_kstbm = ''. "条件等级数量
wa_tab2-konm_kbetr = '-5'. "条件金额
append wa_tab2 to gt_tab2.
clear wa_tab2.
wa_tab2-lifab = ''. "有效时间从
wa_tab2-lifbi = ''. "有效时间到
wa_tab2-konm_kstbm = ''. "条件等级数量
wa_tab2-konm_kbetr = '-4'. "条件金额
append wa_tab2 to gt_tab2.
clear wa_tab2. if it_fname is initial.
perform append_filename using:'新记录标识',
'是否外协',
'供应商',
'物料',
'采购组织',
'工厂',
'PB00金额',
'货币',
'单位',
'条件类型2',
'百分比',
'货币2',
'开始时间(8位数字)',
'结束时间(8位数字)',
'条件等级数量',
'条件金额'.
endif.
lv_string = lv_file.
call function 'GUI_DOWNLOAD'
exporting
* BIN_FILESIZE =
filename = lv_string
* filetype = 'DBF'
filetype = 'DAT'
append = 'X'
write_field_separator = 'X'
* codepage = '8400' "指定写文件时用的字符集
tables
data_tab = gt_tab2
fieldnames = it_fname[].
if sy-subrc <> .
message id sy-msgid type sy-msgty number sy-msgno into result_mesg
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
append result_mesg.
clear result_mesg.
endif.
clear: wa_tab2,gt_tab2,it_fname[]. endform. " DOWNLOAD_TEMPLATE2 *&---------------------------------------------------------------------*
*& Form append_filename
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NAME text
*----------------------------------------------------------------------*
form append_filename using p_name .
it_fname-name = p_name.
append it_fname.
clear it_fname.
endform. "append_filename