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

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


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

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


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

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