Deal all, when i use bapi 'BAPI_PO_CREATE1' create po, system give me a error message no. bm035(Measurement unit & has no ISO code). I don't konw how to sorve it. But when i use T-code ME21N to create po, it create suceeed. Is my code wrong? This is my code, please anybody give me some advice, Thanks. FORM generate_free_po . DATA: lv_ebeln LIKE ekko-ebeln , lv_adrnr LIKE t001w-adrnr. CLEAR:poheader,poheaderx. REFRESH:poitem,poitemx,pocondheader,pocondheaderx, poschedule,ocomponents,pocomponentsx. LOOP AT gt_freepo INTO gs_freepo. ON CHANGE OF gs_freepo-ebeln. IF poheader IS NOT INITIAL. PERFORM exec_bapi_po USING lv_ebeln ''. ENDIF. CLEAR:poheader,poheaderx,lv_ebeln. REFRESH:poreturn,poitem,poitemx,pocondheader,pocondheaderx,poschedule,poschedulex. lv_ebeln = gs_freepo-ebeln. ""po header poheader-po_number = gs_freepo-ebeln . "po number poheader-comp_code = gs_freepo-bukrs. "company code poheader-doc_type = gs_freepo-bsart. ""document type poheader-vendor = gs_freepo-lifnr. ""vendor * poheader-currency = gs_freepo-waers. "waers poheader-purch_org = gs_freepo-ekorg. ""pur_org poheader-pur_group = gs_freepo-ekgrp. ""pur_group poheader-creat_date = sy-datum. poheader-created_by = sy-uname . poheader-langu = sy-langu. poheader-doc_date = sy-datum. poheader-item_intvl = '00010' . poheader-status = 'I' . "PO FROM BAPI "" po header flag poheaderx-po_number = 'X' . poheaderx-comp_code = 'X' . poheaderx-doc_type = 'X' . poheaderx-vendor = 'X'. poheaderx-purch_org = 'X' . poheaderx-pur_group = 'X' . poheaderx-creat_date = 'X'. poheaderx-created_by = 'X'. poheaderx-langu = 'X' . poheaderx-doc_date = 'X'. poheaderx-item_intvl = 'X'. poheaderx-status = 'X' . poheaderx-vat_cntry = 'X' . ENDON. ""po item CLEAR:poitem. poitem-po_item = gs_freepo-ebelp. "EKPO 采购凭证的项目编号 poitem-material = gs_freepo-matnr . " MATERIAL poitem-plant = gs_freepo-werks. "工厂 poitem-stge_loc = gs_freepo-lgort . "LOCATION poitem-quantity = gs_freepo-menge. "采购订单数量 SELECT SINGLE bstme INTO poitem-po_unit FROM mara WHERE matnr = gs_freepo- matnr. * poitem-po_unit = gs_freepo-meins. "PO_UNIT poitem-short_text = gs_freepo-txz01. "短文本 poitem-item_cat = gs_freepo-pstyp. "Item Catagory ""*--------------------------------------------------------------------- poitem-free_item = 'X'. ""免费项目 ""*--------------------------------------------------------------------- poitem-net_price = gs_freepo-kbetr. "单价 poitem-price_unit = gs_freepo-kpein. "单价单位 poitem-plan_del = 0 . poitem-preq_name = sy-uname. poitem-period_ind_expiration_date = sy-datum . * poitem-po_price = '2'. APPEND poitem. ""po item flag CLEAR:poitemx. poitemx-po_item = gs_freepo-ebelp. poitemx-po_itemx = 'X'. poitemx-material = 'X'. poitemx-plant = 'X'. poitemx-stge_loc = 'X'. poitemx-quantity = 'X'. poitemx-po_unit = 'X'. poitemx-net_price = 'X'. poitemx-price_unit = 'X'. poitemx-preq_name = 'X'. poitemx-period_ind_expiration_date = 'X'. poitemx-item_cat = 'X'. poitemx-free_item = 'X'. ""免费项目 * poitemx-po_price = 'X'. APPEND poitemx. ""schedule CLEAR:poschedule. poschedule-po_item = gs_freepo-ebelp. poschedule-sched_line = gs_freepo-ebelp. poschedule-del_datcat_ext = 'D'. "交货日期的类别 poschedule-delivery_date = gs_freepo-eeind. "EKPO 交货日期 poschedule-quantity = gs_freepo-menge. "采购订单数量 APPEND poschedule. """schedule flag CLEAR:poschedulex. poschedulex-po_item = gs_freepo-ebelp. poschedulex-sched_line = gs_freepo-ebelp. poschedulex-del_datcat_ext = 'X'. poschedulex-delivery_date = 'X'. poschedulex-quantity = 'X'. APPEND poschedulex. ""pocondheader CLEAR:pocondheader. pocondheader-cond_type = 'PBXX' . pocondheader-condition_no = gs_freepo-ebeln. pocondheader-itm_number = gs_freepo-ebelp. pocondheader-cond_value = gs_freepo-kbetr. pocondheader-currency = gs_freepo-koein. pocondheader-cond_p_unt = gs_freepo-kpein. pocondheader-cond_unit = gs_freepo-kmein. pocondheader-change_id = 'U'. "" U表示更新,I 表示新建 pocondheader-cond_st_no = 1 . SELECT SINGLE umrez umren INTO (pocondheader-numconvert,pocondheader- denominato) FROM marm WHERE matnr = gs_freepo-matnr AND meinh = gs_freepo-meins. APPEND pocondheader . ""pocondheader flag CLEAR:pocondheaderx. pocondheaderx-cond_type = 'X' . pocondheaderx-condition_no = gs_freepo-ebeln. pocondheaderx-itm_number = gs_freepo-ebelp. pocondheaderx-cond_st_no = 1 . pocondheaderx-cond_value = 'X'. pocondheaderx-currency = 'X'. pocondheaderx-cond_p_unt = 'X'. pocondheaderx-cond_unit = 'X'. pocondheaderx-change_id = 'X'. pocondheaderx-numconvert = 'X'. pocondheaderx-denominato = 'X'. APPEND pocondheaderx . """address CLEAR: poaddrdelivery,lv_adrnr . poaddrdelivery-po_item = gs_freepo-ebelp. SELECT SINGLE adrnr INTO lv_adrnr FROM t001w WHERE werks = gs_freepo-werks. poaddrdelivery-addr_no = lv_adrnr . APPEND poaddrdelivery. ENDLOOP. IF poheader IS NOT INITIAL. PERFORM exec_bapi_po USING lv_ebeln ''. ENDIF. ENDFORM. " GENERATE_FREE_PO FORM exec_bapi_po USING l_ebeln LIKE ekko-ebeln l_flag TYPE c. DATA: no_price_from_po LIKE bapiflag-bapiflag. CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING poheader = poheader poheaderx = poheaderx * no_price_from_po = no_price_from_po TABLES return = poreturn poitem = poitem poitemx = poitemx pocondheader = pocondheader pocondheaderx = pocondheaderx * POCOND = POCOND * POCONDX = POCONDX poschedulex = poschedulex poschedule = poschedule pocomponents = pocomponents pocomponentsx = pocomponentsx poaddrdelivery = poaddrdelivery. READ TABLE poreturn WITH KEY type = 'E'. IF sy-subrc EQ 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. CLEAR:gs_alv. gs_alv-ebeln = l_ebeln. gs_alv-type = 'E'. gs_alv-message = '创建失败'. APPEND gs_alv TO gt_alv. LOOP AT poreturn. gs_alv-ebeln = l_ebeln. gs_alv-type = poreturn-type. gs_alv-message = poreturn-message. APPEND gs_alv TO gt_alv. CLEAR:poreturn. ENDLOOP. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. CLEAR:gs_alv. gs_alv-ebeln = l_ebeln. gs_alv-type = 'S'. gs_alv-message = '创建成功'. APPEND gs_alv TO gt_alv. ENDIF. ENDFORM. " EXEC_BAPI_PO
↧