Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Паганель от Сентябрь 11, 2007, 02:03:21 pm
-
BAPI_AGREEMENT_MAINTAIN - ктонибудь пользовался ?
А то что-то не проходит обновление измененных полей
-
Ну судя по всему это типичный бачинпут, так что ставишь точку останова на строке 200 где стоит вызов:
CALL TRANSACTION lv_transaction
USING lt_bdcdata
MODE lv_transaction_mode
UPDATE 'S'
MESSAGES INTO lt_bdcmsgcoll.
Перед выполнением этого оператора в отладчике меняешь lv_transaction_mode = 'A' и жмешь выполнить оператор. Бачинпут будет выполняться в видимом режиме, вот и посмотришь на чем оно вылетает.
-
Спасибо за совет
-
Спасибо за совет
Ну о результате сюда надеюсь напишешь?
-
напишу конечно
только попожже
пока вот тестовый вариант, может руки просто кривые
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.
-
Да братан... чего-то ты тут накрутил, сам черт ногу сломает... вообще все кажется гораздо проще. Вот рабочий пример для конкретного документа контракта:
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: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.
-
PS: Ну и это... тех коде-бокс не просто так присобачен для галочки, так что если текст вставляем, то и оформление делаем соответствующее.
Исправлюсь.
За помощь спасибо. Сейчас буду пробывать.
-
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться
-
Спасибо за бапишку, помогла, а вот можете еще подсказать такую штуку: в 200 строке меняю параметр на А, захожу в видимый режим, вижу изменения - они применяются. А если не захожу в видимый режим, то изменения не применяются. Подскажите плиз причину и как с ней бороться
Ну ты бы это... может свой коду привел? Может ты там COMMIT WORK не дергаешь? Хотя вроде как он там не нужен, но я бы поставил после вызова функции и проверил что получится.
-
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....
Все равно не помагает.
-
код вырезан тот, что сверху
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.
-
Эта же бапишка построена на bathinput, кажись вызывать COMMIT WORK не нужно .....
Да оно по разному может быть... странно что не сохраняет, тот пример что я нарисовал работает без проблем и изменения проводит. А если в отладке выполнить и посмотреть что в таблице lt_return на выходе, т.е. в сам ФМ заходить не надо.
-
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."
-
в ls_return в меседже пишет: "Данные пакетного ввода для экрана SAPLSPO1 0300 отсутствуют."
Ну так... тут уже совсем другой коленкор, это экран какого-то подтверждения которое надо нажать... а вот что это за подтверждение? Уже надо смотреть на контракт который модифицируешь или вот что, можно еще просто, это функция POPUP_TO_CONFIRM_WITH_MESSAGE ну которой этот экран вызывается. Поставь в ней точку останова и попадешь в отладку как раз в тот момент, когда оно выскакивает, нажмешь F7 и посмотришь что спрашивает... и всех делов.
PS: Не забудь отписать результат...
-
я так и думал, там выскакиевает сообщение, что выходные документы не найдены,
при этом все это есть как в манданте разработки так и в тестовом (давно собирался почистить/разобратся но руки так и не доходят), а в продуктиве нету
из-за этого и делали через batchinput предидущую разработку, а не через эту бапишку ...
т
-
как отключить? с чего начать?
попробую убрать сейчас ...
-
как отключить? с чего начать?
попробую убрать сейчас ...
С чего начать... ну наверное надо посмотреть какой выходной документ оно хочет вывести...
-
Пытаюсь настроить выходные документы, выдает сообщение 515 (Для выходного документa NEU принтер не определен.)
-
Пытаюсь настроить выходные документы, выдает сообщение 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 номер в каждом классе наверное есть.
-
В этих настройках как раз и лазил, а вот группе закупок значение по умолчпанию поставил только сей час :) В общем получилось. Большое спасибо за помощь!!!
-
Приятная новость, в 6-ке (возможно и в 5-ке) появились новые бапишки для нормальной работы с контрактами
BAPI_CONTRACT_CHANGE
BAPI_CONTRACT_CREATE
BAPI_CONTRACT_GETDETAIL
которые работают (судя по коду) не на бачинпуте.