Sapforum.Biz

Логистика => Сбыт (SD) => Тема розпочата: fil від Липень 19, 2010, 03:43:20 ПП

Назва: Создать партию для входящей поставки
Відправлено: fil від Липень 19, 2010, 03:43:20 ПП
Может кто сталкивался с проблемой: нужно с помощью BAPI создать входящую поставку с партией (аналогично VL31n) или добавить партию в уже созданной поставке (соответственно VL32n).
Какой ФМ лучше использовать?
Сейчас использую BAPI_DELIVERYPROCESSING_EXEC, но даже если подаю на вход уже созданную партию, на выходе ее все равно нет.


Назва: Re: Создать партию для входящей поставки
Відправлено: Uukrul від Липень 19, 2010, 04:12:05 ПП
Приведи кусок кода где заполняешь параметры BAPI.
Назва: Re: Создать партию для входящей поставки
Відправлено: Uukrul від Липень 19, 2010, 04:17:58 ПП
Для изменения входящей поставки посмотри на: BAPI_INB_DELIVERY_CHANGE
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Липень 19, 2010, 04:20:37 ПП
Цитата: Uukrul  link=topic=1228.msg7361#msg7361 date=1279545125
Приведи кусок кода где заполняешь параметры 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          =
           .
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Липень 19, 2010, 04:24:08 ПП
Цитата: Uukrul  link=topic=1228.msg7362#msg7362 date=1279545478
Для изменения входящей поставки посмотри на: BAPI_INB_DELIVERY_CHANGE

Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию.  Изменять партию в нем не получается
Назва: Re: Создать партию для входящей поставки
Відправлено: Паганель від Липень 19, 2010, 08:27:13 ПП
Цитата: fil від Липень 19, 2010, 04:24:08 ПП
Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию.  Изменять партию в нем не получается
Ссори, не пробывал, но там есть структура ITEM_DATA типа BAPIIBDLVITEMCHG (Change Item Data in Inbound Delivery) там есть поле BATCH.

P.S. точно, нельзя менять ITEM_CONTROL   (LIKE   BAPIIBDLVITEMCTRLCHG) менять можно только указаные Вами поля.
Назва: Re: Создать партию для входящей поставки
Відправлено: Паганель від Липень 19, 2010, 09:21:34 ПП
Готового решения не дам, не копал в  этом направлении, но кажется мне, что надо делать чуть не так, посмотрел бапишку, есть там несколько структур, которые участвуют в классификации и выборе партии (уже существующей).
Итак, я сделал бы приблизительно так:
- настроил стратегию поиска партии (некоторые моменты есть на форуме, спрашивайте если что, для начала 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
Назва: Re: Создать партию для входящей поставки
Відправлено: Uukrul від Липень 20, 2010, 02:15:01 ПП
Ну есть еще такая функция WS_DELIVERY_UPDATE, она уж очень низкоуровневая, так как фактически делает уже сам апдейт и там таки передаются все данные поставки для обработки. Потом есть еще такой ФМ как RV_DELIVERIES_SAVE, тоже довольно низкоуровневый... потом еще так по ходу есть SHP_BAPI_DELIVERY_CHANGE_SIMU или SHP_BAPI_DELIVERY_CHANGE - Я бы с него начал смотреть, похоже оно вызывается при вызовах BAPI.
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Липень 22, 2010, 03:56:31 ПП
спасибо за ответы
буду пробовать
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Липень 22, 2010, 03:58:40 ПП
Цитата: fil від Липень 19, 2010, 03:43:20 ПП
Сейчас использую BAPI_DELIVERYPROCESSING_EXEC, но даже если подаю на вход уже созданную партию, на выходе ее все равно нет.

проблема решена с помощью EXIT_SAPLV50R_CREA_003
Назва: Re: Создать партию для входящей поставки
Відправлено: Паганель від Липень 22, 2010, 05:31:30 ПП
Цитата: fil від Липень 22, 2010, 03:58:40 ПП
проблема решена с помощью EXIT_SAPLV50R_CREA_003

можно подробнее?
Назва: Re: Создать партию для входящей поставки
Відправлено: Uukrul від Липень 22, 2010, 10:40:48 ПП
Цитата: Паганель від Липень 22, 2010, 05:31:30 ПП
можно подробнее?
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Липень 26, 2010, 09:20:14 ДП
Цитата: Uukrul  link=topic=1228.msg7410#msg7410 date=1279827648
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...

да, верно
Назва: Re: Создать партию для входящей поставки
Відправлено: fil від Вересень 03, 2010, 01:52:22 ПП
в итоге использован другой ФМ, привожу код, вдруг кому-нибудь пригодится:
Цитата
*создаем вх.поставку
   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.

Назва: Re: Создать партию для входящей поставки
Відправлено: Паганель від Листопад 16, 2010, 01:36:35 ПП
P.S. Возможно у них не было настроенно создание партий во входящих поставках
spro- Оперативная логистика - Отгрузка - Поставки - Определение управления созданием партий во входящей поставке
Назва: Re: Создать партию для входящей поставки
Відправлено: rstiv від Грудень 15, 2011, 03:01:43 ПП
Здравствуйте! Создаю поставку как в приведенном примере, заполняю поле tddat,  поставка создается, но поле в заголовке остается пустым. Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
Назва: Re: Создать партию для входящей поставки
Відправлено: Uukrul від Грудень 15, 2011, 09:41:48 ПП
Цитата: rstiv від Грудень 15, 2011, 03:01:43 ПП
Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
Я так понял вы заполняете структуру таблицы KOMDLGN-TDDAT, ну так оно заполняется вот к примеру имеет следующие модули:

FV50C301 - строка 56

Потом есть такое

LV50SSVB - строка 21, там если типа эти поля пустые то сбрасывается какой-то флаг cs_v50agl-dates_times_from_bapi для BAPI

Так что оно копируется в нужные поля, только надо понять когда это все вызывается.

PS: Кстати может надо задавать все три даты типа: ПланировТрансп, Погрузка, Плановый ОМ чтобы оно сработало?