Текущее время: Вс, июл 27 2025, 14:20

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: BAPI_GOODSMVT_CREATE 543 вдв
СообщениеДобавлено: Пт, апр 15 2011, 09:47 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Поискал на форуме как делать BAPI_GOODSMVT_CREATE в комбинации с 543 видом движения.
Не нашел решения. Помучался сам. Получилось. Может кому пригодится...

Моя ситуация следующая:
Давальческая схема. Поступление материала 101 вдв - первая проводка.
Последующий перерасчет (списание компонентов) 121 вдв + 543 вдв - вторая проводка.



Текст проги для 101 (101+543) вдв:

Code:


  line_id = 0.
  CLEAR: i_goodsmvt_item[].

  READ TABLE gt_tab2 INTO wa_tab2  INDEX 1.
  IF sy-subrc = 0.

    READ TABLE gt_ekkn INTO wa_ekkn
    WITH KEY ebeln = wa_tab2-ebeln
             ebelp = wa_tab2-ebelp.

    CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
      EXPORTING
        input        = wa_ekkn-ps_psp_pnr
      IMPORTING
        output       = l_pspnr
      EXCEPTIONS
        length_error = 1
        OTHERS       = 2.

    line_id = line_id + 1.
    CLEAR: i_goodsmvt_item.
    i_goodsmvt_item-line_id     = line_id.
    i_goodsmvt_item-parent_id   = '000000'.
    i_goodsmvt_item-line_depth  = '00'.
    i_goodsmvt_item-material    = wa_tab2-matnr.
    i_goodsmvt_item-plant       = wa_tab2-werks.
    i_goodsmvt_item-move_type   = '101'.                    "'501'.
    i_goodsmvt_item-entry_qnt   = wa_tab2-menge.
*   i_goodsmvt_item-amount_lc   = wa_tab2-dmbtr.               "'1'.
    i_goodsmvt_item-gl_account  = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
    i_goodsmvt_item-wbs_elem    = l_pspnr.
    i_goodsmvt_item-po_number   = wa_ebeln_re-low.
    i_goodsmvt_item-po_item     = wa_ebelp_re-low.
*    i_goodsmvt_item-vendor      = ch_lifnr.     "'0000000123'.
    i_goodsmvt_item-mvt_ind     = 'B'.
*  "'B'.        " к заказу на поставку
    i_goodsmvt_item-withdrawn   = 'X'.      " конечная поставка
    i_goodsmvt_item-nb_slips    = 1.         " число накладных
    i_goodsmvt_item-par_compco  = 'JNZ'.
    i_goodsmvt_item-item_text   = p_txt.  "'Перенос запаса'.
    APPEND i_goodsmvt_item.

  ENDIF.


  LOOP AT gt_resb INTO wa_resb.

    READ TABLE gt_mseg541 INTO wa_mseg541
    WITH KEY   ebeln = wa_resb-ebeln
               ebelp = wa_resb-ebelp
               matnr = wa_resb-matnr.


    CLEAR ch_lifnr.
    CALL FUNCTION 'CONVERSION_EXIT_LIFNR_OUTPUT'
      EXPORTING
        input  = wa_resb-lifnr
      IMPORTING
        output = ch_lifnr.

    line_id = line_id + 1.

    CLEAR: i_goodsmvt_item.
    i_goodsmvt_item-line_id     = line_id.
    i_goodsmvt_item-parent_id   = '000001'.
    i_goodsmvt_item-line_depth  = '01'.
    i_goodsmvt_item-material    = wa_resb-matnr.
    i_goodsmvt_item-plant       = wa_resb-werks.
*    i_goodsmvt_item-stge_loc    = wa_resb-lgort.
    i_goodsmvt_item-batch       = wa_mseg541-charg.
    i_goodsmvt_item-move_type   = '543'.                    "'501'.
    i_goodsmvt_item-spec_stock  = 'O'.
    i_goodsmvt_item-entry_qnt   = 0.  " menge = 0
*   i_goodsmvt_item-amount_lc   = wa_tab2-dmbtr.               "'1'.
    i_goodsmvt_item-gl_account  = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
    i_goodsmvt_item-wbs_elem    = l_pspnr.
    i_goodsmvt_item-po_number   = wa_ebeln_re-low.
    i_goodsmvt_item-po_item     = wa_ebelp_re-low.
    i_goodsmvt_item-vendor      = ch_lifnr.     "'0000000123'.
    i_goodsmvt_item-mvt_ind     = 'B'.
