来个人讲懂 SAP ABAP 销售订单Billing Plan创建
新增一个需求,需要SO 创建完后直接生成billing plan,但是标准的BAPI 不可以实现,就上网找到一些信息,
需要创建完SO,之后调用新的Function,生成billing plan ,但是网上找到的SO创建后VBKD-fplnr字段会有值,
我的没有,就找到了以下解决办法:
销售订单创建出具发票计划
客户有这样一个需求反馈,通过接口创建的销售订单,其中某一种类型的订单需要同时创建出具发票计划。

为此查看了销售订单创建BAPI:“SD_SALESDOCUMENT_CREATE”,没有找到相应的参数传入,网上也找了一通,愣是没有收获。

通过F1查看了出具发票计划画面涉及的相关Table,主要涉及的透明表有:FPLA和FPLT。
再通过关联找到了几个相关的函数,顿时有了一点思路,是不是可以通过函数去更新/创建Billing Plan呢?

DEMO 代码如下:
*&---------------------------------------------------------------------*
*& Report ZTEST_BILLPLAN
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_BILLPLAN.
DATA : LV_VBELN LIKE VBAK-VBELN.
DATA : LV_FPLNR LIKE FPLA-FPLNR.
DATA : LV_FPLTR TYPE FPLTR.
DATA :
LT_ZFPLA LIKE TABLE OF FPLAVB WITH HEADER LINE,
LT_ZFPLT LIKE TABLE OF FPLTVB WITH HEADER LINE.
DATA :
LT_ZFPLA_N LIKE TABLE OF FPLAVB WITH HEADER LINE,
LT_ZFPLT_N LIKE TABLE OF FPLTVB WITH HEADER LINE.
LV_VBELN = '1100000242'.
SELECT SINGLE FPLNR
FROM FPLA
INTO LV_FPLNR
WHERE VBELN = LV_VBELN.
CALL FUNCTION 'BILLING_SCHEDULE_READ'
EXPORTING
FPLNR = LV_FPLNR
* I_VFKDAT =
* I_BFKDAT =
TABLES
ZFPLA = LT_ZFPLA
ZFPLT = LT_ZFPLT.
LOOP AT LT_ZFPLA.
MOVE-CORRESPONDING LT_ZFPLA TO LT_ZFPLA_N.
LT_ZFPLA_N-UPDKZ = 'U'.
APPEND LT_ZFPLA_N.
CLEAR : LT_ZFPLA_N , LT_ZFPLA.
ENDLOOP.
*** 填充计划明细
CLEAR LT_ZFPLT_N.
LV_FPLTR = LV_FPLTR + 1.
LT_ZFPLT_N-FPLNR = LV_FPLNR.
LT_ZFPLT_N-FPLTR = LV_FPLTR.
LT_ZFPLT_N-FPTTP = '02'.
LT_ZFPLT_N-TETXT = '0008'.
LT_ZFPLT_N-FKDAT = '20210801'.
LT_ZFPLT_N-FAREG = '2'.
LT_ZFPLT_N-WAERS = 'CNY'.
LT_ZFPLT_N-FAKWR = '7272.73'.
LT_ZFPLT_N-FAKSP = '02'.
LT_ZFPLT_N-FKSAF = 'A'.
LT_ZFPLT_N-AFDAT = '20210801'.
LT_ZFPLT_N-UPDKZ = 'I'.
APPEND LT_ZFPLT_N.
CLEAR LT_ZFPLT_N.
LV_FPLTR = LV_FPLTR + 1.
LT_ZFPLT_N-FPLNR = LV_FPLNR.
LT_ZFPLT_N-FPLTR = LV_FPLTR.
LT_ZFPLT_N-FPTTP = '02'.
LT_ZFPLT_N-TETXT = '0008'.
LT_ZFPLT_N-FKDAT = '20210805'.
LT_ZFPLT_N-FAREG = '2'.
LT_ZFPLT_N-WAERS = 'CNY'.
LT_ZFPLT_N-FAKWR = '20000'.
LT_ZFPLT_N-FAKSP = '02'.
LT_ZFPLT_N-FKSAF = 'A'.
LT_ZFPLT_N-AFDAT = '20210805'.
LT_ZFPLT_N-UPDKZ = 'I'.
APPEND LT_ZFPLT_N.
CALL FUNCTION 'BILLING_SCHEDULE_SAVE'
TABLES
FPLA_NEW = LT_ZFPLA_N
FPLA_OLD = LT_ZFPLA
FPLT_NEW = LT_ZFPLT_N
FPLT_OLD = LT_ZFPLT.
IF SY-SUBRC = 0 .
WRITE : 'OK'.
COMMIT WORK.
ELSE.
WRITE : 'Failure'.
ROLLBACK WORK.
ENDIF.
后续通过BAPI生成销售订单之后,再调用上面的方法完成创建Billing Plan的功能。
【参考代码】
*&---------------------------------------------------------------------*
*& Form UPDATE_BILLING_PLAN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_VBELN text
* -->P_IT_BILL text
*----------------------------------------------------------------------*
FORM UPDATE_BILLING_PLAN TABLES PT_BILL STRUCTURE ZVS_GBILL
USING P_VBELN TYPE VBELN_VA
.
DATA :
LT_ZFPLA LIKE TABLE OF FPLAVB WITH HEADER LINE,
LT_ZFPLT LIKE TABLE OF FPLTVB WITH HEADER LINE.
DATA :
LT_ZFPLA_N LIKE TABLE OF FPLAVB WITH HEADER LINE,
LT_ZFPLT_N LIKE TABLE OF FPLTVB WITH HEADER LINE.
DATA : LT_VBKD LIKE TABLE OF VBKD WITH HEADER LINE.
DATA : LV_FPLTR TYPE FPLTR.
DATA : LV_WAERK LIKE VBAK-WAERK.
*** 销售合同货币
SELECT SINGLE WAERK FROM VBAK
INTO LV_WAERK
WHERE VBELN = P_VBELN.
*** 销售业务数据
SELECT * FROM VBKD
INTO TABLE LT_VBKD
WHERE VBELN = P_VBELN.
DELETE LT_VBKD WHERE POSNR = '000000'.
LOOP AT LT_VBKD.
REFRESH : LT_ZFPLA[],LT_ZFPLT[],
LT_ZFPLA_N[],LT_ZFPLT_N[].
CALL FUNCTION 'BILLING_SCHEDULE_READ'
EXPORTING
FPLNR = LT_VBKD-FPLNR
* I_VFKDAT =
* I_BFKDAT =
TABLES
ZFPLA = LT_ZFPLA
ZFPLT = LT_ZFPLT.
LOOP AT LT_ZFPLA.
MOVE-CORRESPONDING LT_ZFPLA TO LT_ZFPLA_N.
LT_ZFPLA_N-UPDKZ = 'U'.
APPEND LT_ZFPLA_N.
CLEAR : LT_ZFPLA_N , LT_ZFPLA.
ENDLOOP.
LOOP AT PT_BILL WHERE POSNR = LT_VBKD-POSNR.
CLEAR LT_ZFPLT_N.
LV_FPLTR = LV_FPLTR + 1.
LT_ZFPLT_N-FPLNR = LT_VBKD-FPLNR.
LT_ZFPLT_N-FPLTR = LV_FPLTR.
LT_ZFPLT_N-FPTTP = '02'.
LT_ZFPLT_N-TETXT = '0008'.
LT_ZFPLT_N-FKDAT = PT_BILL-AFDAT.
LT_ZFPLT_N-FAREG = '2'.
IF PT_BILL-WAERS <> ''.
LT_ZFPLT_N-WAERS = PT_BILL-WAERS.
ELSE.
LT_ZFPLT_N-WAERS = LV_WAERK.
ENDIF.
LT_ZFPLT_N-FAKWR = PT_BILL-FAKWR.
LT_ZFPLT_N-FAKSP = '02'.
LT_ZFPLT_N-FKSAF = 'A'.
LT_ZFPLT_N-AFDAT = PT_BILL-AFDAT.
LT_ZFPLT_N-UPDKZ = 'I'.
APPEND LT_ZFPLT_N.
ENDLOOP.
CALL FUNCTION 'BILLING_SCHEDULE_SAVE'
TABLES
FPLA_NEW = LT_ZFPLA_N
FPLA_OLD = LT_ZFPLA
FPLT_NEW = LT_ZFPLT_N
FPLT_OLD = LT_ZFPLT.
ENDLOOP.
ENDFORM.
同时需要注意的是,同一个订单不同的行项目会生成不同的出具(发票)计划编号,需要通过表VBKD来关联订单项目。


