Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

bom upload using bdc

Former Member
0 Likes
668

While uploading bom using bdc method how to upload item details into subscreen table.explain table control in bdc

1 ACCEPTED SOLUTION
Read only

Former Member
2 REPLIES 2
Read only

Former Member
Read only

Former Member
0 Likes
497

hi,

When you try to create, you would find a pushbutton 'INSERT NEW LINES' or something simialr to enter your data in the next line. Say you're entering the Material inthe first row, its field position would be MARA-MATNR(01). Now when you click the Insert Pushbitton the cursor always is at positon 2. so you have to loop the remaining data to enter in MARA-MATNR(02). Yougenereally set a counter and pass that counter value (in this case the counter value is 2 always)

The other case when you don't have a push button to Insert. Enter all the rows and then do a Page down. Now your cursor would sit back at position 2 again. Say if there are 20 rows in the first screen. You would keep incrementing the counter and then when it is 21 you do a pagedown and then reset the counter to 2. You loop the pagedown and in it you loop the counter.

I have attached a BDC where I use the second case (no push button). Do a recording and then you would know all the answers by yourself.

&----


*& REPORT ZPP0122 *

&----


*& Module : PP |

*& Application : The program loads the Material Assignment of Routings |

*& |

&----


REPORT zpp0122 NO STANDARD PAGE HEADING

MESSAGE-ID z0

LINE-SIZE 132

LINE-COUNT 65(2).

----


  • Internal Tables *

----


*Internal table for the Routing fields.

DATA: BEGIN OF i_rout OCCURS 0,

plnnr(8),

plnal(2),

matnr(18),

werks(4),

END OF i_rout.

DATA:

g_my_rec_in LIKE i_rout.

    • Declare internal table for Call Transaction and BDC Session

DATA: i_bdc_table LIKE bdcdata OCCURS 0 WITH HEADER LINE.

----


  • Global Variables *

----


*

DATA: g_counter(2) TYPE n,

g_field_name(18) TYPE c,

zc_yes TYPE syftype VALUE 'X'.

----


  • Selection Screen *

----


SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.

PARAMETERS: p_fname1 TYPE localfile .

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.

PARAMETERS: p_rloc1 AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-005.

PARAMETERS p_group(12) OBLIGATORY DEFAULT 'ZROUTING'.

SELECTION-SCREEN END OF BLOCK c.

SELECTION-SCREEN END OF BLOCK b.

SELECTION-SCREEN END OF BLOCK a.

**WRITE the report header

TOP-OF-PAGE.

INCLUDE zheading.

----


  • Start of selection *

----


START-OF-SELECTION.

  • Load Input file

PERFORM f_load_input_file.

  • Create BDC records.

PERFORM create_bdc_records .

&----


*& Form Create_BDC_records

&----


  • perform the BDC for the records in the internal table

----


FORM create_bdc_records .

IF NOT i_rout[] IS INITIAL.

    • Open BDC session

PERFORM open_bdc_session.

LOOP AT i_rout.

g_my_rec_in = i_rout.

AT NEW plnnr.

CLEAR i_bdc_table[].

PERFORM insert_screen_header.

ENDAT.

CONCATENATE 'MAPL-PLNAL(' g_counter ')' INTO g_field_name.

PERFORM bdc_field USING g_field_name i_rout-plnal.

CONCATENATE 'MAPL-MATNR(' g_counter ')' INTO g_field_name.

PERFORM bdc_field USING g_field_name i_rout-matnr.

CONCATENATE 'MAPL-WERKS(' g_counter ')' INTO g_field_name.

PERFORM bdc_field USING g_field_name i_rout-werks.

PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

g_counter = g_counter + 1.

  • Page Down for further entries

IF g_counter = 19.

PERFORM bdc_field USING 'BDC_OKCODE' '=P+'.

PERFORM bdc_dynpro USING 'SAPLCZDI' '1010'.

g_counter = 2.

ENDIF.

AT END OF plnnr.

PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.

PERFORM bdc_dynpro USING 'SAPLCPDI' '1200'.

PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.