*  "'B'.        " к заказу на поставку
    i_goodsmvt_item-withdrawn   = 'X'.      " конечная поставка
    i_goodsmvt_item-nb_slips    = 1.         " число накладных
    i_goodsmvt_item-par_compco  = 'JNZ'.
    i_goodsmvt_item-item_text   = p_txt.  "'Перенос запаса'.
    APPEND i_goodsmvt_item.

  ENDLOOP.  " resb


  CLEAR i_goodsmvt_header.
  i_goodsmvt_header-pstng_date = wa_budat_re-low.
  i_goodsmvt_header-doc_date   = wa_bldat_re-low.
  i_goodsmvt_header-pr_uname   = sy-uname.
  i_goodsmvt_header-header_txt = p_txt.
*
  i_goodsmvt_code-gm_code = '01'.

*01  MB01                 Провести ПМ к заказу на поставку
*02  MB31                 ПМ к производственному заказу
*03  MB1A                 Выдача материала
*04  MB1B                 Проводка переноса
*05  MB1C                 Прочие поступления материалов
*06  MB11                 Движение материала
*07  MB04                 Корректировка расхода ДавальчМтрл
*    MBST                'BAPI_GOODSMVT_CANCEL'

* Domain: KZBEW - Movement Indicator
*    Движение материала без ссылки
*B   Движение материала к заказу на поставку
*F   Движение материала к заказу
*L   Движение материала к накладной
*K   Движение материала к запросу Канбан (только внутр. СУС)
*O   Корректировка расхода давальческого материала
*W   Корректировка расхода материала, ЕИ долевая/продукта

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header       = i_goodsmvt_header
      goodsmvt_code         = i_goodsmvt_code
      testrun               = i_testrun
    IMPORTING
      goodsmvt_headret      = i_goodsmvt_headret
      materialdocument      = i_materialdocument
      matdocumentyear       = i_matdocumentyear
    TABLES
      goodsmvt_item         = i_goodsmvt_item
      goodsmvt_serialnumber = i_goodsmvt_serialnumber
      return                = i_return.

  break mm.
  IF i_return[] IS INITIAL.
    COMMIT WORK AND WAIT.
    wa_tab2-mblnr = i_materialdocument.
    wa_tab2-mjahr = i_matdocumentyear.
  ELSE.
    ROLLBACK WORK.
    CONCATENATE 'MB01'
                i_return-type
                i_return-id
                i_return-number
                i_return-MESSAGE
                INTO wa_tab2-err.
  ENDIF.



Примечание : Если для 101 вдв пишет E LB 031 "Из запрошенного количества для материала 204400 остаются открытыми 1,000 ШТ",
то необходимо к 101 вдв добавить позиции 543 вдв

Текст проги для 121+543 вдв:

Code:

  line_id = 0.
  CLEAR: i_goodsmvt_item[].

  READ TABLE gt_tab2 INTO wa_tab2  INDEX 1.
  IF sy-subrc = 0.

    READ TABLE gt_ekkn INTO wa_ekkn
    WITH KEY ebeln = wa_tab2-ebeln
             ebelp = wa_tab2-ebelp.

    CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
      EXPORTING
        input        = wa_ekkn-ps_psp_pnr
      IMPORTING
        output       = l_pspnr
      EXCEPTIONS
        length_error = 1
        OTHERS       = 2.

    line_id = line_id + 1.

    CLEAR: i_goodsmvt_item.
    i_goodsmvt_item-line_id     = line_id.
    i_goodsmvt_item-parent_id   = '000000'.
    i_goodsmvt_item-line_depth  = '00'.
    i_goodsmvt_item-material    = wa_tab2-matnr.
    i_goodsmvt_item-plant       = wa_tab2-werks.
    i_goodsmvt_item-move_type   = '121'.                    "'501'.
    i_goodsmvt_item-spec_stock  = ''.
*   i_goodsmvt_item-entry_qnt   = wa_tab2-menge.
*   i_goodsmvt_item-amount_lc   = wa_tab2-dmbtr.               "'1'.
    i_goodsmvt_item-gl_account  = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
    i_goodsmvt_item-wbs_elem    = l_pspnr.
    i_goodsmvt_item-po_number   = wa_ebeln_re-low.
    i_goodsmvt_item-po_item     = wa_ebelp_re-low.
    i_goodsmvt_item-vendor      = ch_lifnr.     "'0000000123'.
    i_goodsmvt_item-mvt_ind     = 'O'.
