Текущее время: Ср, июл 23 2025, 13:56

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: ФМ для обновления VBRK
СообщениеДобавлено: Пн, июл 30 2007, 10:33 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Добрый день!!!
Не подскажете Функциональный Модуль(BAPI) для обновления таблицы VBRK, причем обновление дополнительной структуры

Спасибо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 11:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Все методы объекта ItCustBillingDoc просто вызывают vf01-3.
Так что, в крайнем случае, можно использовать batch input.

А вообще, обновлять z-поля можно непосредственно в табличке. Только блокировку не забыть поставить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 11:18 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Вообщем, надо описать проблему полностью...
При деблокировании фактуры необходимо создать еще один документ.
Вся эта процедура работает с использованием OPEN-FI 00001025.
В этом OPEN-FI вызывается ФМ(ZSD_ACC_DOC_POST_BILLING_DOC) с дополнением STARTING NEW TASK... PERFORMING, а в нем уже запускается BAPI_ACC_DOCUMENT_POST и запускается ФМ с дополнением IN UPDATE TASK для заполнения поля VBRK-ZZBELNR_D. Поле VBRK-ZZBELNR_D заполняется, если я не жду пока мой ФМ ZSD_ACC_DOC_POST_BILLING_DOC выполниться, то есть не использую конструкцию WAIT UNTIL...
Но мне необходимо удостовериться, что документ создан... Но тогда(использую конструкцию WAIT UNTIL...) почему-то поле VBRK-ZZBELNR_D не заполняется, точнее не сохраняется... Непонятно, что делать


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 11:30 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Указанием запуска задач, отложеных через директиву IN UPDATE TASK является явный или не явный COMMIT WORK


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 11:59 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Это я знаю... Но вот так получается, что если использую WAIT UNTIL...
, то в БД не сохраняется)))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 12:28 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Vadim написал(а):
Это я знаю... Но вот так получается, что если использую WAIT UNTIL...
, то в БД не сохраняется)))


Наверно надо явно вызвать 'BAPI_TRANSACTION_COMMIT'
или COMMIT WORK
после BAPI_ACC_DOCUMENT_POST и далее
запускать ФМ без дополнения IN UPDATE TASK для заполнения поля VBRK-ZZBELNR_D

Хотя у Вас так накручено, что может и в dump вывалиться. Тогда может стоит попробовать использовать SET UPDATE TASK LOCAL


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 12:44 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Вообще-то параллельно запущенный процесс должен дождаться завершения процесса, его породивiего - тогда можно говорить, что можно приступать к обновлению. При запуске параллельного ФМ ему можно передать свой pid, и есть ФМ который возвращает список текущих процессов(pid)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 12:47 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Но запись в VBRK, которую хочу обновить, блокирована программой...
BAPI_TARNSACTION_COMMIT и COMMIT WORK используются...
Пока не могу понять причины.. Комментарю WAIL UNTIL... и все работает, только при ошибочном вызове BAPI ничего не появляется


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 12:50 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Vadim написал(а):
Комментарю WAIL UNTIL... и все работает, только при ошибочном вызове BAPI ничего не появляется


Видимо WAIL UNTIL мешает неявнову вызову COMMIT чтобы завершить задачи в IN UPDATE TASK.

Или не хватает еще одного явного COMMIT.


Последний раз редактировалось vga Пн, июл 30 2007, 17:18, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 13:17 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
А как обновить VBRK?? Я же не могу в OPEN-FI использовать COMMIT WORK...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 13:18 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Сейчас еще попробую SET UPDATE TASK LOCAL


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 13:38 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
SET UPDATE TASK LOCAL не помог.
Кстати, BAPI как раз отрабатывает, не отрабатывает простой UPDATE


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 15:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Есть предположение, что после OPEN-FI 00001025 в том же процессе идёт обновление vbrk. А обновление VBRK-ZZBELNR_D происходит в другом, Вашем, процессе.
Так вот если первый процесс ждёт, то после того, как второй заканчивается, VBRK обновляется полностью и ZZBELNR_D затирается.
Если же второй процесс выполняется после первого, то обновляется только одно поле и всё Ок.

Надо бы поподробнее код привести, а то получается гадание на кофейной гуще.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 15:37 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Вот, что происходит в OPEN-FI

g_v_flag = space.
CALL FUNCTION 'ZSD_ACC_DOC_POST_BILLING_DOC'
STARTING NEW TASK 'ACC_POST'
PERFORMING RETURN_INFO_POST ON END OF TASK
EXPORTING
IP_VBRK = g_wa_vbrk
TABLES
TP_BSEG = t_bseg
TP_RETURN = g_it_return.

WAIT UNTIL g_v_flag = 'X'.

IF lines( g_it_return ) = 1.
.......
ENDIF.

FORM RETURN_INFO_POST USING TASKNAME.
RECEIVE RESULTS FROM FUNCTION 'ZSD_ACC_DOC_POST_BILLING_DOC'
IMPORTING
IP_VBRK = g_wa_vbrk
TABLES
TP_BSEG = g_it_bseg
TP_RETURN = g_it_return
EXCEPTIONS
COMMUNICATION_FAILURE = 1
SYSTEM_FAILURE = 2 .

g_v_flag = 'X'.
ENDFORM.


* ФМ, где BAPI вызывается и обновление VBRK
FUNCTION ZSD_ACC_DOC_POST_BILLING_DOC .
....
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = l_wa_doc_header
IMPORTING
OBJ_KEY = l_v_objkey
TABLES
ACCOUNTGL = l_it_accgl
CURRENCYAMOUNT = l_it_curr_amount
EXTENSION1 = l_it_ext1
RETURN = tp_return.

IF lines( tp_return ) > 1.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
.....
* заполняем поле VBRK-VBELNR_D номером нового документа
CALL FUNCTION 'ZSD_DEV_UPDATE_VBRK_BELNR_D'
IN UPDATE TASK
EXPORTING
IP_VBELN = ip_vbrk-vbeln
IP_BELNR_D = l_v_objkey.

COMMIT WORK.

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

ENDIF.
ENDFUNCTION.


* обновление VBRK
FUNCTION ZSD_DEV_UPDATE_VBRK_BELNR_D.
*"----------------------------------------------------------------------
*"*"Функциональный модуль обновления:
*"
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(IP_VBELN) TYPE VBELN
*" VALUE(IP_BELNR_D) TYPE ZSD_DEV_E_BELNR
*"----------------------------------------------------------------------

DATA: l_wa_vbrk TYPE vbrk.

SELECT SINGLE *
FROM vbrk
INTO l_wa_vbrk
WHERE vbeln = ip_vbeln.

CHECK sy-subrc = 0.

l_wa_vbrk-zzbelnr_d = ip_belnr_d.

UPDATE vbrk
SET zzbelnr_d = l_wa_vbrk-zzbelnr_d
WHERE vbeln = ip_vbeln.
ENDFUNCTION.


Последний раз редактировалось Vadim Пн, июл 30 2007, 16:01, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 30 2007, 15:55 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Если так сделать?

Code:
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X' .

COMMIT WORK.

* заполняем поле VBRK-VBELNR_D номером нового документа
CALL FUNCTION 'ZSD_DEV_UPDATE_VBRK_BELNR_D'
EXPORTING
IP_VBELN = ip_vbrk-vbeln
IP_BELNR_D = l_v_objkey.



Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5  След.

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


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

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


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

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