‎2006 Sep 11 4:40 AM
Hi all,
It would be kind if someone can just brief how to handle a table control in BDC i.e No of line items in a table control for single header above.
thanks
‎2006 Sep 11 4:43 AM
Hi,
Check this link.This contains very good example.
http://www.sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm
Kindly reward points by clicking star on the left of reply if it helps.
Regards,
Ram
‎2006 Sep 11 5:08 AM
Hello,
This one program which handles table control.
FORM pc_upload .
DATA : w_filename_tx TYPE string.
MOVE p_f_in TO w_filename_tx.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = w_filename_tx
filetype = 'ASC'
IMPORTING
filelength = w_filelength_pd
TABLES
data_tab = t_data_in
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
invalid_type = 5
unknown_error = 7.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDFORM. " pc_upload
&----
*& Form format_data
&----
text
----
FORM format_data .
LOOP AT t_data_in .
SPLIT t_data_in AT ','
INTO g_t_tab-omatnr
g_t_tab-nmatnr
g_t_tab-owerks
g_t_tab-olgort
g_t_tab-erfmg.
APPEND g_t_tab.
ADD 1 TO g_f_recs.
ENDLOOP.
ENDFORM. " format_data
*&----
**& Form validate_date *
*&----
**& text *
*&----
**& --> p1 text *
**& <-- p2 text *
*&----
*
**validating date
*
FORM validate_date .
w_date = sy-datum.
CALL FUNCTION 'CONVERSION_EXIT_D3DAT_OUTPUT'
EXPORTING
input = w_date
IMPORTING
output = w_date1.
MOVE w_date1+6(4) TO w_date2.
ENDFORM. " validate_date
*
*&----
**& Form UPDATE_PROCESSING
*&----
*
FORM update_processing.
PERFORM construct_bdc_data .
ENDFORM. " UPDATE_PROCESSING
*
&----
*& Form Construct_BDC_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM construct_bdc_data .
DATA: w_qty_tx(17),
w_meins LIKE mara-meins.
LOOP AT g_t_tab.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMM07M' '0400'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MKPF-BUDAT'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'MKPF-BKTXT' '93900 Golive'.
PERFORM bdc_field USING 'RM07M-BWARTWA' '309'.
PERFORM bdc_field USING 'RM07M-WERKS' g_t_tab-owerks.
PERFORM bdc_field USING 'RM07M-LGORT' g_t_tab-olgort.
PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MSEG-ERFMG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'MSEGK-UMWRK' p_nwerks.
PERFORM bdc_field USING 'MSEGK-UMLGO' p_nlgort.
PERFORM bdc_field USING 'MSEGK-UMMAT' g_t_tab-nmatnr.
PERFORM bdc_field USING 'MSEG-MATNR(01)' g_t_tab-omatnr.
w_qty_tx = g_t_tab-erfmg.
PERFORM bdc_field USING 'MSEG-ERFMG(01)' w_qty_tx.
CLEAR w_meins.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = g_t_tab-nmatnr
IMPORTING
OUTPUT = g_t_tab-nmatnr.
SELECT SINGLE meins
INTO w_meins
FROM mara
WHERE matnr = g_t_tab-nmatnr.
PERFORM bdc_field USING 'MSEG-ERFME(01)' w_meins.
PERFORM bdc_field USING 'DKACB-FMORE' 'X'.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
PERFORM call_transaction.
ENDLOOP.
ENDFORM. " Construct_BDC_data
&----
*& Form call_transaction
&----
text
----
--> p1 text
<-- p2 text
*----
FORM call_transaction .
DATA: w_mode VALUE 'N'.
Exucute transaction via Call Transaction
CALL TRANSACTION 'MB1B'
USING bdcdata
MODE w_mode
UPDATE 'S'
MESSAGES INTO t_msg .
check for all terminal error messages
READ TABLE t_msg WITH KEY msgtyp = 'S'
msgid = 'M7'
msgnr = '060'.
IF sy-subrc EQ 0.
g_t_mat-mblnr = t_msg-msgv1.
ELSE.
LOOP AT t_msg.
CHECK t_msg-msgtyp NE 'S'.
CHECK t_msg-msgtyp NE 'I'.
CHECK t_msg-msgtyp NE 'W'.
PERFORM get_msg_text USING t_msg-msgid t_msg-msgnr
CHANGING g_t_mat-msg.
g_t_mat-status = t_msg-msgtyp.
EXIT.
ENDLOOP.
ENDIF.
append g_t_mat.
ENDFORM. " CALL TRANSACTION
&----
*& Form bdc_dynpro *
&----
*& text *
&----
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. " bdc_dynpro
&----
*& Form bdc_field *
&----
*& text *
&----
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. " bdc_field
&----
*& Form GET_MSG_TEXT
&----
text
----
-->P_T_MSG_MSGID text
-->P_T_MSG_MSGNR text
<--P_W_DETAILS_MSG text
----
*
FORM get_msg_text USING p_msgid
p_msgnr
CHANGING p_text.
DATA : w_arbgb_tx LIKE t100-arbgb.
DATA : t100 LIKE t100.
GET MESSAGE TEXT
w_arbgb_tx = p_msgid.
CALL FUNCTION 'T100_SINGLE_READ'
EXPORTING
t100_sprsl = sy-langu
t100_arbgb = w_arbgb_tx
t100_msgnr = p_msgnr
IMPORTING
wt100 = t100
EXCEPTIONS
not_found = 1
OTHERS = 2.
CHECK sy-subrc = 0.
p_text = t100-text.
ENDFORM. " GET_MSG_TEXT
&----
*& Form bdc_create *
&----
*& text *
&----
*& --> p1 text *
*& <-- p2 text *
&----
FORM bdc_create .
PERFORM bdc_open_group.
PERFORM bdcdata_populate.
PERFORM bdc_close.
ENDFORM. " bdc_create
&----
*& Form bdc_open_group *
&----
*& text *
&----
*& --> p1 text *
*& <-- p2 text *
&----
FORM bdc_open_group .
DATA : w_user_tx LIKE apqi-userid.
w_user_tx = sy-uname.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = 'LT06'
keep = 'X'
user = w_user_tx
EXCEPTIONS
client_invalid = 01
destination_invalid = 02
group_invalid = 03
holddate_invalid = 04
internal_error = 05
queue_error = 06
running = 07
user_invalid = 08.
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
WRITE: / 'BDC OPEN ERROR', sy-subrc.
ENDCASE.
ENDFORM. " bdc_open_group
&----
*& Form bdc_populate *
&----
*& text *
&----
*& --> p1 text *
*& <-- p2 text *
&----
FORM bdcdata_populate .
LOOP AT g_t_mat.
REFRESH bdcdata.
PERFORM bdc_dynpro1 USING 'SAPML02B' '0203'.
PERFORM bdc_field1 USING 'BDC_CURSOR' 'RL02B-DUNKL'.
PERFORM bdc_field1 USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field1 USING 'RL02B-MBLNR' g_t_mat-mblnr.
PERFORM bdc_field1 USING 'RL02B-MJAHR' w_date2.
PERFORM bdc_field1 USING 'RL02B-LGNUM' p_lgnum.
PERFORM bdc_field1 USING 'RL02B-DUNKL' 'D'.
w_tcode = 'LT06'.
PERFORM bdc_insert.
ENDLOOP.
ENDFORM. " bdcdata_populate
&----
*& Form bdc_insert *
&----
*& text *
&----
*& --> p1 text *
*& <-- p2 text *
&----
FORM bdc_insert.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = w_tcode
TABLES
dynprotab = bdcdata
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
WRITE: / 'BDC INSERT ERROR', sy-subrc.
ENDCASE.
ENDFORM. " bdc_insert
&----
*& Form bdc_close1 *
&----
*& text *
&----
*& --> p1 text *
*& <-- p2 text *
&----
FORM bdc_close.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
WRITE: / 'BDC CLOSE ERROR', sy-subrc.
ENDCASE.
ENDFORM. " bdc_close
Please check it.
Regards