*  "'B'.        " к заказу на поставку
    i_goodsmvt_item-withdrawn   = 'X'.      " конечная поставка
    i_goodsmvt_item-nb_slips    = 1.         " число накладных
    i_goodsmvt_item-par_compco  = 'JNZ'.
    i_goodsmvt_item-item_text   = p_txt.  "'Перенос запаса'.
    APPEND i_goodsmvt_item.

  ENDIF.

  LOOP AT gt_resb INTO wa_resb.

    READ TABLE gt_mseg541 INTO wa_mseg541
    WITH KEY   ebeln = wa_resb-ebeln
               ebelp = wa_resb-ebelp
               matnr = wa_resb-matnr.


    CLEAR ch_lifnr.
    CALL FUNCTION 'CONVERSION_EXIT_LIFNR_OUTPUT'
      EXPORTING
        input  = wa_resb-lifnr
      IMPORTING
        output = ch_lifnr.

    line_id = line_id + 1.

    CLEAR: i_goodsmvt_item.
    i_goodsmvt_item-line_id     = line_id.
    i_goodsmvt_item-parent_id   = '000001'.
    i_goodsmvt_item-line_depth  = '01'.
    i_goodsmvt_item-material    = wa_resb-matnr.
    i_goodsmvt_item-plant       = wa_resb-werks.
*    i_goodsmvt_item-stge_loc    = wa_resb-lgort.
    i_goodsmvt_item-batch       = wa_mseg541-charg.
    i_goodsmvt_item-move_type   = '543'.                    "'501'.
    i_goodsmvt_item-spec_stock  = 'O'.
    i_goodsmvt_item-entry_qnt   = wa_mseg541-menge.
*   i_goodsmvt_item-amount_lc   = wa_tab2-dmbtr.               "'1'.
    i_goodsmvt_item-gl_account  = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
    i_goodsmvt_item-wbs_elem    = l_pspnr.
    i_goodsmvt_item-po_number   = wa_ebeln_re-low.
    i_goodsmvt_item-po_item     = wa_ebelp_re-low.
    i_goodsmvt_item-vendor      = ch_lifnr.     "'0000000123'.
    i_goodsmvt_item-mvt_ind     = 'O'.
*  "'B'.        " к заказу на поставку
    i_goodsmvt_item-withdrawn   = 'X'.      " конечная поставка
    i_goodsmvt_item-nb_slips    = 1.         " число накладных
    i_goodsmvt_item-par_compco  = 'JNZ'.
    i_goodsmvt_item-item_text   = p_txt.  "'Перенос запаса'.
    APPEND i_goodsmvt_item.

  ENDLOOP.  " resb

  clear i_goodsmvt_header.
  i_goodsmvt_header-pstng_date = wa_budat_re-low.
  i_goodsmvt_header-doc_date   = wa_bldat_re-low.
  i_goodsmvt_header-pr_uname   = sy-uname.
  i_goodsmvt_header-header_txt = p_txt.
*
  i_goodsmvt_code-gm_code = '07'.

*01  MB01                 Провести ПМ к заказу на поставку
*02  MB31                 ПМ к производственному заказу
*03  MB1A                 Выдача материала
*04  MB1B                 Проводка переноса
*05  MB1C                 Прочие поступления материалов
*06  MB11                 Движение материала
*07  MB04                 Корректировка расхода ДавальчМтрл
*    MBST                'BAPI_GOODSMVT_CANCEL'


* Domain: KZBEW - Movement Indicator
*    Движение материала без ссылки
*B   Движение материала к заказу на поставку
*F   Движение материала к заказу
*L   Движение материала к накладной
*K   Движение материала к запросу Канбан (только внутр. СУС)
*O   Корректировка расхода давальческого материала
*W   Корректировка расхода материала, ЕИ долевая/продукта

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header       = i_goodsmvt_header
      goodsmvt_code         = i_goodsmvt_code
      testrun               = i_testrun
    IMPORTING
      goodsmvt_headret      = i_goodsmvt_headret
      materialdocument      = i_materialdocument
      matdocumentyear       = i_matdocumentyear
    TABLES
      goodsmvt_item         = i_goodsmvt_item
      goodsmvt_serialnumber = i_goodsmvt_serialnumber
      return                = i_return.

  IF i_return[] IS INITIAL.
    COMMIT WORK AND WAIT.
  ELSE.
    ROLLBACK WORK.
  ENDIF.



Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB