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

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


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

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


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

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