Sapforum.Biz

Логистика => Сбыт (SD) => Тема начата: fil от Июль 19, 2010, 03:43:20 pm

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


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

Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию.  Изменять партию в нем не получается
Название: Re: Создать партию для входящей поставки
Отправлено: Паганель от Июль 19, 2010, 08:27:13 pm
You are not allowed to view links. Register or Login
Если я правильно понимаю, то с помощью этого BAPI можно менять количество, объем сроки и удалять позицию.  Изменять партию в нем не получается
Ссори, не пробывал, но там есть структура ITEM_DATA типа BAPIIBDLVITEMCHG (Change Item Data in Inbound Delivery) там есть поле BATCH.

P.S. точно, нельзя менять ITEM_CONTROL   (LIKE   BAPIIBDLVITEMCTRLCHG) менять можно только указаные Вами поля.
Название: Re: Создать партию для входящей поставки
Отправлено: Паганель от Июль 19, 2010, 09:21:34 pm
Готового решения не дам, не копал в  этом направлении, но кажется мне, что надо делать чуть не так, посмотрел бапишку, есть там несколько структур, которые участвуют в классификации и выборе партии (уже существующей).
Итак, я сделал бы приблизительно так:
- настроил стратегию поиска партии (некоторые моменты есть на форуме, спрашивайте если что, для начала 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 pm
Ну есть еще такая функция WS_DELIVERY_UPDATE, она уж очень низкоуровневая, так как фактически делает уже сам апдейт и там таки передаются все данные поставки для обработки. Потом есть еще такой ФМ как RV_DELIVERIES_SAVE, тоже довольно низкоуровневый... потом еще так по ходу есть SHP_BAPI_DELIVERY_CHANGE_SIMU или SHP_BAPI_DELIVERY_CHANGE - Я бы с него начал смотреть, похоже оно вызывается при вызовах BAPI.
Название: Re: Создать партию для входящей поставки
Отправлено: fil от Июль 22, 2010, 03:56:31 pm
спасибо за ответы
буду пробовать
Название: Re: Создать партию для входящей поставки
Отправлено: fil от Июль 22, 2010, 03:58:40 pm
You are not allowed to view links. Register or Login
Сейчас использую BAPI_DELIVERYPROCESSING_EXEC, но даже если подаю на вход уже созданную партию, на выходе ее все равно нет.

проблема решена с помощью EXIT_SAPLV50R_CREA_003
Название: Re: Создать партию для входящей поставки
Отправлено: Паганель от Июль 22, 2010, 05:31:30 pm
You are not allowed to view links. Register or Login
проблема решена с помощью EXIT_SAPLV50R_CREA_003

можно подробнее?
Название: Re: Создать партию для входящей поставки
Отправлено: Uukrul от Июль 22, 2010, 10:40:48 pm
You are not allowed to view links. Register or Login
можно подробнее?
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...
Название: Re: Создать партию для входящей поставки
Отправлено: fil от Июль 26, 2010, 09:20:14 am
Цитата: Uukrul  link=topic=1228.msg7410#msg7410 date=1279827648
Ну что там подробнее, я так понимаю в этом экзите заполняют поле партии нужным значением и всех делов...

да, верно
Название: Re: Создать партию для входящей поставки
Отправлено: fil от Сентябрь 03, 2010, 01:52:22 pm
в итоге использован другой ФМ, привожу код, вдруг кому-нибудь пригодится:
Цитировать
*создаем вх.поставку
    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 pm
P.S. Возможно у них не было настроенно создание партий во входящих поставках
spro- Оперативная логистика - Отгрузка - Поставки - Определение управления созданием партий во входящей поставке
Название: Re: Создать партию для входящей поставки
Отправлено: rstiv от Декабрь 15, 2011, 03:01:43 pm
Здравствуйте! Создаю поставку как в приведенном примере, заполняю поле tddat,  поставка создается, но поле в заголовке остается пустым. Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
Название: Re: Создать партию для входящей поставки
Отправлено: Uukrul от Декабрь 15, 2011, 09:41:48 pm
You are not allowed to view links. Register or Login
Поковырял код фм и не нашел вообще чтобы это поле где то использовалось. Что за дела ума не приложу, мож нота есть какая?
Я так понял вы заполняете структуру таблицы KOMDLGN-TDDAT, ну так оно заполняется вот к примеру имеет следующие модули:

FV50C301 - строка 56

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

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

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

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