Korvax написал:
denis_vlk_88 написал(а):
По коду ошибки нашел место
Если запускать отдельно BAPI_GOODSMVT_CREATE, то в переменной T158-TCODE прописывается старый код транзакции MB1B
НО, если BAPI_GOODSMVT_CREATE вызывать из другого ФМ, то переменная T158-TCODE пуста
И дальше в отладке смотрите..
ФМ BAPI_GOODSMVT_CREATE выбирает данные из t158g (именно тут для кода операции 04 определяется код транзакции). Вероятно у вас так же, иначе была бы другая ошибка.
далее вызов MB_CREATE_GOODS_MOVEMENT, куда передается t158g-tcode
потом переменная меняется: tcode = ctcod
и выбор данных из t158 WHERE tcode = tcode.
Ну, а дальше проверка, которая у вас на скриншоте. Осталось поставить точки прерывания на изменение переменной, пройти отладчиком и увидеть причину.
Вот в чем проблема: перед вызовом BAPI_GOODSMVT_CREATE запускаю ФМ по определению партии - VB_COMPLETE_DETERMINATION.
Закоментил этот кусок, и работает все.
Но! беда в том, что без него нельзя.
Вот и интеренсо, как ФМ VB_COMPLETE_DETERMINATION по определению партии влияет на работу BAPI_GOODSMVT_CREATE.
Code:
"Выбор партии
ls_cdcom-matnr = material.
ls_cdcom-werks = plant.
ls_cdcom-lgort = from_warehouse.
ls_cdcom-bwart = '311'.
ls_cdcom-xchpf = 'X'.
ls_cdcom-bwtty = 'X'.
ls_cdcom-kappl = 'ME'.
ls_cdcom-nodia = 'X'.
CALL FUNCTION 'VB_COMPLETE_DETERMINATION'
TABLES
e_cdstock = lt_cdstock
CHANGING
x_cdcom = ls_cdcom
EXCEPTIONS
no_determination_possible = 1
no_material = 2
no_plant = 3
data_mismatch = 4
OTHERS = 5
.