参考链接:【ABAP】销售订单Billing Plan创建_sap billing plan-CSDN博客
以上是VBKD-fplnr字段有值的处理办法,对于没有值的情况使用以下办法:
1 *&---------------------------------------------------------------------* 2 *& Report Z_CREATE_BILLINGPLAN 3 *&---------------------------------------------------------------------* 4 *& 5 *&---------------------------------------------------------------------* 6 REPORT z_create_billingplan. 7 TYPES: 8 ty_vbapf TYPE STANDARD TABLE OF vbapf. 9 10 DATA: lw_sales_header_in LIKE bapisdhd1, 11 lw_sales_header_inx LIKE bapisdhd1x, 12 uv_vbeln LIKE bapivbeln-vbeln, 13 lt_sales_items_in LIKE TABLE OF bapisditm WITH HEADER LINE, 14 lt_sales_items_inx LIKE TABLE OF bapisditmx WITH HEADER LINE, 15 lt_sales_schedules_in LIKE TABLE OF bapischdl WITH HEADER LINE, 16 lt_sales_schedules_inx LIKE TABLE OF bapischdlx WITH HEADER LINE, 17 lt_sales_conditions_in LIKE TABLE OF bapicond WITH HEADER LINE, 18 lt_sales_conditions_inx LIKE TABLE OF bapicondx WITH HEADER LINE, 19 lt_sales_text LIKE TABLE OF bapisdtext WITH HEADER LINE, 20 lt_sales_partners_in LIKE TABLE OF bapiparnr WITH HEADER LINE, 21 lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE, 22 lt_bapisditm LIKE bapisditm OCCURS 0 WITH HEADER LINE, 23 lt_bapisditmx LIKE bapisditmx OCCURS 0 WITH HEADER LINE, 24 ls_bapisditm TYPE bapisditm, 25 ls_bapisditmx TYPE bapisditmx, 26 ls_ord_header_inx TYPE bapisdh1x OCCURS 0 WITH HEADER LINE, 27 lv_error_flag TYPE abap_bool. 28 29 DATA: l_answer TYPE c. 30 31 DATA:ls_fxfpla TYPE LINE OF va_fplavb_t, 32 ls_fxfplt TYPE LINE OF va_fpltvb_t. 33 DATA:lt_fxfpla TYPE va_fplavb_t, 34 lt_fyfpla TYPE va_fplavb_t, 35 lt_fxfplt TYPE va_fpltvb_t, 36 lt_fyfplt TYPE va_fpltvb_t, 37 ls_fplatmp TYPE fpla. 38 39 DATA: lt_hfpla TYPE TABLE OF fplavb, 40 lt_hfpla2 TYPE TABLE OF fplavb, 41 lt_hfplt TYPE TABLE OF fpltvb, 42 lt_hfplt2 TYPE TABLE OF fpltvb, 43 ls_veda TYPE vedavb, 44 lv_fpart TYPE tfpla-fpart, 45 ls_zfplttmp TYPE fpltvb. 46 47 CLEAR: lt_sales_items_in, lt_sales_items_inx, 48 lt_sales_schedules_in, lt_sales_schedules_inx, 49 lt_sales_conditions_in,lt_sales_conditions_inx, 50 lt_sales_partners_in, 51 lt_return. 52 53 **=> sales order header 54 IF lw_sales_header_in IS INITIAL. 55 lw_sales_header_in-doc_type = 'YCGA'. " 销售凭证类型 56 lw_sales_header_in-sales_org = 'ETSD'. " 销售组织 57 lw_sales_header_in-distr_chan = 'O2'. " 分销渠道 58 lw_sales_header_in-sales_grp = '111'. " 销售组 59 lw_sales_header_in-division = 'J9'. " 产品组 60 lw_sales_header_in-sales_off = 'SD03'. " 销售部门 61 lw_sales_header_in-doc_date = '20250107'. " 凭证日期 62 63 64 lw_sales_header_inx-doc_type = abap_true. 65 lw_sales_header_inx-sales_org = abap_true. 66 lw_sales_header_inx-distr_chan = abap_true. 67 lw_sales_header_inx-sales_grp = abap_true. 68 lw_sales_header_inx-division = abap_true. 69 lw_sales_header_inx-sales_off = abap_true. 70 lw_sales_header_inx-doc_date = abap_true. 71 lw_sales_header_inx-s_proc_ind = abap_true. 72 lw_sales_header_inx-ship_type = abap_true. 73 ENDIF. 74 75 76 IF lt_sales_partners_in[] IS INITIAL. 77 CLEAR : lt_sales_partners_in. 78 lt_sales_partners_in-partn_role = 'SP'. " 79 lt_sales_partners_in-partn_numb = '3002290906'. 80 APPEND lt_sales_partners_in. 81 82 CLEAR : lt_sales_partners_in. 83 lt_sales_partners_in-partn_role = 'SH'. " 84 lt_sales_partners_in-partn_numb = '3002290906'. 85 APPEND lt_sales_partners_in. 86 87 ENDIF. 88 89 **=> sales order item 90 lt_sales_items_in-itm_number = '10'. 91 lt_sales_items_in-material = '000000001000000020'. " 物料 92 lt_sales_items_in-target_qty = 1. " 93 lt_sales_items_in-target_qu = 'ST'. " 94 lt_sales_items_in-profit_ctr = 'PSD999999'. " 利润中心 95 96 lt_sales_items_inx-itm_number = '10'. 97 lt_sales_items_inx-material = abap_true. 98 lt_sales_items_inx-sales_unit = abap_true. 99 lt_sales_items_inx-plant = abap_true. 100 lt_sales_items_inx-store_loc = abap_true. 101 lt_sales_items_inx-ship_type = abap_true. 102 lt_sales_items_inx-profit_ctr = abap_true . " 利润中心 103 104 APPEND: lt_sales_items_in, lt_sales_items_inx. 105 CLEAR: lt_sales_items_in, lt_sales_items_inx. 106 107 108 DATA:lv_string TYPE string, 109 lv_char(960) TYPE c, 110 ls_bape_vbap TYPE bape_vbap, 111 ls_bape_vbapx TYPE bape_vbapx, 112 ls_bape_vbak TYPE bape_vbak, 113 ls_bape_vbakx TYPE bape_vbakx. 114 115 DATA: lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE. 116 117 118 *添加扩展字段 119 CLEAR: ls_bape_vbap,lt_extensionin. 120 ls_bape_vbap-posnr = '000010'. 121 ls_bape_vbap-/tkag/gt_sl_equnr = '10000006' . " Equipment 122 123 lt_extensionin-structure = 'BAPE_VBAP'. 124 125 CALL METHOD cl_abap_container_utilities=>fill_container_c 126 EXPORTING 127 im_value = ls_bape_vbap 128 IMPORTING 129 ex_container = lt_extensionin+30 130 EXCEPTIONS 131 illegal_parameter_type = 1 132 OTHERS = 2. 133 APPEND lt_extensionin. 134 135 136 CALL FUNCTION 'SD_SALESDOCUMENT_CREATE' 137 EXPORTING 138 sales_header_in = lw_sales_header_in 139 sales_header_inx = lw_sales_header_inx 140 convert_parvw_auart = 'X' 141 IMPORTING 142 salesdocument_ex = uv_vbeln 143 TABLES 144 return = lt_return 145 sales_items_in = lt_sales_items_in 146 sales_items_inx = lt_sales_items_inx 147 sales_partners = lt_sales_partners_in 148 extensionex = lt_extensionin. 149 IF uv_vbeln IS NOT INITIAL. 150 COMMIT WORK. 151 PERFORM frm_create_bill_plan. 152 ELSE. 153 MESSAGE 'The billing plan creation failed!' TYPE 'S' DISPLAY LIKE 'E'. 154 ENDIF. 155 156 *&---------------------------------------------------------------------* 157 *& Form FRM_CREATE_BILL_PLAN 158 *&---------------------------------------------------------------------* 159 * text 160 *----------------------------------------------------------------------* 161 * --> p1 text 162 * <-- p2 text 163 *----------------------------------------------------------------------* 164 FORM frm_create_bill_plan . 165 166 *update billing plan 167 TYPES ty_vbapf TYPE STANDARD TABLE OF vbapf. 168 DATA:ls_xvbak TYPE vbak, 169 lt_xvbap TYPE shp_vl10_vbap_t, 170 lt_xvbep TYPE shp_vl10_vbep_t, 171 lt_xvbpa TYPE vbpavb_tab, 172 ls_xvbkd TYPE vbkdvb, 173 lt_xvbkd TYPE shp_vl10_vbkd_t, 174 lt_yvbkd TYPE shp_vl10_vbkd_t, 175 ls_yvbkd TYPE LINE OF shp_vl10_vbkd_t, 176 lt_xvbapf TYPE ty_vbapf, 177 lt_xvbfa TYPE shp_vl10_vbfa_t, 178 ls_xvbuk TYPE vbukvb, 179 lt_xvbup TYPE shp_vl10_vbup_t, 180 lt_xvbuv TYPE shp_vl10_vbuv_t, 181 ls_yvbak TYPE vbak, 182 lt_yvbap TYPE shp_vl10_vbap_t, 183 lt_yvbep TYPE shp_vl10_vbep_t, 184 lt_yvbfa TYPE shp_vl10_vbfa_t, 185 ls_yvbuk TYPE vbukvb, 186 lt_yvbup TYPE shp_vl10_vbup_t, 187 lt_yvbuv TYPE shp_vl10_vbuv_t, 188 ls_tvak TYPE tvak, 189 ls_komk TYPE komk, 190 ls_komp TYPE komp, 191 lt_komv TYPE STANDARD TABLE OF komv, 192 lt_komvtmp TYPE STANDARD TABLE OF komv, 193 ls_komv TYPE komv. 194 DATA:it_redeliver TYPE vbapdelv_t, 195 ls_redeliver TYPE vbapdelv, 196 xt_msg TYPE bal_t_msg, 197 lv_tabix TYPE sy-tabix, 198 lv_error(1) TYPE c. 199 200 DATA : lv_fplnr LIKE fpla-fplnr, 201 lv_fpltr TYPE fpltr, 202 lt_zfpla TYPE STANDARD TABLE OF fplavb, 203 lt_zfplt TYPE STANDARD TABLE OF fpltvb, 204 lt_zfpla_n LIKE TABLE OF fplavb WITH HEADER LINE, 205 lt_zfplt_n LIKE TABLE OF fpltvb WITH HEADER LINE, 206 ls_zfplt_n TYPE fpltvb. 207 208 SELECT vbeln, posnr, prctr 209 FROM vbap 210 INTO TABLE @DATA(lt_vbap) 211 WHERE vbeln = @uv_vbeln. 212 213 LOOP AT lt_vbap INTO DATA(ls_vbap) . 214 CLEAR: ls_bapisditm , ls_bapisditmx. 215 216 ls_bapisditmx-itm_number = ls_vbap-posnr. 217 ls_bapisditmx-updateflag = 'U'. 218 APPEND ls_bapisditmx TO lt_bapisditmx. 219 220 CLEAR ls_vbap. 221 ENDLOOP. 222 ls_ord_header_inx-updateflag = 'U'. 223 224 CALL FUNCTION 'BAPI_SALESORDER_CHANGE' 225 EXPORTING 226 salesdocument = uv_vbeln 227 * ORDER_HEADER_IN = 228 order_header_inx = ls_ord_header_inx 229 * SIMULATION = 230 * BEHAVE_WHEN_ERROR = ' ' 231 * INT_NUMBER_ASSIGNMENT = ' ' 232 * LOGIC_SWITCH = 233 * NO_STATUS_BUF_INIT = ' ' 234 TABLES 235 return = lt_return 236 order_item_in = lt_bapisditm 237 order_item_inx = lt_bapisditmx 238 * PARTNERS = 239 * PARTNERCHANGES = 240 * PARTNERADDRESSES = 241 * ORDER_CFGS_REF = 242 * ORDER_CFGS_INST = 243 * ORDER_CFGS_PART_OF = 244 * ORDER_CFGS_VALUE = 245 * ORDER_CFGS_BLOB = 246 * ORDER_CFGS_VK = 247 * ORDER_CFGS_REFINST = 248 * SCHEDULE_LINES = 249 * SCHEDULE_LINESX = 250 * ORDER_TEXT = 251 * ORDER_KEYS = 252 * CONDITIONS_IN = 253 * CONDITIONS_INX = 254 * EXTENSIONIN = 255 * EXTENSIONEX = 256 . 257 LOOP AT lt_return INTO DATA(ls_return_check) WHERE type = 'E' OR type = 'W'. 258 lv_error_flag = abap_true. 259 CLEAR ls_return_check. 260 ENDLOOP. 261 262 263 IF lv_error_flag = abap_false. 264 REFRESH:lt_hfpla,lt_hfpla2,lt_hfplt,lt_hfplt2. 265 PERFORM prm_sales_order_read USING uv_vbeln 266 it_redeliver 267 CHANGING lv_error 268 ls_xvbak 269 lt_xvbap 270 lt_xvbep 271 lt_xvbpa 272 lt_xvbkd 273 lt_xvbapf 274 lt_xvbfa 275 ls_xvbuk 276 lt_xvbup 277 lt_xvbuv 278 ls_yvbak 279 lt_yvbap 280 lt_yvbep 281 lt_yvbfa 282 ls_yvbuk 283 lt_yvbup 284 lt_yvbuv 285 xt_msg 286 lt_zfpla 287 lt_zfplt. 288 289 290 LOOP AT lt_xvbkd INTO DATA(ls_xvbkd2) . 291 REFRESH:lt_hfpla,lt_hfpla2,lt_hfplt,lt_hfplt2. 292 IF ls_xvbkd2-fplnr IS INITIAL. 293 ls_veda-vbeln = uv_vbeln. 294 lv_fpart = 'Y1'. 295 CALL FUNCTION 'BILLING_SCHEDULE_GENERATE' 296 EXPORTING 297 i_fpart = lv_fpart 298 i_veda = ls_veda 299 i_fkdat = sy-datum 300 i_upd_fpla = 'U' 301 i_upd_fplt = 'U' 302 i_fpla_only = 'X' 303 IMPORTING 304 e_fplnr = lv_fplnr 305 TABLES 306 fpla_new = lt_hfpla 307 fpla_old = lt_hfpla2 308 fplt_new = lt_hfplt 309 fplt_old = lt_hfplt2. 310 311 CALL FUNCTION 'BILLING_SCHEDULE_GET_NUMBER' 312 EXPORTING 313 i_fplnr = lv_fplnr 314 i_vbeln = uv_vbeln 315 IMPORTING 316 e_fplnr = lv_fplnr 317 TABLES 318 fpla_new = lt_hfpla 319 fplt_new = lt_hfplt. 320 321 322 ls_xvbkd2-fplnr = lv_fplnr. 323 ls_xvbkd2-updkz = 'U'. 324 325 MODIFY lt_xvbkd FROM ls_xvbkd2 TRANSPORTING fplnr updkz WHERE posnr = ls_xvbkd2-posnr. 326 327 IF lines( lt_hfpla[] ) NE 0. 328 IF ls_xvbkd2-posnr <> '000000'. 329 330 LOOP AT lt_hfpla INTO DATA(ls_hfpla_tmp). 331 READ TABLE lt_xvbkd INTO DATA(ls_xvbkd_tmp) WITH KEY posnr = '000000'. 332 IF sy-subrc = 0. 333 *使header billing plan 值与item billing plan值相同 334 ls_hfpla_tmp-rfpln = ls_xvbkd_tmp-fplnr. 335 MODIFY lt_hfpla FROM ls_hfpla_tmp TRANSPORTING rfpln WHERE fplnr = ls_hfpla_tmp-fplnr. 336 CLEAR ls_xvbkd_tmp. 337 ENDIF. 338 CLEAR ls_hfpla_tmp. 339 ENDLOOP. 340 341 ENDIF. 342 APPEND LINES OF lt_hfpla TO lt_zfpla_n. 343 ENDIF. 344 345 ELSE. 346 * lv_fplnr = ls_xvbkd2-fplnr. 347 ENDIF. 348 349 CLEAR :ls_xvbkd2,lv_fplnr. 350 ENDLOOP. 351 352 "update data 353 LOOP AT lt_zfpla_n INTO DATA(ls_zfpla). 354 CLEAR : ls_fxfpla. 355 MOVE-CORRESPONDING ls_zfpla TO ls_fxfpla. 356 APPEND ls_fxfpla TO lt_fxfpla. 357 ENDLOOP. 358 359 *If there is only one line of billing plan, it’s closing invoice 360 SORT lt_xvbkd BY posnr. 361 CLEAR: lv_fpltr, lt_zfplt_n,lt_zfplt_n[]. 362 LOOP AT lt_xvbkd INTO DATA(ls_xvbkd_zfplt) . 363 *put billing plan data 364 CLEAR ls_zfplt_n. 365 lv_fpltr = lv_fpltr + 1. 366 ls_zfplt_n-mandt = sy-mandt. 367 ls_zfplt_n-fplnr = ls_xvbkd_zfplt-fplnr. 368 ls_zfplt_n-fpltr = lv_fpltr. 369 ls_zfplt_n-afdat = SY-DATUM. 370 ls_zfplt_n-tetxt = '0008'. 371 * ls_zfplt_n-fproz = ls_bill_plan-percentage. 372 ls_zfplt_n-fakwr = 100. 373 ls_zfplt_n-fareg = '3'. 374 ls_zfplt_n-fpttp = '02'. 375 ls_zfplt_n-fkarv = 'YYMA'. 376 ls_zfplt_n-updkz = 'I'. 377 APPEND ls_zfplt_n TO lt_zfplt_n. 378 AT NEW posnr. 379 CLEAR lv_fpltr. 380 ENDAT. 381 CLEAR ls_xvbkd_zfplt. 382 ENDLOOP. 383 LOOP AT lt_zfplt_n INTO DATA(ls_zfplt2). 384 CLEAR : ls_fxfplt. 385 MOVE-CORRESPONDING ls_zfplt2 TO ls_fxfplt. 386 APPEND ls_fxfplt TO lt_fxfplt. 387 ENDLOOP. 388 389 PERFORM prm_document_update CHANGING ls_xvbak 390 lt_xvbap 391 lt_xvbep 392 lt_xvbpa 393 lt_xvbkd 394 lt_xvbfa 395 ls_xvbuk 396 lt_xvbup 397 lt_xvbuv 398 lt_xvbapf 399 ls_yvbak 400 lt_yvbap 401 lt_yvbep 402 lt_yvbfa 403 ls_yvbuk 404 lt_yvbup 405 lt_yvbuv 406 lt_fxfpla 407 lt_fxfplt 408 lt_fyfpla 409 lt_fyfplt. 410 SELECT SINGLE vbeln, posnr ,fplnr 411 FROM vbkd 412 INTO @DATA(lv_vbkd_check) 413 WHERE vbeln = @uv_vbeln 414 AND fplnr = ''. 415 IF sy-subrc <> 0 . 416 *Give a response message to show if the billing plan has been created successfully . 417 MESSAGE 'The billing plan has been created successfully!' TYPE 'S'. 418 ELSE. 419 *Give a response message to show if the billing plan creation failed! 420 MESSAGE 'The billing plan creation failed!' TYPE 'S' DISPLAY LIKE 'E'. 421 ENDIF. 422 423 ELSE. 424 MESSAGE 'The billing plan creation failed!' TYPE 'S' DISPLAY LIKE 'E'. 425 ENDIF. 426 427 ENDFORM. 428 *&---------------------------------------------------------------------* 429 *& Form PRM_SALES_ORDER_READ 430 *&---------------------------------------------------------------------* 431 * text 432 *----------------------------------------------------------------------* 433 * -->P_UV_VBELN text 434 * -->P_IT_REDELIVER text 435 * <--P_LV_ERROR text 436 * <--P_LS_XVBAK text 437 * <--P_LT_XVBAP text 438 * <--P_LT_XVBEP text 439 * <--P_LT_XVBPA text 440 * <--P_LT_XVBKD text 441 * <--P_LT_XVBAPF text 442 * <--P_LT_XVBFA text 443 * <--P_LS_XVBUK text 444 * <--P_LT_XVBUP text 445 * <--P_LT_XVBUV text 446 * <--P_LS_YVBAK text 447 * <--P_LT_YVBAP text 448 * <--P_LT_YVBEP text 449 * <--P_LT_YVBFA text 450 * <--P_LS_YVBUK text 451 * <--P_LT_YVBUP text 452 * <--P_LT_YVBUV text 453 * <--P_XT_MSG text 454 * <--P_LT_ZFPLA text 455 * <--P_LT_ZFPLT text 456 *----------------------------------------------------------------------* 457 FORM prm_sales_order_read USING i_vbeln TYPE vbeln_va 458 it_vbapdelv TYPE vbapdelv_t 459 CHANGING e_error TYPE xfeld 460 es_xvbak TYPE vbak 461 et_xvbap TYPE shp_vl10_vbap_t 462 et_xvbep TYPE shp_vl10_vbep_t 463 et_xvbpa TYPE vbpavb_tab 464 et_xvbkd TYPE shp_vl10_vbkd_t 465 et_xvbapf TYPE ty_vbapf 466 et_xvbfa TYPE shp_vl10_vbfa_t 467 es_xvbuk TYPE vbukvb 468 et_xvbup TYPE shp_vl10_vbup_t 469 et_xvbuv TYPE shp_vl10_vbuv_t 470 es_yvbak TYPE vbak 471 et_yvbap TYPE shp_vl10_vbap_t 472 et_yvbep TYPE shp_vl10_vbep_t 473 et_yvbfa TYPE shp_vl10_vbfa_t 474 es_yvbuk TYPE vbukvb 475 et_yvbup TYPE shp_vl10_vbup_t 476 et_yvbuv TYPE shp_vl10_vbuv_t 477 xt_msg TYPE bal_t_msg 478 et_fxfpla TYPE va_fplavb_t 479 et_fxfplt TYPE va_fpltvb_t. 480 481 DATA: 482 l_ownls TYPE xfeld, 483 ls_vbapdelv TYPE vbapdelv, 484 ls_vbap TYPE vbapvb, 485 lt_vbep TYPE shp_vl10_vbep_t. 486 487 CALL FUNCTION 'SD_SALES_DOCUMENT_INIT' 488 EXPORTING 489 status_buffer_refresh = 'X' 490 keep_lock_entries = ' ' 491 simulation_mode_bapi = ' '. 492 493 CALL FUNCTION 'SD_SALES_DOCUMENT_READ' 494 EXPORTING 495 document_number = i_vbeln 496 EXCEPTIONS 497 error_message = 1. 498 IF sy-subrc <> 0. 499 e_error = 'X'. 500 ENDIF. 501 * read header data 502 CALL FUNCTION 'SD_VBAK_SINGLE_READ' 503 EXPORTING 504 i_vbeln = i_vbeln 505 IMPORTING 506 e_vbak = es_xvbak 507 EXCEPTIONS 508 record_not_found = 1 509 OTHERS = 2. 510 IF sy-subrc <> 0. 511 e_error = 'X'. 512 ENDIF. 513 514 LOOP AT it_vbapdelv INTO ls_vbapdelv. 515 * read item data 516 CALL FUNCTION 'SD_VBAP_SINGLE_READ' 517 EXPORTING 518 i_vbeln = i_vbeln 519 i_posnr = ls_vbapdelv-posnr 520 i_refresh_buffer = 'X' 521 IMPORTING 522 e_vbapvb = ls_vbap 523 EXCEPTIONS 524 record_not_found = 1 525 OTHERS = 2. 526 IF sy-subrc = 0. 527 IF ls_vbap-werks IS INITIAL. 528 CLEAR ls_vbap-logsys. 529 ELSE. 530 CALL FUNCTION 'AIP01_PLANT_DETERMINE' 531 EXPORTING 532 i_werks = ls_vbap-werks 533 IMPORTING 534 e_ownls = l_ownls 535 e_logsys = ls_vbap-logsys 536 EXCEPTIONS 537 invalid_import_parameters = 1 538 plant_not_found = 2 539 vendor_not_found = 3 540 logsys_not_found = 4 541 rfcdest_not_found = 5 542 OTHERS = 6. 543 IF sy-subrc <> 0 OR NOT l_ownls IS INITIAL. 544 CLEAR ls_vbap-logsys. 545 ENDIF. 546 ENDIF. 547 ls_vbap-deliver = ls_vbapdelv-redeliver. 548 APPEND ls_vbap TO et_xvbap. 549 ELSE. 550 e_error = 'X'. 551 ENDIF. 552 * read schedule line data 553 CLEAR lt_vbep. 554 CALL FUNCTION 'SD_VBEP_READ_WITH_POSNR' 555 EXPORTING 556 i_vbeln = i_vbeln 557 i_posnr = ls_vbapdelv-posnr 558 i_refresh_buffer = 'X' 559 TABLES 560 et_vbepvb = lt_vbep 561 EXCEPTIONS 562 record_not_found = 1 563 OTHERS = 2. 564 565 IF sy-subrc <> 0. 566 * Implement suitable error handling here 567 ENDIF. 568 APPEND LINES OF lt_vbep TO et_xvbep. 569 ENDLOOP. 570 571 * read header status 572 CALL FUNCTION 'SD_VBUK_SINGLE_READ' 573 EXPORTING 574 i_vbeln = i_vbeln 575 IMPORTING 576 e_vbukvb = es_xvbuk 577 EXCEPTIONS 578 record_not_found = 1 579 OTHERS = 2. 580 IF sy-subrc <> 0. 581 * Implement suitable error handling here 582 ENDIF. 583 es_xvbuk-updkz = ''."""ADD 584 * read all position status 585 CALL FUNCTION 'SD_VBUP_READ_WITH_VBELN' 586 EXPORTING 587 i_vbeln = i_vbeln 588 TABLES 589 et_vbupvb = et_xvbup 590 EXCEPTIONS 591 record_not_found = 1 592 OTHERS = 2. 593 IF sy-subrc <> 0. 594 * Implement suitable error handling here 595 ENDIF. 596 * read partner data 597 CALL FUNCTION 'SD_VBPA_READ_WITH_VBELN' 598 EXPORTING 599 i_vbeln = i_vbeln 600 TABLES 601 et_vbpavb = et_xvbpa 602 EXCEPTIONS 603 record_not_found = 1 604 OTHERS = 2. 605 606 IF sy-subrc <> 0. 607 * Implement suitable error handling here 608 ENDIF. 609 610 * read business data 611 CALL FUNCTION 'SD_VBKD_READ_WITH_VBELN' 612 EXPORTING 613 i_vbeln = i_vbeln 614 TABLES 615 et_vbkdvb = et_xvbkd 616 EXCEPTIONS 617 record_not_found = 1 618 OTHERS = 2. 619 620 IF sy-subrc <> 0. 621 e_error = 'X'. 622 ENDIF. 623 624 * read incompletion protocol 625 CALL FUNCTION 'SD_VBUV_READ_WITH_VBELN' 626 EXPORTING 627 i_vbeln = i_vbeln 628 TABLES 629 et_vbuvvb = et_xvbuv 630 EXCEPTIONS 631 record_not_found = 1 632 OTHERS = 2. 633 IF sy-subrc <> 0. 634 * Implement suitable error handling here 635 ENDIF. 636 * read document flow 637 CALL FUNCTION 'SD_VBFA_READ_WITH_VBELV' 638 EXPORTING 639 i_vbelv = i_vbeln 640 TABLES 641 et_vbfavb = et_xvbfa 642 EXCEPTIONS 643 record_not_found = 1 644 OTHERS = 2. 645 646 IF sy-subrc <> 0. 647 * Implement suitable error handling here 648 ENDIF. 649 650 651 DATA:ls_xvbuv LIKE vbuvvb."et_xvbuv. 652 DATA:ls_xvbfa LIKE vbfavb."et_xvbfa. 653 DATA:ls_xvbup LIKE vbupvb."et_xvbup. 654 DATA:ls_xvbkd LIKE vbkdvb."et_xvbkd. 655 DATA:ls_xvbpa LIKE vbpavb."et_xvbpa. 656 DATA:ls_xvbep LIKE vbepvb."VBEPVB 657 DATA:ls_xvbap LIKE vbapvb."VBEPVB 658 LOOP AT et_xvbuv INTO ls_xvbuv. 659 ls_xvbuv-updkz = ''. 660 MODIFY et_xvbuv FROM ls_xvbuv. 661 ENDLOOP. 662 663 LOOP AT et_xvbfa INTO ls_xvbfa. 664 ls_xvbfa-updkz = ''. 665 MODIFY et_xvbfa FROM ls_xvbfa. 666 ENDLOOP. 667 668 LOOP AT et_xvbup INTO ls_xvbup. 669 ls_xvbup-updkz = ''. 670 MODIFY et_xvbup FROM ls_xvbup. 671 ENDLOOP. 672 673 LOOP AT et_xvbkd INTO ls_xvbkd. 674 ls_xvbkd-updkz = ''. 675 MODIFY et_xvbkd FROM ls_xvbkd. 676 ENDLOOP. 677 678 LOOP AT et_xvbpa INTO ls_xvbpa. 679 ls_xvbpa-updkz = ''. 680 MODIFY et_xvbpa FROM ls_xvbpa. 681 ENDLOOP. 682 LOOP AT et_xvbep INTO ls_xvbep. 683 ls_xvbep-updkz = 'U'. 684 MODIFY et_xvbep FROM ls_xvbep. 685 ENDLOOP. 686 LOOP AT et_xvbap INTO ls_xvbap. 687 ls_xvbap-updkz = 'U'. 688 MODIFY et_xvbap FROM ls_xvbap. 689 ENDLOOP. 690 * build cumulated document flow 691 CALL FUNCTION 'RV_XVBAPF_CREATE' 692 EXPORTING 693 vbeln = i_vbeln 694 TABLES 695 fxvbfa = et_xvbfa 696 fxvbapf = et_xvbapf. 697 698 REFRESH: et_fxfpla,et_fxfplt. 699 IF et_xvbkd[] IS NOT INITIAL. 700 SELECT * INTO CORRESPONDING FIELDS OF TABLE et_fxfpla FROM fpla FOR ALL ENTRIES IN et_xvbkd WHERE fplnr = et_xvbkd-fplnr AND vbeln = i_vbeln. 701 ENDIF. 702 IF et_fxfpla[] IS NOT INITIAL. 703 SELECT * INTO CORRESPONDING FIELDS OF TABLE et_fxfplt FROM fplt FOR ALL ENTRIES IN et_fxfpla WHERE fplnr = et_fxfpla-fplnr. 704 ENDIF. 705 706 * keep original data 707 es_yvbak = es_xvbak. 708 et_yvbap = et_xvbap. 709 et_yvbep = et_xvbep. 710 et_yvbfa = et_xvbfa. 711 es_yvbuk = es_xvbuk. 712 et_yvbup = et_xvbup. 713 et_yvbuv = et_xvbuv. 714 715 ENDFORM. " prm_sales_order_read 716 *&---------------------------------------------------------------------* 717 *& Form PRM_DOCUMENT_UPDATE 718 *&---------------------------------------------------------------------* 719 * text 720 *----------------------------------------------------------------------* 721 * <--P_LS_XVBAK text 722 * <--P_LT_XVBAP text 723 * <--P_LT_XVBEP text 724 * <--P_LT_XVBPA text 725 * <--P_LT_XVBKD text 726 * <--P_LT_XVBFA text 727 * <--P_LS_XVBUK text 728 * <--P_LT_XVBUP text 729 * <--P_LT_XVBUV text 730 * <--P_LT_XVBAPF text 731 * <--P_LS_YVBAK text 732 * <--P_LT_YVBAP text 733 * <--P_LT_YVBEP text 734 * <--P_LT_YVBFA text 735 * <--P_LS_YVBUK text 736 * <--P_LT_YVBUP text 737 * <--P_LT_YVBUV text 738 * <--P_LT_FXFPLA text 739 * <--P_LT_FXFPLT text 740 * <--P_LT_FYFPLA text 741 * <--P_LT_FYFPLT text 742 *----------------------------------------------------------------------* 743 FORM prm_document_update CHANGING is_xvbak TYPE vbak 744 it_xvbap TYPE shp_vl10_vbap_t 745 it_xvbep TYPE shp_vl10_vbep_t 746 it_xvbpa TYPE vbpavb_tab 747 it_xvbkd TYPE shp_vl10_vbkd_t 748 it_xvbfa TYPE shp_vl10_vbfa_t 749 is_xvbuk TYPE vbukvb 750 it_xvbup TYPE shp_vl10_vbup_t 751 it_xvbuv TYPE shp_vl10_vbuv_t 752 it_xvbapf TYPE ty_vbapf 753 is_yvbak TYPE vbak 754 it_yvbap TYPE shp_vl10_vbap_t 755 it_yvbep TYPE shp_vl10_vbep_t 756 it_yvbfa TYPE shp_vl10_vbfa_t 757 is_yvbuk TYPE vbukvb 758 it_yvbup TYPE shp_vl10_vbup_t 759 it_yvbuv TYPE shp_vl10_vbuv_t 760 it_fxfpla TYPE va_fplavb_t 761 it_fxfplt TYPE va_fpltvb_t 762 it_fyfpla TYPE va_fplavb_t 763 it_fyfplt TYPE va_fpltvb_t. 764 " it_yvbkd TYPE shp_vl10_vbkd_t. 765 766 DATA: 767 lt_xvbuk TYPE shp_vl10_vbuk_t, 768 lt_yvbuk TYPE shp_vl10_vbuk_t. 769 DATA:it_yvbpa TYPE vbpavb_tab. 770 DATA: 771 lt_komv TYPE STANDARD TABLE OF komv, 772 lt_sadr TYPE STANDARD TABLE OF sadrvb, 773 lt_vbbe TYPE STANDARD TABLE OF vbbed, 774 lt_vbbs TYPE STANDARD TABLE OF vbbsd, 775 lt_vbeh TYPE STANDARD TABLE OF vbeh, 776 lt_vbsn TYPE STANDARD TABLE OF vbsnvb, 777 lt_qtch TYPE STANDARD TABLE OF qtchd, 778 lt_qtvb TYPE STANDARD TABLE OF qtvbd, 779 lt_apoi TYPE STANDARD TABLE OF atpfield, 780 lt_vblb TYPE STANDARD TABLE OF vblbvb, 781 lt_vbkey TYPE STANDARD TABLE OF vbkey. 782 783 DATA: 784 ls_csfg_info TYPE csfgt_info_dyn. 785 786 * Set CSFG Flag to Process SD_SALESDOCUMENT_LES_PROCESS 787 ls_csfg_info-x_logsys_flag = 'X'. 788 789 790 * update sales document 791 APPEND is_xvbuk TO lt_xvbuk. 792 APPEND is_yvbuk TO lt_yvbuk. 793 794 CALL FUNCTION 'RV_SALES_DOCUMENT_UPDATE' "IN UPDATE TASK 795 EXPORTING 796 fkonv_geaendert = space 797 fvbak = is_xvbak 798 fyvbak = is_yvbak 799 fyvbak_updkz = 'X' 800 falekz = space 801 fmm_flag = space 802 is_csfg_info = ls_csfg_info 803 TABLES 804 fxkomv = lt_komv 805 fxsadr = lt_sadr 806 fxvbap = it_xvbap 807 fxvbapf = it_xvbapf 808 fxvbbe = lt_vbbe 809 fxvbbs = lt_vbbs 810 fxvbeh = lt_vbeh 811 fxvbep = it_xvbep 812 fxvbfa = it_xvbfa 813 fxvbkd = it_xvbkd 814 fyvbkd = it_xvbkd 815 fxvbpa = it_xvbpa 816 fxvbsn = lt_vbsn 817 fxvbuk = lt_xvbuk 818 fxvbup = it_xvbup 819 fxqtch = lt_qtch 820 fxqtvb = lt_qtvb 821 fxapoi = lt_apoi 822 fysadr = lt_sadr 823 fyvbap = it_yvbap 824 fyvbbe = lt_vbbe 825 fyvbbs = lt_vbbs 826 fyvbep = it_yvbep 827 fyvbfa = it_yvbfa 828 fyvbpa = it_yvbpa 829 fyvbsn = lt_vbsn 830 fyvbuk = lt_yvbuk 831 fyvbup = it_yvbup 832 fxvbuv = it_xvbuv 833 fyvbuv = it_yvbuv 834 fyqtvb = lt_qtvb 835 fvbkey = lt_vbkey 836 fxvblb = lt_vblb 837 fyvblb = lt_vblb 838 fxfpla = it_fxfpla 839 fyfpla = it_fyfpla 840 fxfplt = it_fxfplt 841 fyfplt = it_fyfplt 842 EXCEPTIONS 843 OTHERS = 1. 844 * 845 ENDFORM. " prm_document_update
RANGES: i_a FOR vbak-vbeln OCCURS 10,
i_l FOR likp-vbeln OCCURS 10,
i_f FOR vbrk-vbeln OCCURS 10.
i_a-option = 'EQ'.
i_a-low = gt_c_vbeln-vbeln.
i_a-sign = 'I'.
APPEND i_a.
IF i_a[] IS NOT INITIAL.
SUBMIT rvv05ivb " VIA SELECTION-SCREEN
WITH i_a IN i_a
WITH i_l IN i_l
WITH i_f IN i_f
WITH vakgu = ''
WITH vakpa = ''
WITH vapma = ''
WITH vepvg = ''
WITH vkdfs = 'X'
WITH vlpkm = ''
" WITH oifpbl = ''
WITH vlkpa = ''
WITH vlpma = ''
WITH vkdfs_l = ''
WITH vtrdi = ''
WITH vrsli = ''
WITH vrkpa = ''
WITH vrpma = ''
WITH vkdfs_f = ''"WITH oirpbl = ''
AND RETURN EXPORTING LIST TO MEMORY.
ENDIF.
浙公网安备 33010602011771号