He visto este ejemplo en el SDN.
Si te puede servir de ayuda para ver como rellena los datos...
REPORT ztest LINE-SIZE 80 NO STANDARD PAGE HEADING MESSAGE-ID 00.
DATA: BEGIN OF header.
INCLUDE STRUCTURE bapi_0050_header.
DATA: END OF header.
DATA: BEGIN OF item OCCURS 0.
INCLUDE STRUCTURE bapi_0050_item.
DATA: END OF item.
DATA: BEGIN OF sender OCCURS 0.
INCLUDE STRUCTURE bapi_0050_item.
DATA: END OF sender.
DATA: BEGIN OF period OCCURS 0.
INCLUDE STRUCTURE bapi_0050_period.
DATA: END OF period.
DATA: BEGIN OF period_sender OCCURS 0.
INCLUDE STRUCTURE bapi_0050_period.
DATA: END OF period_sender.
DATA: BEGIN OF return OCCURS 0.
INCLUDE STRUCTURE bapiret2.
DATA: END OF return.
DATA: poper(3) TYPE n,
start-of-selection.
PERFORM update_using_bapi .
*&---------------------------------------------------------------------
*& Form update_using_bapi
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM update_using_bapi .
PERFORM get_current_period.
PERFORM fill_header.
PERFORM fill_item.
PERFORM fill_sender.
PERFORM fill_period.
PERFORM save_doc.
ENDFORM. " update_using_bapi
*&---------------------------------------------------------------------
*& Form fill_header
*---------------------------------------------------------------------
FORM fill_header .
REFRESH: item,
period.
MOVE sy-datum TO : header-docdate.
header-fm_area = 'COCD'.
header-version = '000'.
header-docstate = '1'.
header-doctype = '1'.
header-process = 'TRAN'.
header-doctype = 'TRAN'.
ENDFORM. " fill_header
*&---------------------------------------------------------------------
*& Form fill_sender
*&---------------------------------------------------------------------
FORM fill_sender.
sender-item_num = 1.
sender-fisc_year = '2007'.
sender-budcat = '9F'.
sender-budtype = 'TSFS'.
sender-distkey = '0'.
sender-fund = '300002'.
sender-funds_ctr = '101165'.
sender-cmmt_item = 'CITEM'.
sender-trans_curr = 'CAD'.
sender-total_amount = '123.45'.
sender-valtype = 'B1'.
APPEND sender.
ENDFORM. " fill_sender
*&---------------------------------------------------------------------
*& Form fill_item
*&---------------------------------------------------------------------
FORM fill_item .
item-item_num = 2.
item-fisc_year = '2007'.
item-budcat = '9F'.
item-budtype = 'TSFR'.
item-distkey = '0'.
item-fund = '300002'.
item-funds_ctr = '100653'.
item-cmmt_item = 'CITEM'.
item-trans_curr = 'CAD'.
item-total_amount = '123.45'.
item-valtype = 'B1'.
APPEND item.
ENDFORM. " fill_item
*&---------------------------------------------------------------------
*& Form save_doc
*&---------------------------------------------------------------------
FORM save_doc .
DATA: do_commit,
first VALUE 'X'.
CLEAR return.
REFRESH return.
CALL FUNCTION 'BAPI_0050_CREATE'
EXPORTING
language = 'E'
header_data = header
testrun = 'X'
TABLES
item_data = item
sender_item_data = sender
sender_period_data = period_sender
period_data = period
return = return.
CLEAR return.
REFRESH return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
IMPORTING
return = return.
ENDFORM. " save_doc
*&---------------------------------------------------------------------
*& Form fill_period
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM fill_period .
period-item_num = 1.
period-budgeting_period = poper.
period-period_amount = '123.45'.
APPEND period.
period_sender-item_num = 1.
period_sender-budgeting_period = poper.
period_sender-period_amount = '123.45'.
APPEND period_sender.
ENDFORM. " fill_period
*&---------------------------------------------------------------------
*& Form get_current_period
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM get_current_period .
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
EXPORTING
i_date = sy-datum
i_periv = 'VA'
IMPORTING
e_buper = poper.
ENDFORM. " get_current_period
Un saludo.