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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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