Текущее время: Вт, июл 22 2025, 10:23

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: BAPI_PO_CHANGE
СообщениеДобавлено: Вт, янв 25 2011, 18:05 
Ассистент
Ассистент

Зарегистрирован:
Чт, янв 20 2011, 15:17
Сообщения: 27
Здрасте Всем,

при попытке изменить заказ через BAPI_PO_CHANGE(добавление одной позиции - услуга), ФМ возвращает 3 ошибки , заказ не может быть изменен, он содержит еще ошибочные позиции, задайте одну услугу или лимит, при обновлении через me23n с теми же данными проблем не возникает, в чем может быть проблема?вообще очем свидетельствуют такие ошибки как и где их поправить, данные подаю следующие,
таблица poservices
Изображение
таблица POSRVACCESSVALUES
Изображение
естественно все остальные таблицы и поля тоже заполнены
спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Ср, янв 26 2011, 07:01 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
PO_ITEMS-PCKG_NO заполнено?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Ср, янв 26 2011, 11:51 
Ассистент
Ассистент

Зарегистрирован:
Чт, янв 20 2011, 15:17
Сообщения: 27
да заполнено


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Ср, янв 26 2011, 11:56 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Посмотрите вот эту ноту Note 420332 - BAPI_PO_CREATE: Specimen for services, там показан пример заполнения параметров бапи по созданию заказа ММ с услугой. Не совсем Ваш случай, но я думаю для BAPI_PO_CHANGE подойдет, особых различий нет для Вашей задачи. Возможно поможет.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Вт, дек 20 2011, 09:26 
Специалист
Специалист

