Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Паганель от Сентябрь 11, 2007, 02:03:21 pm

Название: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Сентябрь 11, 2007, 02:03:21 pm
BAPI_AGREEMENT_MAINTAIN  - ктонибудь пользовался ?
А то что-то не проходит обновление измененных полей
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Сентябрь 11, 2007, 02:54:58 pm
Ну судя по всему это типичный бачинпут, так что ставишь точку останова на строке 200 где стоит вызов:
Код: You are not allowed to view links. Register or Login
CALL TRANSACTION lv_transaction
                   USING         lt_bdcdata
                   MODE          lv_transaction_mode
                   UPDATE        'S'
                   MESSAGES INTO lt_bdcmsgcoll.
Перед выполнением этого оператора в отладчике меняешь lv_transaction_mode = 'A' и жмешь выполнить оператор. Бачинпут будет выполняться в видимом режиме, вот и посмотришь на чем оно вылетает.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Сентябрь 11, 2007, 02:56:25 pm
Спасибо за совет
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Сентябрь 11, 2007, 03:12:07 pm
You are not allowed to view links. Register or Login
Спасибо за совет
Ну о результате сюда надеюсь напишешь?
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Сентябрь 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.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Сентябрь 11, 2007, 07:49:28 pm
Да братан... чего-то ты тут накрутил, сам черт ногу сломает... вообще все кажется гораздо проще. Вот рабочий пример для конкретного документа контракта:

Код: You are not allowed to view links. Register or Login
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, оно определяет тип транзакции которую следует вызвать для обработки документа. Вариантов там судя по тексту:
Код: You are not allowed to view links. Register or Login
  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: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Сентябрь 12, 2007, 07:38:01 am
You are not allowed to view links. Register or Login
PS: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.

Исправлюсь.

За помощь спасибо. Сейчас буду пробывать.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Alexey от Январь 29, 2009, 04:18:29 pm
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Январь 29, 2009, 04:31:47 pm
You are not allowed to view links. Register or Login
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться
Ну ты бы это... может свой коду привел? Может ты там COMMIT WORK не дергаешь? Хотя вроде как он там не нужен, но я бы поставил после вызова функции и проверил что получится.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Январь 29, 2009, 06:01:28 pm
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....

Все равно не помагает.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Alexey от Январь 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.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Январь 29, 2009, 06:13:18 pm
You are not allowed to view links. Register or Login
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....
Да оно по разному может быть...  странно что не сохраняет, тот пример что я нарисовал работает без проблем и изменения проводит. А если в отладке выполнить и посмотреть что в таблице lt_return на выходе, т.е. в сам ФМ заходить не надо.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Alexey от Январь 29, 2009, 06:58:35 pm
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Январь 29, 2009, 08:53:45 pm
You are not allowed to view links. Register or Login
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."
Ну так... тут уже совсем другой коленкор, это экран какого-то подтверждения которое надо нажать... а вот что это за подтверждение?  Уже надо смотреть на контракт который модифицируешь или вот что, можно еще просто, это функция POPUP_TO_CONFIRM_WITH_MESSAGE ну которой этот экран вызывается. Поставь в ней точку останова и попадешь в отладку как раз в тот момент, когда оно выскакивает, нажмешь F7 и посмотришь что спрашивает... и всех делов.

PS: Не забудь отписать результат...
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Январь 29, 2009, 10:06:53 pm
я так и думал, там выскакиевает сообщение, что выходные документы не найдены,
при этом все это есть как в манданте разработки так и в тестовом (давно собирался почистить/разобратся но руки так и не доходят), а в продуктиве нету

из-за этого и делали через batchinput предидущую разработку, а не через эту бапишку ...
т
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Январь 29, 2009, 10:08:08 pm
как отключить? с чего начать?
попробую убрать сейчас ...
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Январь 29, 2009, 10:59:23 pm
You are not allowed to view links. Register or Login
как отключить? с чего начать?
попробую убрать сейчас ...
С чего начать... ну наверное надо посмотреть какой выходной документ оно хочет вывести...
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Alexey от Январь 30, 2009, 01:26:49 pm
Пытаюсь настроить выходные документы, выдает сообщение 515 (Для выходного документa NEU принтер не определен.)
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Uukrul от Январь 30, 2009, 02:41:33 pm
You are not allowed to view links. Register or Login
Пытаюсь настроить выходные документы, выдает сообщение 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 номер в каждом классе наверное есть.
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Alexey от Январь 30, 2009, 03:14:38 pm
В этих настройках как раз и лазил, а вот группе закупок значение по умолчпанию поставил только сей час :) В общем получилось. Большое спасибо за помощь!!!
Название: Re: BAPI_AGREEMENT_MAINTAIN
Отправлено: Паганель от Декабрь 27, 2010, 01:57:11 pm
Приятная новость, в 6-ке (возможно и в 5-ке) появились новые бапишки для нормальной работы с контрактами
BAPI_CONTRACT_CHANGE
BAPI_CONTRACT_CREATE
BAPI_CONTRACT_GETDETAIL
которые работают (судя по коду) не на бачинпуте.