Loading



+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средства » SE37 - Построитель функций (Модератор: Dmitriy)Тема:
|- BAPI_AGREEMENT_MAINTAIN



Автор Тема: BAPI_AGREEMENT_MAINTAIN  (Прочитано 3942 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
BAPI_AGREEMENT_MAINTAIN
« : Сентябрь 11, 2007, 02:03:21 pm »
BAPI_AGREEMENT_MAINTAIN  - ктонибудь пользовался ?
А то что-то не проходит обновление измененных полей

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #1 : Сентябрь 11, 2007, 02:54:58 pm »
Ну судя по всему это типичный бачинпут, так что ставишь точку останова на строке 200 где стоит вызов:
CALL TRANSACTION lv_transaction
                   USING         lt_bdcdata
                   MODE          lv_transaction_mode
                   UPDATE        'S'
                   MESSAGES INTO lt_bdcmsgcoll.
Перед выполнением этого оператора в отладчике меняешь lv_transaction_mode = 'A' и жмешь выполнить оператор. Бачинпут будет выполняться в видимом режиме, вот и посмотришь на чем оно вылетает.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #2 : Сентябрь 11, 2007, 02:56:25 pm »
Спасибо за совет

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #3 : Сентябрь 11, 2007, 03:12:07 pm »
Спасибо за совет
Ну о результате сюда надеюсь напишешь?

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #4 : Сентябрь 11, 2007, 03:42:45 pm »
напишу конечно
только попожже

пока вот тестовый вариант, может руки просто кривые

DATA agreement_header LIKE BAPIOAHEAD occurs 0 with header line.
  "DATA ls_agreement_header LIKE LINE OF agreement_header.
  DATA agreement_headerx LIKE BAPIOAHEAX occurs 0 with header line.
  "DATA ls_agreement_headerx LIKE LINE OF agreement_headerx.

  LOOP AT gt_alvtab INTO ls_alvtab.
    agreement_header-agmt_no    = ls_alvtab-ebeln.
    agreement_header-DOC_CAT    = ls_alvtab-bstyp.
    agreement_header-DOC_TYPE   = ls_alvtab-bsart.
    agreement_header-pur_group  = ls_alvtab-ekgrp.
    APPEND agreement_header.

    " agreement_headerx-agmt_no = ls_alvtab-ebeln.
    agreement_headerx-agmt_no = 'X'.
    agreement_headerx-pur_group = 'X'.
    APPEND agreement_headerx.

    CALL FUNCTION 'BAPI_AGREEMENT_MAINTAIN'
    EXPORTING
      IM_AGREEMENT_HEADER = agreement_header
      IM_AGREEMENT_HEADER_X = agreement_headerx
      "IM_ALL_ITEMS_PASSED = space
    TABLES
      EXT_RETURN = po_bapiret2
      .
   

  ENDLOOP.

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #5 : Сентябрь 11, 2007, 07:49:28 pm »
Да братан... чего-то ты тут накрутил, сам черт ногу сломает... вообще все кажется гораздо проще. Вот рабочий пример для конкретного документа контракта:

REPORT ytov_test_mk31k .

DATA: l_im_agreement_header LIKE bapioahead,
      l_im_agreement_header_x LIKE bapioaheax,
      lt_imt_agreement_items LIKE bapioaitem OCCURS 1 WITH HEADER LINE,
     lt_imt_agreement_items_x LIKE bapioaitex OCCURS 1 WITH HEADER LINE,
      lt_return LIKE bapiret2 OCCURS 1 WITH HEADER LINE.


CLEAR: l_im_agreement_header, l_im_agreement_header_x,
       lt_imt_agreement_items, lt_imt_agreement_items_x, lt_return,
       lt_imt_agreement_items[], lt_imt_agreement_items_x[],
       lt_return[].

* Параметры для обработки (номер документа, типа документа контракт -
* можно чиать из таблицы если это изменение для создания надо задать,
* код валюты - ну в 4.6 почему-то требует заполнения этого поля, иначе
* говорит, что ошибка валюта не определена, надо читать из таблицы EKKO
* ну если это изменение, а иначе заполняем).
l_im_agreement_header-agmt_no    = '4600000001'.
l_im_agreement_header-doc_cat    = 'K'.
l_im_agreement_header-currency   = 'UAH'.

* Изменяемые поля заголовка (Для примера группа закупок)
l_im_agreement_header-pur_group = '004'.
l_im_agreement_header_x-pur_group = 'X'.

* Параметры для обработки (номер изменяемой строки/позиции договора)
lt_imt_agreement_items-agrmt_item = '00010'.
lt_imt_agreement_items_x-agrmt_item = '00010'.

* Изменяемы позиции контракта (Для примера количество)
lt_imt_agreement_items-target_qty = '12'.
lt_imt_agreement_items_x-target_qty = 'X'.
APPEND: lt_imt_agreement_items, lt_imt_agreement_items_x.

CALL FUNCTION 'BAPI_AGREEMENT_MAINTAIN'
     EXPORTING
          im_agreement_header   = l_im_agreement_header
          im_agreement_header_x = l_im_agreement_header_x
          im_all_items_passed   = space
     TABLES
          ext_return            = lt_return
          imt_agreement_items   = lt_imt_agreement_items
          imt_agreement_items_x = lt_imt_agreement_items_x.

LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
  MESSAGE ID lt_return-id TYPE lt_return-type NUMBER lt_return-number
          WITH lt_return-message_v1 lt_return-message_v2
               lt_return-message_v3 lt_return-message_v4.
ENDLOOP.
Опять же в структуру l_im_agreement_header_x, как и для lt_imt_agreement_items_x включаем галки только для полей которые меняем. Если поле не меняется, из примера это код валюты, то в эту структуру для поля валюты галку ставить не нужно.

Кстати по значению поля l_im_agreement_header-doc_cat, оно определяет тип транзакции которую следует вызвать для обработки документа. Вариантов там судя по тексту:
  CASE im_bstyp.
    WHEN 'K'.
      IF im_bapi_mode EQ gc_create_mode.
        IF sy-saprl(1) EQ '3'.
          ch_tcode = 'ME31'.
        ELSE.
          ch_tcode = 'ME31K'.
        ENDIF.
      ELSE.
        IF sy-saprl(1) EQ '3'.
          ch_tcode = 'ME32'.
        ELSE.
          ch_tcode = 'ME32K'.
        ENDIF.
      ENDIF.
    WHEN 'L'.
      IF im_bapi_mode EQ gc_create_mode.
        IF sy-saprl(1) EQ '3'.
          ch_tcode = 'ME31'.
        ELSE.
          ch_tcode = 'ME31L'.
        ENDIF.
      ELSE.
        IF sy-saprl(1) EQ '3'.
          ch_tcode = 'ME32'.
        ELSE.
          ch_tcode = 'ME32L'.
        ENDIF.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
т.е. может быть или K-Контракт или L-Соглашение о поставках, любой другой тип документа закупки проезжает мимо кассы. Ну и типа если система до версии 4, то используется старые транзакции, а если старше, то новые.

PS: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.
« Последнее редактирование: Сентябрь 11, 2007, 07:54:58 pm от Uukrul »

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #6 : Сентябрь 12, 2007, 07:38:01 am »
PS: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.

Исправлюсь.

За помощь спасибо. Сейчас буду пробывать.

Alexey

  • Гость
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #7 : Январь 29, 2009, 04:18:29 pm »
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #8 : Январь 29, 2009, 04:31:47 pm »
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться
Ну ты бы это... может свой коду привел? Может ты там COMMIT WORK не дергаешь? Хотя вроде как он там не нужен, но я бы поставил после вызова функции и проверил что получится.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #9 : Январь 29, 2009, 06:01:28 pm »
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....

Все равно не помагает.

Alexey

  • Гость
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #10 : Январь 29, 2009, 06:04:52 pm »
код вырезан тот, что сверху
l_im_agreement_header-agmt_no    = '3000000065'.
l_im_agreement_header-doc_cat    = 'K'.
l_im_agreement_header-currency   = 'UAH'.

l_im_agreement_header-DOC_DATE = '20090228'.
l_im_agreement_header_x-DOC_DATE = 'X'.
l_im_agreement_header-VPER_START = '20090228'.
l_im_agreement_header_x-VPER_START = 'X'.
APPEND: lt_imt_agreement_items, lt_imt_agreement_items_x.

CALL FUNCTION 'BAPI_AGREEMENT_MAINTAIN'
     EXPORTING
          im_agreement_header   = l_im_agreement_header
          im_agreement_header_x = l_im_agreement_header_x
          im_all_items_passed   = space
     TABLES
          ext_return            = lt_return
          imt_agreement_items   = lt_imt_agreement_items
          imt_agreement_items_x = lt_imt_agreement_items_x.

COMMIT WORK AND WAIT.

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #11 : Январь 29, 2009, 06:13:18 pm »
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....
Да оно по разному может быть...  странно что не сохраняет, тот пример что я нарисовал работает без проблем и изменения проводит. А если в отладке выполнить и посмотреть что в таблице lt_return на выходе, т.е. в сам ФМ заходить не надо.

Alexey

  • Гость
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #12 : Январь 29, 2009, 06:58:35 pm »
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #13 : Январь 29, 2009, 08:53:45 pm »
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."
Ну так... тут уже совсем другой коленкор, это экран какого-то подтверждения которое надо нажать... а вот что это за подтверждение?  Уже надо смотреть на контракт который модифицируешь или вот что, можно еще просто, это функция POPUP_TO_CONFIRM_WITH_MESSAGE ну которой этот экран вызывается. Поставь в ней точку останова и попадешь в отладку как раз в тот момент, когда оно выскакивает, нажмешь F7 и посмотришь что спрашивает... и всех делов.

PS: Не забудь отписать результат...

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #14 : Январь 29, 2009, 10:06:53 pm »
я так и думал, там выскакиевает сообщение, что выходные документы не найдены,
при этом все это есть как в манданте разработки так и в тестовом (давно собирался почистить/разобратся но руки так и не доходят), а в продуктиве нету

из-за этого и делали через batchinput предидущую разработку, а не через эту бапишку ...
т

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #15 : Январь 29, 2009, 10:08:08 pm »
как отключить? с чего начать?
попробую убрать сейчас ...

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #16 : Январь 29, 2009, 10:59:23 pm »
как отключить? с чего начать?
попробую убрать сейчас ...
С чего начать... ну наверное надо посмотреть какой выходной документ оно хочет вывести...

Alexey

  • Гость
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #17 : Январь 30, 2009, 01:26:49 pm »
Пытаюсь настроить выходные документы, выдает сообщение 515 (Для выходного документa NEU принтер не определен.)

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #18 : Январь 30, 2009, 02:41:33 pm »
Пытаюсь настроить выходные документы, выдает сообщение 515 (Для выходного документa NEU принтер не определен.)
Ну попробуй присвоить принтер своей группе закупки, должно вроде как по быстрому сработать... а вообще из документации типа так:
Цитировать
How is the printer determined for message output purposes?
The system checks whether a printer has been specified in the condition record.
If so, it is used.
If not, it checks the message type to see whether a print parameter has been set. If no parameter has been set, no message is generated.
If a parameter has been set, a printer is sought in accordance with this parameter. If a printer is found, it is used to output the message. If not, no message is generated.

Note:
You can change the printer when outputting messages (e.g. via the menu options Purchasing document> -> Messages -> Print/transmit). Select the desired message and choose Goto -> Message details -> Edit -> Means of communication.

PS: Кстати на будущее когда пишешь номер сообщения, то указывай так же и класс сообщений, так как 515 номер в каждом классе наверное есть.

Alexey

  • Гость
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #19 : Январь 30, 2009, 03:14:38 pm »
В этих настройках как раз и лазил, а вот группе закупок значение по умолчпанию поставил только сей час :) В общем получилось. Большое спасибо за помощь!!!

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: BAPI_AGREEMENT_MAINTAIN
« Ответ #20 : Декабрь 27, 2010, 01:57:11 pm »
Приятная новость, в 6-ке (возможно и в 5-ке) появились новые бапишки для нормальной работы с контрактами
BAPI_CONTRACT_CHANGE
BAPI_CONTRACT_CREATE
BAPI_CONTRACT_GETDETAIL
которые работают (судя по коду) не на бачинпуте.


 


Facebook Comments