PERFORM insert_bdc_new.

ENDAT.

ENDLOOP.

CLEAR i_rout[].

PERFORM close_bdc_session.

    • Release the BDC sessions created

PERFORM release_bdc.

ENDIF.

ENDFORM. " open_group

&----


*& Form bdc_dynpro_start

&----


  • Call the screen for the input of fields

----


  • -->P_G_PROGRAM_1

  • -->P_G_SCREEN

----


FORM bdc_dynpro USING p_g_program_1

p_g_screen.

CLEAR i_bdc_table.

i_bdc_table-program = p_g_program_1.

i_bdc_table-dynpro = p_g_screen.

i_bdc_table-dynbegin = 'X'.

APPEND i_bdc_table.

ENDFORM. " bdc_dynpro_start

&----


*& Form bdc_field

----


  • Insert field *

----


FORM bdc_field USING f_name f_value.

  • IF f_value <> space.

CLEAR i_bdc_table.

i_bdc_table-fnam = f_name.

i_bdc_table-fval = f_value.

APPEND i_bdc_table.

  • ENDIF.

ENDFORM. "bdc_insert_field

&----


*& Form open_bdc_session

&----


  • Create the BDC session

----


FORM open_bdc_session .

    • Open BDC session and creat and update condition records

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

  • DEST = FILLER8

group = p_group

  • HOLDDATE = FILLER8

keep = 'X'

user = sy-uname

  • RECORD = FILLER1

  • PROG = SY-CPROG

  • IMPORTING

  • QID =

EXCEPTIONS

client_invalid = 1

destination_invalid = 2

group_invalid = 3

group_is_locked = 4

holddate_invalid = 5

internal_error = 6

queue_error = 7

running = 8

system_lock_error = 9

user_invalid = 10

OTHERS = 11

.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " create_bdc_session

&----


*& Form insert_screen_header

&----


  • Header Data inserted

----


FORM insert_screen_header .

g_counter = 1.

  • First screen

PERFORM bdc_dynpro USING 'SAPLCPDI' '1010'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RC271-PLNNR'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ALUE'.

PERFORM bdc_field USING 'RC271-PLNNR' g_my_rec_in-plnnr.

PERFORM bdc_field USING 'RC27M-MATNR' ' '.

PERFORM bdc_field USING 'RC27M-WERKS' ' '.

PERFORM bdc_field USING 'RC271-PLNAL' ' '.

*next screen

PERFORM bdc_dynpro USING 'SAPLCPDI' '1200'.

PERFORM bdc_field USING 'BDC_OKCODE' '=MTUE'.

*next screen

PERFORM bdc_dynpro USING 'SAPLCZDI' '1010'.

ENDFORM. " insert_screen_header

&----


*& Form insert_bdc

&----


  • Insert the BDC for the transaction

----


FORM insert_bdc_new .

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = 'CA02'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

TABLES

dynprotab = i_bdc_table

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3

tcode_invalid = 4

printing_invalid = 5

posting_invalid = 6

OTHERS = 7

.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

CLEAR i_bdc_table[].

ENDFORM. " insert_bdc

&----


*& Form close_bdc_session

&----


  • Close the session

----


FORM close_bdc_session .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

not_open = 1

queue_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " close_bdc_session

&----


*& Form f_load_input_file

&----


  • Load the data file

----


FORM f_load_input_file.

  • The data file is from Presentation server

IF p_rloc1 = zc_yes.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

filename = p_fname1

filetype = 'DAT'

TABLES

data_tab = i_rout

EXCEPTIONS

conversion_error = 1

file_open_error = 2

file_read_error = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

EXIT.

ENDIF.

ENDIF.

ENDFORM. " f_load_input_file

&----


*& Form release_bdc

&----


  • Release BDC session

----


FORM release_bdc.

SUBMIT rsbdcsub WITH mappe EQ p_group

WITH von EQ sy-datum

WITH bis EQ sy-datum

WITH fehler EQ '.'

EXPORTING LIST TO MEMORY

AND RETURN.

ENDFORM.

Regards

Sudheer