Зарегистрирован:
Вт, сен 15 2009, 16:41
Сообщения: 201
Пол: Мужской
Может мне кто нить поможет? Код такой:
Code:
DATA: lt_poschedule  TYPE TABLE OF bapimeposchedule
      , ls_poschedule  TYPE bapimeposchedule
      , lt_poschedulex TYPE TABLE OF bapimeposchedulx
      , ls_poschedulex TYPE bapimeposchedulx
      , lt_bapiret2    TYPE TABLE OF bapiret2
      , ls_bapiret2    TYPE bapiret2
      , ls_poheader     TYPE bapimepoheader
      , ls_poheaderx   TYPE bapimepoheaderx
      , lt_poheader     TYPE TABLE OF bapimepoheader
      , lt_poheaderx   TYPE TABLE OF bapimepoheaderx
      , bapi_te_mepoitem  TYPE bapi_te_mepoitem
      , bapi_te_mepoitemx TYPE bapi_te_mepoitemx
      , lt_extensionin    TYPE TABLE OF bapiparex
      , ls_extensionin    TYPE bapiparex
      , ls_ekko           TYPE ekko
      , ls_ekkn           TYPE ekkn
      , ls_ekpo           TYPE ekpo
      , ls_eket           TYPE eket
      , ls_poitem         TYPE  bapimepoitem
      , ls_poitemx        TYPE  bapimepoitemx
      , lt_poitem         TYPE TABLE OF bapimepoitem
      , lt_poitemx        TYPE TABLE OF bapimepoitemx
      , ls_poaccount      TYPE bapimepoaccount
      , ls_poaccountx     TYPE bapimepoaccountx
      , lt_poaccount      TYPE TABLE OF bapimepoaccount
      , lt_poaccountx     TYPE TABLE OF bapimepoaccountx.
  DATA: lv_pspel          TYPE ps_posid.
  DATA: ls_mess           TYPE zmm_d595_msg
      , ls_zpact          TYPE zpact.

  SELECT SINGLE *
    FROM ekko
    INTO CORRESPONDING FIELDS OF ls_ekko
    WHERE ebeln = id_banfn.

  ls_poheader-po_number  = id_banfn.
  ls_poheader-vendor     = ls_ekko-lifnr.
  ls_poheader-pmnttrms   = ls_ekko-zterm.
  ls_poheader-purch_org  = ls_ekko-ekorg.
  ls_poheader-pur_group  = ls_ekko-ekgrp.
  ls_poheaderx-vendor    = 'X'.
  ls_poheaderx-po_number = 'X'.
  ls_poheaderx-pmnttrms  = 'X'.
  ls_poheaderx-purch_org = 'X'.
  ls_poheaderx-pur_group = 'X'.
  ls_poschedule-po_item = id_bnfpo.
  ls_poschedulex-po_item = id_bnfpo.
  ls_poschedule-sched_line = iv_etenr.
  ls_poschedulex-sched_line = iv_etenr.
  IF ix_datum IS NOT INITIAL.
    ls_poschedule-delivery_date = iv_datum.
    ls_poschedulex-delivery_date = 'X'.
  ENDIF.
  IF ix_omeng IS NOT INITIAL.
    ls_poschedule-quantity = iv_menge.
    ls_poschedulex-quantity = 'X'.
  ENDIF.
  APPEND ls_poschedule TO lt_poschedule.
  APPEND ls_poschedulex TO lt_poschedulex.
  CALL FUNCTION 'BAPI_PO_CHANGE'
    EXPORTING
      purchaseorder = id_banfn
      poheader      = ls_poheader
      poheaderx     = ls_poheaderx
    TABLES
      return        = lt_bapiret2
      poschedule    = lt_poschedule
      poschedulex   = lt_poschedulex.
  CLEAR: ls_mess.
  LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'E' OR type = 'A'.
    ls_mess-i_msgty = ls_bapiret2-type.
    ls_mess-i_text = ls_bapiret2-message.
    APPEND ls_mess TO et_messages.
  ENDLOOP.
  IF sy-subrc = 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'S'.
      ls_mess-i_msgty = ls_bapiret2-type.
      ls_mess-i_text  = ls_bapiret2-message.
      APPEND ls_mess TO et_messages.
    ENDLOOP.
  ENDIF.
  IF ix_adrow IS NOT INITIAL.
    break rstihin.
    SELECT SINGLE MAX( ebelp )
    FROM eket
    INTO ls_poschedule-po_item
    WHERE ebeln = id_banfn.

    SELECT SINGLE *
    FROM eket
    INTO CORRESPONDING FIELDS OF ls_eket
    WHERE ebeln = id_banfn
      AND ebelp = id_bnfpo
      AND etenr = iv_etenr.


    SELECT SINGLE *
    FROM ekkn
    INTO CORRESPONDING FIELDS OF ls_ekkn
    WHERE ebeln = id_banfn
      AND ebelp = id_bnfpo.

    SELECT SINGLE *
    FROM ekpo
    INTO CORRESPONDING FIELDS OF ls_ekpo
    WHERE ebeln = id_banfn
      AND ebelp = id_bnfpo.

    SELECT SINGLE * FROM zpact
    INTO ls_zpact
    WHERE num = ls_ekpo-zzcontract.

    CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
      EXPORTING
        input  = ls_ekkn-ps_psp_pnr
      IMPORTING
        output = lv_pspel.
    CLEAR: lt_poschedule ,lt_poschedulex.
    ls_poschedule-po_item = ls_poschedule-po_item + 10.
    ls_poschedulex-po_item = ls_poschedule-po_item.
    ls_poschedule-delivery_date = iv_datum.
    ls_poschedulex-delivery_date = 'X'.
    ls_poschedule-quantity = iv_omeng.
    ls_poschedulex-quantity = 'X'.
    APPEND ls_poschedule TO lt_poschedule.
    APPEND ls_poschedulex TO lt_poschedulex.

    ls_poitem-po_item       = ls_poschedule-po_item.
    ls_poitem-material      = ls_ekpo-matnr.
    ls_poitem-plant         = ls_ekpo-werks.
    ls_poitem-cmmt_item     = ls_ekkn-fipos.
    ls_poitem-funds_ctr     = ls_ekkn-fistl.
    ls_poitem-acctasscat    = ls_ekpo-knttp.
    ls_poitem-preq_no       = ls_eket-banfn.
    ls_poitem-preq_item     = ls_eket-bnfpo.
    ls_poitem-quantity      = iv_omeng.
    ls_poitem-trackingno    = ls_ekpo-bednr.
    ls_poitem-preq_name     = sy-uname.
    ls_poitem-batch         = ls_eket-charg.
    ls_poitem-stge_loc      = ls_ekpo-lgort.
    APPEND ls_poitem TO lt_poitem.

    ls_poitemx-po_item      = ls_poschedule-po_item.
    ls_poitemx-po_itemx     = 'X'.
    ls_poitemx-material     = 'X'.
    ls_poitemx-plant        = 'X'.
    ls_poitemx-cmmt_item    = 'X'.
    ls_poitemx-quantity     = 'X'.
    ls_poitemx-funds_ctr    = 'X'.
    ls_poitemx-acctasscat   = 'X'.
    ls_poitemx-preq_no      = 'X'.
    ls_poitemx-preq_item    = 'X'.
    ls_poitemx-trackingno   = 'X'.
    ls_poitemx-preq_name    = 'X'.
    ls_poitemx-batch        = 'X'.
    ls_poitemx-stge_loc     = 'X'.

    APPEND ls_poitemx TO lt_poitemx.

    ls_poaccount-po_item     = ls_poschedule-po_item.
    ls_poaccount-serial_no   = ls_ekkn-zekkn.
    ls_poaccount-wbs_element = lv_pspel.
    ls_poaccount-cmmt_item   = ls_ekkn-fipos.
    ls_poaccount-sched_line  = 1.
    APPEND ls_poaccount TO lt_poaccount.

    ls_poaccountx-po_item     = ls_poschedule-po_item.
    ls_poaccountx-serial_no   = ls_ekkn-zekkn.
    ls_poaccountx-wbs_element = 'X'.
    ls_poaccountx-cmmt_item   = 'X'.
    ls_poaccountx-sched_line  = 'X'.
    APPEND ls_poaccountx TO lt_poaccountx.

    CLEAR: ls_extensionin.
    bapi_te_mepoitem-po_item = ls_poschedule-po_item.
    bapi_te_mepoitem-zzcontract = ls_ekpo-zzcontract.
    MOVE 'BAPI_TE_MEPOITEM' TO ls_extensionin-structure.
    MOVE  bapi_te_mepoitem  TO ls_extensionin-valuepart1.
    APPEND ls_extensionin TO lt_extensionin.
    CLEAR: ls_extensionin.
    bapi_te_mepoitemx-po_item = ls_poschedule-po_item.
    bapi_te_mepoitemx-zzcontract = 'X'.
    MOVE 'BAPI_TE_MEPOITEMX' TO ls_extensionin-structure.
    MOVE bapi_te_mepoitemx TO ls_extensionin-valuepart1.
    APPEND ls_extensionin TO lt_extensionin.


    break rstihin.
    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder = id_banfn
        poheader      = ls_poheader
        poheaderx     = ls_poheaderx
      TABLES
        return        = lt_bapiret2
        poitem        = lt_poitem
        poitemx       = lt_poitemx
        poschedule    = lt_poschedule
        poschedulex   = lt_poschedulex
        poaccount     = lt_poaccount
        poaccountx    = lt_poaccountx
        extensionin   = lt_extensionin.
    CLEAR: ls_mess.
    LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'E' OR type = 'A'.
      ls_mess-i_msgty = ls_bapiret2-type.
      ls_mess-i_text = ls_bapiret2-message.
      APPEND ls_mess TO et_messages.
    ENDLOOP.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'S'.
        ls_mess-i_msgty = ls_bapiret2-type.
        ls_mess-i_text  = ls_bapiret2-message.
        APPEND ls_mess TO et_messages.
      ENDLOOP.
    ENDIF.
  ENDIF.

