Handling Table Control in BDC
Handling Table Control in BDC
OCCURS 0,
"Material Number.
"Qyantity.
"Net Price.
"Plant.
"Item Number.
:
:
:
:
:
:
:
*include bdcrecx1.
INCLUDE zmm_incl_purchaseorderkb01.
*----------------------------------------------------------------------*
*
Search help for file
*
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name
= p_file.
START-OF-SELECTION.
*----------------------------------------------------------------------*
*
To upload the data into line structure
*
*----------------------------------------------------------------------*
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_file
filetype = 'DAT'
TABLES
data_tab = it_dummy.
*----------------------------------------------------------------------*
*
Processing the data from line structure to internal tables
*
*----------------------------------------------------------------------*
REFRESH:it_me21.
CLEAR :it_me21.
LOOP AT it_dummy.
IF it_dummy-dummy+0(01) = 'H'.
v_indx = v_indx + 1.
CLEAR it_idata.
REFRESH it_idata.
CLEAR it_me21-x_data.
REFRESH it_me21-x_data.
SHIFT it_dummy.
SPLIT it_dummy AT v_delimit INTO it_me21-lifnr
it_me21-bsart
it_me21-bedat
it_me21-ekorg
it_me21-ekgrp.
APPEND it_me21.
ELSEIF it_dummy-dummy+0(01) = 'L'.
SHIFT it_dummy.
SPLIT it_dummy AT v_delimit INTO it_idata-ematn
it_idata-menge
it_idata-netpr
it_idata-werks
it_idata-ebelp.
APPEND it_idata TO it_me21-x_data.
MODIFY it_me21 INDEX v_indx.
ENDIF.
ENDLOOP.
*----------------------------------------------------------------------*
*
To open the group
*
*----------------------------------------------------------------------*
PERFORM open_group.
*----------------------------------------------------------------------*
*
To populate the bdcdata table for header data
*
*----------------------------------------------------------------------*
LOOP AT it_me21.
v_count = v_count + 1.
REFRESH it_bdcdata.
PERFORM subr_bdc_table USING:
'X'
' '
' '
' '
' '
' '
' '
' '
' '
'SAPMM06E'
'BDC_CURSOR'
'BDC_OKCODE'
'EKKO-LIFNR'
'RM06E-BSART'
'RM06E-BEDAT'
'EKKO-EKORG'
'EKKO-EKGRP'
'RM06E-LPEIN'
'0100',
'EKKO-LIFNR',
'/00',
it_me21-lifnr,
it_me21-bsart,
it_me21-bedat,
it_me21-ekorg,
it_me21-ekgrp,
'T'.
'X' 'SAPMM06E'
'0120',
' ' 'BDC_CURSOR' 'RM06E-EBELP',
' ' 'BDC_OKCODE' '/00'.
MOVE 1 TO v_indx.
*-----To populate the bdcdata table for line item data
LOOP AT it_me21-x_data INTO x_idata.
CONCATENATE 'EKPO-EMATN(' v_indx ')' INTO v_fnam.
PERFORM subr_bdc_table USING ' ' v_fnam x_idata-ematn.
CONCATENATE 'EKPO-MENGE(' v_indx ')' INTO v_fnam.
PERFORM subr_bdc_table USING ' ' v_fnam x_idata-menge.
CONCATENATE 'EKPO-NETPR(' v_indx ')' INTO v_fnam.
PERFORM subr_bdc_table USING ' ' v_fnam x_idata-netpr.
CONCATENATE 'EKPO-WERKS(' v_indx ')' INTO v_fnam.
PERFORM subr_bdc_table USING ' ' v_fnam x_idata-werks.
v_indx = v_indx + 1.
PERFORM subr_bdc_table USING: 'X' 'SAPMM06E'
'0120',
' ' 'BDC_CURSOR' 'RM06E-EBELP',
' ' 'BDC_OKCODE' '/00'.
ENDLOOP.
PERFORM subr_bdc_table USING:
'X' 'SAPMM06E'
'0120',
' ' 'BDC_CURSOR' 'RM06E-EBELP',
' ' 'BDC_OKCODE' '=BU'.
WRITE :/ text-002.
ELSE.
WRITE :/ text-008,
35 v_ns.
SKIP.
WRITE:/ text-003,
17 text-004,
30 text-005.
ENDIF.
LOOP AT it_sucess.
WRITE:/4 it_sucess-lifnr,
17 it_sucess-tabix CENTERED,
30 it_sucess-sucess_rec.
ENDLOOP.
SKIP.
*-----To display the erroneous records
WRITE:/10
WRITE:/10
SKIP.
text-006.
SY-ULINE(17).
"Error Records
IF it_error
WRITE:/
ELSE.
WRITE:/
35
SKIP.
WRITE:/
17
30
ENDIF.
IS INITIAL.
text-007.
text-009,
v_ne.
text-003,
text-004,
text-005.
"Vendor Number
"Record number
"Message
LOOP AT it_error.
WRITE:/4 it_error-lifnr,
17 it_error-tabix CENTERED,
30 it_error-error_rec.
ENDLOOP.
REFRESH it_sucess.
REFRESH it_error.
ENDIF.
CODE IN INCLUDE.
*----------------------------------------------------------------------*
* Include
ZMM_INCL_PURCHASEORDERKB01
*----------------------------------------------------------------------*
DATA:
DATA:
DATA:
*----------------------------------------------------------------------*
*
Start new transaction according to parameters
*
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE TYPE ANY.
DATA: L_SUBRC LIKE SY-SUBRC.
*------batch input session
IF SESSION = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= TCODE
TABLES
DYNPROTAB = it_BDCDATA.
WRITE: / 'BDC_INSERT'(I03),
TCODE,
'returncode:'(I05),
SY-SUBRC,
'RECORD:',
SY-INDEX.
ELSE.
REFRESH it_MESSTAB.
CALL TRANSACTION TCODE USING it_BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO it_MESSTAB.
L_SUBRC = SY-SUBRC.
WRITE: / 'CALL_TRANSACTION',
TCODE,
'returncode:'(I05),
L_SUBRC,
'RECORD:',
SY-INDEX.
ENDIF.
*----------------------------------------------------------------------*
* Message handling for Call Transaction
*
*----------------------------------------------------------------------*
perform subr_mess_hand using g_mess.
*-----Erzeugen fehlermappe
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = E_GROUP
USER = sy-uname
KEEP = E_KEEP.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= TCODE
TABLES
DYNPROTAB = it_BDCDATA.
ENDIF.
REFRESH it_BDCDATA.
ENDFORM.
"BDC_TRANSACTION
*----------------------------------------------------------------------*
*
Form subr_bdc_table
*
*----------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0220 text
*
*
-->P_0221 text
*
*
-->P_0222 text
*
*----------------------------------------------------------------------*
FORM subr_bdc_table USING
CLEAR it_bdcdata.
IF P_0220 = ' '.
CLEAR it_bdcdata.
it_bdcdata-fnam
it_bdcdata-fval
APPEND it_bdcdata.
ELSE.
it_bdcdata-dynbegin
it_bdcdata-program
it_bdcdata-dynpro
APPEND it_bdcdata.
ENDIF.
ENDFORM.
= P_0221.
= P_0222.
= P_0220.
= P_0221.
= P_0222.
" subr_bdc_table
*----------------------------------------------------------------------*
*
Form subr_mess_hand
*
*----------------------------------------------------------------------*
*
text
*
*----------------------------------------------------------------------*
*
-->P_G_MESS text
*
*----------------------------------------------------------------------*
FORM subr_mess_hand USING P_G_MESS TYPE ANY.
LOOP AT IT_MESSTAB.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID
= it_messtab-msgid
LANG = it_messtab-msgspra
NO
= it_messtab-msgnr
v1
= it_messtab-msgv1
v2
= it_messtab-msgv2
IMPORTING
MSG
= P_G_MESS
EXCEPTIONS
OTHERS = 0.
CASE it_messtab-msgtyp.
when 'E'.
it_error-error_rec = P_G_MESS.
it_error-lifnr
= it_me21-lifnr.
it_error-tabix
APPEND IT_ERROR.
when 'S'.
it_sucess-sucess_rec
it_sucess-lifnr
it_sucess-tabix
APPEND IT_SUCESS.
= v_count.
= P_G_MESS.
= it_me21-lifnr.
= v_count.
endcase.
ENDLOOP.
Describe table it_sucess lines v_ns.
Describe table it_error lines v_ne.
ENDFORM.
" subr_mess_hand