BAPI для ME41 (Quotation)Всем привет.
Тема обсуждалась здесь:
http://sapboard.ru/forum/viewtopic.php?f=13&t=71820&p=426620&hilit=BAPI+ME41#p426620В общем задача стоит создавать Запрос (Quotation) программно.
Call transaction - устаревший метод, ФМ 'BAPI_QUOTATION_CREATEFROMDATA2' - это для сбыта.
Коллегами с форума найден ФМ 'BS01_MM_QUOTATION_CREATE'.
ФМ немного не работает, потому что создан для функциональности DIMP, которая не активирована, и которую трогать не хочется по нескольким причинам.
( Note 1666702 - Syntax Error occurs when using BS01_MM_QUOTATION_CREATE...
Function module BS01_MM_QUOTATION_CREATE is part of software component ECC-DIMP...
Please do not consider activating the Business Function Set DIMP because you only would like to use this specific function BAPI BS01_MM_QUOTATION_CREATE...).
При запуске ФМ возникают проблемы с валютой, количеством, типом документа. Пришлось его немного доработать. Доработки максимально приближены к стандарту из DIMP. Получилась полноценная BAPI'шка. У кого версия SAP другая, код может чуть-чуть отличаться.
Запуск ФМ:Code:
FORM bapi_quotation_create .
DATA wa_quotation_header TYPE bs01mmhead.
DATA wa_quotation_address TYPE bapiaddress.
DATA p_quotation TYPE bapiekkoc-po_number.
DATA wa_quotation_items TYPE bs01mmitem.
DATA gt_quotation_items TYPE STANDARD TABLE OF bs01mmitem.
DATA wa_schedules TYPE bs01mmschedule.
DATA gt_schedules TYPE STANDARD TABLE OF bs01mmschedule.
DATA gt_return TYPE STANDARD TABLE OF bapiret2.
DATA wa_return TYPE bapiret2.
*" QUOTATION_ACCOUNT_ASSIGNMENT STRUCTURE BAPIEKKN OPTIONAL
*" QUOTATION_ITEM_TEXT STRUCTURE BS01MMITEMTX OPTIONAL
*" QUOTATION_LIMITS STRUCTURE BAPIESUHC OPTIONAL
*" QUOTATION_CONTRACT_LIMITS STRUCTURE BAPIESUCC OPTIONAL
*" QUOTATION_SERVICES STRUCTURE BSMMESLLC OPTIONAL
*" QUOTATION_SRV_ACCASS_VALUES STRUCTURE BAPIESKLC OPTIONAL
*" QUOTATION_SERVICES_TEXT STRUCTURE BAPIESLLTX OPTIONAL
*" EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL
********************************************
CLEAR wa_quotation_header.
wa_quotation_header-CREATED_BY = sy-uname.
wa_quotation_header-co_code = 'JNZ'.
wa_quotation_header-doc_cat = 'A'.
wa_quotation_header-doc_type = 'AN'.
wa_quotation_header-vendor = '0000000123'.
wa_quotation_header-language = sy-langu.
wa_quotation_header-purch_org = 'YNOS'.
wa_quotation_header-pur_group = '10'.
wa_quotation_header-currency = 'RUB'.
wa_quotation_header-doc_date = sy-datum. "Дата документа закупки
wa_quotation_header-APPLIC_BY = '20131231'. " BWBDT Срок подачи заявления
wa_quotation_header-quot_dead = '20131231'. " ANGAB "Срок подачи предложения
wa_quotation_header-COLL_NO = '1'. " Групповой номер
**********************************************
CLEAR wa_quotation_items.
wa_quotation_items-material = '000000000000340060'.
wa_quotation_items-PUR_MAT = wa_quotation_items-material.
wa_quotation_items-co_code = 'JNZ'.
wa_quotation_items-plant = 'YNOS'.
wa_quotation_items-store_loc = '0001'.
wa_quotation_items-trackingno = '1001'. " bednr
wa_quotation_items-DOC_CAT = 'A'. " запрос
wa_quotation_items-QUOT_DEAD = '20131231'."ANGAB
APPEND wa_quotation_items TO gt_quotation_items.
************************************************
CLEAR wa_schedules.
wa_schedules-DEL_DATCAT = '1'. " тип даты - день
wa_schedules-deliv_date = '20140101'.
wa_schedules-QUANTITY = '3'.
APPEND wa_schedules TO gt_schedules.
***********************************************
CALL FUNCTION 'BS01_MM_QUOTATION_CREATE'
EXPORTING
quotation_header = wa_quotation_header
*" VALUE(QUOTATION_ADDRESS) LIKE BAPIADDRESS STRUCTURE
*" BAPIADDRESS OPTIONAL
*" VALUE(SKIP_ITEMS_WITH_ERROR) LIKE BAPIMMPARA-SELECTION DEFAULT
*" 'X'
IMPORTING
quotation = p_quotation
TABLES
quotation_items = gt_quotation_items[]
quotation_item_schedules = gt_schedules[]
*" QUOTATION_ACCOUNT_ASSIGNMENT STRUCTURE BAPIEKKN OPTIONAL
*" QUOTATION_ITEM_TEXT STRUCTURE BS01MMITEMTX OPTIONAL
*" QUOTATION_LIMITS STRUCTURE BAPIESUHC OPTIONAL
*" QUOTATION_CONTRACT_LIMITS STRUCTURE BAPIESUCC OPTIONAL
*" QUOTATION_SERVICES STRUCTURE BSMMESLLC OPTIONAL
*" QUOTATION_SRV_ACCASS_VALUES STRUCTURE BAPIESKLC OPTIONAL
*" QUOTATION_SERVICES_TEXT STRUCTURE BAPIESLLTX OPTIONAL
*" EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL
return = gt_return[] .
LOOP AT gt_return INTO wa_return
WHERE type = 'E'
OR type = 'A'.
ROLLBACK WORK.
EXIT.
ENDLOOP. " return
IF NOT sy-subrc = 0.
COMMIT WORK AND WAIT.
message i096(zm) with p_quotation.
ENDIF.
ENDFORM. " BAPI_QUOTATION_CREATE
LBOS04F01 . form DOC_HEADER_GENERATEfind block
Code:
if not tekko is initial.
tekkorel = 'X'.
endif.
call function 'ME_CREATE_PO_HEADER'
modify block
Code:
* Создание Запроса ММ . Request or Quotation
call function 'ME_CREATE_PO_HEADER'
exporting
i_bedat = cekko-bedat
i_bsart = cekko-bsart
i_bukrs = cekko-bukrs
i_ekgrp = cekko-ekgrp
i_ekorg = cekko-ekorg
i_konnr = cekko-konnr
i_lifnr = cekko-lifnr
i_reswk = cekko-reswk
i_ebeln = cekko-ebeln
i_tekko = tekko
i_tekkorel = tekkorel
i_address = cadr
i_vorga = 'A' "Needs to be "A" for MM RFQ/Quotation
* i_bstyp = document_category "DIMP
* i_angdt = cekko-angdt "DIMP
z_bstyp = document_category
z_angdt = cekko-angdt
exceptions
error_message = 1.
*} REPLACE
FM 'ME_CREATE_PO_HEADER'find block
Code:
ekko-spras = i_spras. "567213
ekko-scmproc = i_scmproc. "APO Push Deployment
insert block
Code:
* создание запроса . Create Request for Quotation
if sy-tcode cs 'ZZZ'
or sy-tcode = 'SE38'.
if z_bstyp = 'A'.
EKKO-ANGDT = Z_ANGDT.
EKKO-BSTYP = Z_BSTYP.
ekko-waers = I_TEKKO-waers.
endif.
endif.
MM06EF0I_INIT_FC. FORM init_fc find block
Code:
ekko-mandt = sy-mandt.
ekko-aedat = sy-datum.
ekko-spras = sy-langu.
IF ekko-ernam EQ space.
ekko-ernam = sy-uname.
ENDIF.
ekko-bstyp = bstyp-best.
insert block
Code:
* Создание Запроса . Request for Quotation
IF sy-tcode CS 'ZZZ'
OR sy-tcode = 'SE38'.
IF i_vorga = bstyp-anfr. " 'A'-Quotation
auswahl0 = 'ME41'.
t160-bstyp = bstyp-anfr.
t160-vorga = vorga-anfr.
ekko-bstyp = bstyp-anfr.
rfq_language = sy-langu.
CLEAR ekko-statu.
ENDIF.
ENDIF.
MM06EF0E_EKPO-NETWR_MOD. FORM ekpo-netwr_modfind block
Code:
CASE ekko-bstyp.
WHEN bstyp-anfr.
insert block
Code:
* создание запроса . Reuest for Quotation
if sy-tcode cs 'ZZZ'
or sy-tcode = 'SE38'.
IF ( NOT fc_call IS INITIAL ) AND
ekko-bstyp = bstyp-anfr AND
ekpo-pstyp = pstyp-lagm. " pstyp = 0
rm06e-anmng = ekpo-menge.
ENDIF.
ENDIF.