Фин позцию при добавлении новой (условие IF ix_adrow IS NOT INITIAL) строки не создает. Что можно сделать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Пт, май 25 2012, 11:56 
Ассистент
Ассистент

Зарегистрирован:
Чт, янв 20 2011, 15:17
Сообщения: 27
пробую поменять количество в заказе через BAPI_PO_CHANGE ,

код примерно такой

Code:
CALL FUNCTION 'BAPI_PO_GETDETAIL'
  EXPORTING
    purchaseorder              = '4500017201'
    items                      = 'X'
    account_assignment         = 'X'
    schedules                  = 'X'
    history                    = 'X'
    item_texts                 = 'X'
    header_texts               = 'X'
    services                   = 'X'
    confirmations              = 'X'
    service_texts              = 'X'
    extensions                 = 'X'
  IMPORTING
    po_header                  = po_header
    po_address                 = po_address
  TABLES
    po_header_texts            = po_header_texts
    po_items                   = po_items
    po_item_account_assignment = po_item_account_assignment
    po_item_schedules          = po_item_schedules
    po_item_confirmations      = po_item_confirmations
    po_item_texts              = po_item_texts
    po_item_history            = po_item_history
    po_item_history_totals     = po_item_history_totals
    po_item_limits             = po_item_limits
    po_item_contract_limits    = po_item_contract_limits
    po_item_services           = po_item_services
    po_item_srv_accass_values  = po_item_srv_accass_values
    return                     = return
    po_services_texts          = po_services_texts
    extensionout               = extensionout.

CHECK 1 = 1.

data : ls_items like LINE OF po_items,
      ls_poitem like LINE OF poitem,
      return2 type TABLE OF BAPIRET2.

MOVE-CORRESPONDING po_header TO poheader .

LOOP AT po_items INTO ls_items.
  MOVE-CORRESPONDING ls_items TO ls_poitem .
  ls_poitem-QUANTITY = '9'.
  APPEND ls_poitem to poitem.
ENDLOOP.

ls_poitemx-PO_ITEM = '00001'.
ls_poitemx-PO_ITEMX = 'X'.
ls_poitemx-QUANTITY = 'X'.
append ls_poitemx to poitemx.

CALL FUNCTION 'BAPI_PO_CHANGE'
  EXPORTING
    purchaseorder                = '4500017201'
   poheader                     =  poheader
*   POHEADERX                    =
  TESTRUN                      = ' '
IMPORTING
   expheader                    = expheader
   exppoexpimpheader            = exppoexpimpheader
TABLES
   return                       = return2
   poitem                       = poitem
   poitemx                      = poitemx
   poaddrdelivery               = poaddrdelivery   .

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

табличка return пишет что заказ измененен но открываю me23n там все по старому, в чем может быть проблема


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PO_CHANGE
СообщениеДобавлено: Пт, май 25 2012, 12:23 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Пн, сен 03 2007, 13:20
Сообщения: 1658
Откуда: Пермь, Москва
Пол: Мужской
Попробуйте менять количество в партии поставки: компонент POSCHEDULE поле QUANTITY


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

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


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

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


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

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