Sapforum.Biz
Логистика => Сбыт (SD) => Тема начата: fil от Июль 19, 2010, 03:43:20 pm
-
Может кто сталкивался с проблемой: нужно с помощью BAPI создать входящую поставку с партией (аналогично VL31n) или добавить партию в уже созданной поставке (соответственно VL32n).
Какой ФМ лучше использовать?
Сейчас использую BAPI_DELIVERYPROCESSING_EXEC, но даже если подаю на вход уже созданную партию, на выходе ее все равно нет.
-
Приведи кусок кода где заполняешь параметры BAPI.
-
Для изменения входящей поставки посмотри на: BAPI_INB_DELIVERY_CHANGE
-
Приведи кусок кода где заполняешь параметры BAPI.
*создаем вх.поставку
LOOP AT lt_selected_rows INTO ls_selected_row.
READ TABLE gt_pos_fo INTO lwa_pos INDEX ls_selected_row-row_id.
IF sy-subrc = 0.
CLEAR lt_request.
lt_request-document_type = 'B'.
lt_request-document_numb = gs_head_fo-ebeln.
lt_request-document_item = lwa_pos-ebelp.
lt_request-material = lwa_pos-matnr.
lt_request-plant = lwa_pos-werks.
lt_request-stge_loc = lwa_pos-lgort.
lt_request-quantity_base__uom = lwa_pos-menge_fo_v.
lt_request-delivery_date = lwa_pos-bbein.
lt_request-stge_loc = lwa_pos-lgort.
lt_request-transp_id = gs_head_fo-traid.
lt_request-trans_cat = gs_head_fo-traty.
lt_request-billoflading = gs_head_fo-bolnr.
lt_request-batch = l_batch.
APPEND lt_request.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'
* EXPORTING
* DELIVERY_EXTEND =
* TECHN_CONTROL =
TABLES
request = lt_request
* PARTNER =
* PARTNER_ADDR =
* TEXT_HEADER =
* TEXT_LINES =
createditems = lt_createditems
return = gt_return
* EXTENSION1 =
* EXTENSION2 =
* CO_CHAR_VALUES =
* BATCH_ATTRIBUTES =
* BATCH_VALUES_CHAR =
* BATCH_VALUES_CURR =
* BATCH_VALUES_NUM =
* TOKENREFERENCE =
* EXTENSIONIN =
* ITEM_SERIAL_NO =
.
-
Для изменения входящей поставки посмотри на: BAPI_INB_DELIVERY_CHANGE
Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию. Изменять партию в нем не получается
-
Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию. Изменять партию в нем не получается
Ссори, не пробывал, но там есть структура ITEM_DATA типа BAPIIBDLVITEMCHG (Change Item Data in Inbound Delivery) там есть поле BATCH.
P.S. точно, нельзя менять ITEM_CONTROL (LIKE BAPIIBDLVITEMCTRLCHG) менять можно только указаные Вами поля.
-
Готового решения не дам, не копал в этом направлении, но кажется мне, что надо делать чуть не так, посмотрел бапишку, есть там несколько структур, которые участвуют в классификации и выборе партии (уже существующей).
Итак, я сделал бы приблизительно так:
- настроил стратегию поиска партии (некоторые моменты есть на форуме, спрашивайте если что, для начала http://sapforum.biz/index.php/topic,786.msg4905.html#msg4905 ответ madcat)
- в заказе не указывал бы партии, а настроил выбор партии в поставке
- если надо создавать новую партию (как я понял Вам так надо) то создавал бы с параметрами по которым именно данная партия выбиралась бы при изменении поставки
- при необходимости попытался бы повлиять на выбор партии (екзиты, екзиты и Ваш BAPI, скажем в бапи бы через паять передавал бы какой то код, а в екзите по этому коду производил выбор .....
- посмотрел бы подробнее в Вашей BAPI параметры
RETURN LIKE BAPIRET2
EXTENSION1 LIKE BAPIEXTC
EXTENSION2 LIKE BAPIEXT
CO_CHAR_VALUES LIKE BAPI_PAOBJNR_FIELD_V
BATCH_ATTRIBUTES LIKE BAPI3060_ALLOCATION
BATCH_VALUES_CHAR LIKE BAPI3060_VALUATION_C
BATCH_VALUES_CURR LIKE BAPI3060_VALUATION_C
которые судя по описанию влияют на классификацию и выбор партий
P.S. А как Вы создаете партию? Есть пару неприятных моментов http://sapforum.biz/index.php/topic,1019.0.html, особенно при создании партии в юзер екзитах, у Вас конечно не так, Вы в своей программе создаете партию и меняете поставку, но я бы просмотрел код, мало ли ;-) .....
Не совсем то, но идеи может найдете
http://sapforum.biz/index.php/topic,637.0/highlight,партий.html
-
Ну есть еще такая функция WS_DELIVERY_UPDATE, она уж очень низкоуровневая, так как фактически делает уже сам апдейт и там таки передаются все данные поставки для обработки. Потом есть еще такой ФМ как RV_DELIVERIES_SAVE, тоже довольно низкоуровневый... потом еще так по ходу есть SHP_BAPI_DELIVERY_CHANGE_SIMU или SHP_BAPI_DELIVERY_CHANGE - Я бы с него начал смотреть, похоже оно вызывается при вызовах BAPI.
-
спасибо за ответы
буду пробовать
-
Сейчас использую BAPI_DELIVERYPROCESSING_EXEC, но даже если подаю на вход уже созданную партию, на выходе ее все равно нет.
проблема решена с помощью EXIT_SAPLV50R_CREA_003
-
проблема решена с помощью EXIT_SAPLV50R_CREA_003
можно подробнее?
-
можно подробнее?
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...
-
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...
да, верно
-
в итоге использован другой ФМ, привожу код, вдруг кому-нибудь пригодится:
*создаем вх.поставку
LOOP AT gt_pos_fo INTO lwa_pos .
CLEAR wa_komdlgn.
**** Loading the lt_komdlgn
wa_komdlgn-vgbel = lwa_pos-ebeln.
wa_komdlgn-bldat = lwa_pos-bldat.
wa_komdlgn-vgtyp = '7'.
wa_komdlgn-vgpos = lwa_pos-ebelp.
wa_komdlgn-matnr = lwa_pos-matnr.
wa_komdlgn-ematn = lwa_pos-matnr.
wa_komdlgn-lifnr = lwa_pos-lifnr.
wa_komdlgn-werks = lwa_pos-werks.
wa_komdlgn-meins = lwa_pos-vrkme.
wa_komdlgn-vrkme = lwa_pos-vrkme.
wa_komdlgn-lfimg = lwa_pos-menge.
wa_komdlgn-lfdat = lwa_pos-bbein.
wa_komdlgn-lgort = lwa_pos-lgort.
wa_komdlgn-bolnr = lwa_pos-bolnr.
wa_komdlgn-xabln = lwa_pos-xabln.
wa_komdlgn-traty = lwa_pos-traty.
wa_komdlgn-traid = lwa_pos-traid.
**создаем партии, если нужно
IF gs_head_fo-creat_part = 'X'.
PERFORM batch_create USING lwa_pos
CHANGING wa_komdlgn-charg.
ENDIF.
APPEND wa_komdlgn TO lt_komdlgn_num.
ENDLOOP.
** Code from IDOC_INPUT_DESADV1
*** Not Available in 3.1
CALL FUNCTION 'ME_CONFIRMATION_VIA_EDI'
TABLES
t_kom = lt_komdlgn
errors = lt_prop
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
* WRITE / 'Error Coccured in ME_CONFIRMATION_VIA_EDI'.
ENDIF.
LOOP AT lt_komdlgn INTO wa_komdlgn.
* set default parameter
wa_komdlgn-vgtyp = 'V'.
wa_komdlgn-kzazu = 'X'.
IF wa_komdlgn-lfart IS INITIAL.
wa_komdlgn-lfart = 'EL'.
ENDIF.
MODIFY lt_komdlgn FROM wa_komdlgn TRANSPORTING vgtyp kzazu lfart.
ENDLOOP.
***** Create
DATA: nrnr LIKE inri-nrrangenr.
TABLES: tvsa.
* Sammelgangsnummer vergeben
CLEAR ls_vbsk.
ls_vbsk-mandt = sy-mandt.
ls_vbsk-ernam = sy-uname.
ls_vbsk-erdat = sy-datum.
ls_vbsk-uzeit = sy-uzeit.
ls_vbsk-smart = 'L'.
SELECT SINGLE * FROM tvsa WHERE smart = ls_vbsk-smart.
IF sy-subrc = 0.
nrnr = tvsa-numki.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = nrnr
object = 'RV_SAMMG'
IMPORTING
number = ls_vbsk-sammg
EXCEPTIONS
OTHERS = 1.
ENDIF.
***** Call Core Function GN_DELIVERY_CREATE.
REFRESH: lt_vbfs,
lt_vbls,
lt_lips.
CALL FUNCTION 'GN_DELIVERY_CREATE'
EXPORTING
vbsk_i = ls_vbsk
IMPORTING
vbsk_e = ls_vbsk
TABLES
xkomdlgn = lt_komdlgn
xvbfs = lt_vbfs
xvbls = lt_vbls
xxlips = lt_lips
it_gn_partner = lt_partner
EXCEPTIONS
OTHERS = 1.
-
P.S. Возможно у них не было настроенно создание партий во входящих поставках
spro- Оперативная логистика - Отгрузка - Поставки - Определение управления созданием партий во входящей поставке
-
Здравствуйте! Создаю поставку как в приведенном примере, заполняю поле tddat, поставка создается, но поле в заголовке остается пустым. Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
-
Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
Я так понял вы заполняете структуру таблицы KOMDLGN-TDDAT, ну так оно заполняется вот к примеру имеет следующие модули:
FV50C301 - строка 56
Потом есть такое
LV50SSVB - строка 21, там если типа эти поля пустые то сбрасывается какой-то флаг cs_v50agl-dates_times_from_bapi для BAPI
Так что оно копируется в нужные поля, только надо понять когда это все вызывается.
PS: Кстати может надо задавать все три даты типа: ПланировТрансп, Погрузка, Плановый ОМ чтобы оно сработало?