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

call transaction method

Former Member
0 Likes
1,037

hi,

can any one send me a bdc program that will have the logic for entering as many no.of items as possible without taking the point of screen resolution of having n no. of fields.i want an exact program to send the data to the R/3 from flat file that has header and item details.

thanks and regards,

sultan.s

6 REPLIES 6
Read only

Former Member
0 Likes
868

Hi,

Check the sample program in the following link

http://sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm

Thanks

Naren

Read only

0 Likes
868

hi narendran,

if i use that program the records in the table control get filled to the extent of visibility of the no. of lines on the screen and then it gives an error message that the screen doesnot have the n+1 th row.

Read only

0 Likes
868

at LOOP AT BANKS.

put an if condition for the value of n . If the the value of n is more than the number of visible lines then use the 'P+' code ( which does the page down function) and bring the value of n to 1.

This should do the trick.

Read only

Former Member
0 Likes
868

hi,

check this example:

REPORT ZSR_BDC_TBCTRL

NO STANDARD PAGE HEADING LINE-SIZE 255.

TABLES : RF02K,LFA1,LFBK.

DATA : BEGIN OF IT_VEN OCCURS 0,

LIFNR LIKE RF02K-LIFNR,

KTOKK LIKE RF02K-KTOKK,

NAME1 LIKE LFA1-NAME1,

SORTL LIKE LFA1-SORTL,

LAND1 LIKE LFA1-LAND1,

SPRAS LIKE LFA1-SPRAS,

BANKS(6) TYPE C,

BANKL(17) TYPE C,

BANKN(19) TYPE C,

END OF IT_VEN.

DATA : BEGIN OF BANKS OCCURS 0,

BANKS LIKE LFBK-BANKS,

END OF BANKS,

BEGIN OF BANKL OCCURS 0,

BANKL LIKE LFBK-BANKL,

END OF BANKL,

BEGIN OF BANKN OCCURS 0,

BANKN LIKE LFBK-BANKN,

END OF BANKN.

DATA : FLD(20) TYPE C,

CNT(2) TYPE N.

DATA : BDCTAB LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

INCLUDE BDCRECX1.

START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'Z:\sr.TXT'

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = IT_VEN

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

PERFORM OPEN_GROUP.

LOOP AT IT_VEN.

REFRESH BDCDATA.

REFRESH : BANKS,BANKL,BANKN..

SPLIT IT_VEN-BANKS AT ',' INTO TABLE BANKS.

SPLIT IT_VEN-BANKL AT ',' INTO TABLE BANKL.

SPLIT IT_VEN-BANKN AT ',' INTO TABLE BANKN.

PERFORM BDC_DYNPRO USING 'SAPMF02K' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RF02K-KTOKK'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'RF02K-LIFNR'

IT_VEN-LIFNR.

PERFORM BDC_FIELD USING 'RF02K-KTOKK'

IT_VEN-KTOKK.

PERFORM BDC_DYNPRO USING 'SAPMF02K' '0110'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LFA1-SPRAS'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'LFA1-NAME1'

IT_VEN-NAME1.

PERFORM BDC_FIELD USING 'LFA1-SORTL'

IT_VEN-SORTL.

PERFORM BDC_FIELD USING 'LFA1-LAND1'

IT_VEN-LAND1.

PERFORM BDC_FIELD USING 'LFA1-SPRAS'

IT_VEN-SPRAS.

PERFORM BDC_DYNPRO USING 'SAPMF02K' '0120'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LFA1-KUNNR'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_DYNPRO USING 'SAPMF02K' '0130'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LFBK-BANKN(02)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTR'.

*perform bdc_field using 'LFBK-BANKS(01)'

  • 'DE'.

*perform bdc_field using 'LFBK-BANKS(02)'

  • 'DE'.

*perform bdc_field using 'LFBK-BANKL(01)'

  • '10020030'.

*perform bdc_field using 'LFBK-BANKL(02)'

  • '67270003'.

*perform bdc_field using 'LFBK-BANKN(01)'

  • '12345'.

*perform bdc_field using 'LFBK-BANKN(02)'

  • '66666'.

MOVE 1 TO CNT.

LOOP AT BANKS.

CONCATENATE 'LFBK-BANKS(' CNT ') ' INTO FLD.

PERFORM BDC_FIELD USING FLD BANKS-BANKS.

CNT = CNT + 1.

ENDLOOP.

MOVE 1 TO CNT.

LOOP AT BANKL.

CONCATENATE 'LFBK-BANKL(' CNT ') ' INTO FLD.

PERFORM BDC_FIELD USING FLD BANKL-BANKL.

CNT = CNT + 1.

ENDLOOP.

MOVE 1 TO CNT.

LOOP AT BANKN.

CONCATENATE 'LFBK-BANKN(' CNT ') ' INTO FLD.

PERFORM BDC_FIELD USING FLD BANKN-BANKN.

CNT = CNT + 1.

ENDLOOP.

PERFORM BDC_DYNPRO USING 'SAPMF02K' '0130'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LFBK-BANKS(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTR'.

PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=YES'.

PERFORM BDC_TRANSACTION USING 'XK01'.

ENDLOOP.

PERFORM CLOSE_GROUP.

flatfile:Tab delimitor

z795 0001 raey Y in EN IN,in 1222222,1222222 23456,67890

Read only

Former Member
0 Likes
868

Hi,

Check the <b>BDC table control example</b>

REPORT Y730_BDC5 .

*HANDLING TABLE CONTROL IN BDC

DATA : BEGIN OF IT_DUMMY OCCURS 0,

DUMMY(100) TYPE C,

END OF IT_DUMMY.

DATA : BEGIN OF IT_XK01 OCCURS 0,

LIFNR(10) TYPE C,

BUKRS(4) TYPE C,

EKORG(4) TYPE C,

KTOKK(4) TYPE C,

NAME1(30) TYPE C,

SORTL(10) TYPE C,

LAND1(3) TYPE C,

SPRAS(2) TYPE C,

AKONT(6) TYPE C,

FDGRV(2) TYPE C,

WAERS(3) TYPE C,

END OF IT_XK01,

BEGIN OF IT_BANK OCCURS 0,

BANKS(3) TYPE C,

BANKL(10) TYPE C,

BANKN(10) TYPE C,

KOINH(30) TYPE C,

LIFNR(10) TYPE C,

END OF IT_BANK.

DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,

IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = 'C:\VENDOR.TXT'

FILETYPE = 'ASC'

TABLES

DATA_TAB = IT_DUMMY.

LOOP AT IT_DUMMY.

IF IT_DUMMY-DUMMY+0(2) = '11'.

IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).

IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).

IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).

IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).

IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).

IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).

IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).

IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).

IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).

IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).

IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).

APPEND IT_XK01.

ELSE.

IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).

IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).

IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).

IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).

IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).

APPEND IT_BANK.

ENDIF.

ENDLOOP.

LOOP AT IT_XK01.

REFRESH IT_BDCDATA.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-REF_LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

IT_XK01-LIFNR.

perform bdc_field using 'RF02K-BUKRS'

IT_XK01-BUKRS.

perform bdc_field using 'RF02K-EKORG'

IT_XK01-EKORG.

perform bdc_field using 'RF02K-KTOKK'

IT_XK01-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-TELX1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

IT_XK01-NAME1.

perform bdc_field using 'LFA1-SORTL'

IT_XK01-SORTL.

perform bdc_field using 'LFA1-LAND1'

IT_XK01-LAND1.

perform bdc_field using 'LFA1-SPRAS'

IT_XK01-SPRAS.

perform bdc_dynpro using 'SAPMF02K' '0120'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-KUNNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-KOINH(02)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

DATA : FNAM(20) TYPE C,

IDX TYPE C.

MOVE 1 TO IDX.

LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.

CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKS.

CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKL.

CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKN.

CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-KOINH.

IDX = IDX + 1.

ENDLOOP.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-BANKS(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPMF02K' '0210'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-FDGRV'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFB1-AKONT'

IT_XK01-AKONT.

perform bdc_field using 'LFB1-FDGRV'

IT_XK01-FDGRV.

perform bdc_dynpro using 'SAPMF02K' '0215'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-ZTERM'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LFB5-MAHNA'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0310'.

perform bdc_field using 'BDC_CURSOR'

'LFM1-WAERS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFM1-WAERS'

IT_XK01-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'WYT3-PARVW(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPLSPO1' '0300'.

perform bdc_field using 'BDC_OKCODE'

'=YES'.

CALL TRANSACTION 'XK01' USING IT_BDCDATA

MODE 'A'

UPDATE 'S'

MESSAGES INTO IT_BDCMSGCOLL.

ENDLOOP.

FORM BDC_DYNPRO USING PROG SCR.

CLEAR IT_BDCDATA.

IT_BDCDATA-PROGRAM = PROG.

IT_BDCDATA-DYNPRO = SCR.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.

CLEAR IT_BDCDATA.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

ENDFORM.

Regards

Read only

Former Member
0 Likes
868

REPORT zkpcue029_rbc_enhancement

NO STANDARD PAGE HEADING

MESSAGE-ID zmm.

----


  • T Y P E D E C L A R A T I O N S *

----


  • Final output structure

TYPES:

BEGIN OF ty_s_cbht,

matnr TYPE zkt_cbht-matnr, "Material Number

werks TYPE zkt_cbht-werks, "Plant

stprs TYPE mbew-stprs , "Material Standard price

trcom TYPE zkt_cbht-trcom, "Transaction Complete Ind

END OF ty_s_cbht,

ty_t_cbht TYPE STANDARD TABLE OF ty_s_cbht,

  • Error Table Structure

BEGIN OF ty_s_matnr,

matnr TYPE matnr, "Material number

werks TYPE werks, "Plant

msg(500) TYPE c, "Messages

END OF ty_s_matnr,

ty_t_matnr TYPE STANDARD TABLE OF ty_s_matnr,

  • Plant n amd material pertaing to to single company code.

BEGIN OF ty_s_plant,

matnr TYPE matnr, "Material number

werks TYPE marc-werks, "Plant

END OF ty_s_plant,

ty_t_plant TYPE STANDARD TABLE OF ty_s_plant,

  • Success table Structure

BEGIN OF ty_s_success,

matnr TYPE matnr, "Material number

END OF ty_s_success,

ty_t_success TYPE STANDARD TABLE OF ty_s_success,

  • BDC Structure Table

ty_t_bdc_tab TYPE STANDARD TABLE OF bdcdata,

  • BDC Messages Structure

ty_s_bdcmsg TYPE bdcmsgcoll,

  • BDC messages Table

ty_t_bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll,

  • Capturing error messages

BEGIN OF ty_s_msgs,

msg(200), "Error messages

END OF ty_s_msgs,

ty_t_msgs TYPE STANDARD TABLE OF ty_s_msgs.

----


  • I N T E R N A L T A B L E S *

----


DATA:

gt_objhead TYPE TABLE OF solisti1, "Object Header Table

gt_objtxt TYPE TABLE OF solisti1, "Body

gt_reclist TYPE TABLE OF somlreci1, "Recipient list

gt_cbht TYPE ty_t_cbht, "internal table

gt_cbht_tmp TYPE ty_t_cbht, "Temp internal table

gt_error TYPE ty_t_matnr, "Error table

gt_marc TYPE ty_t_plant, "Plant table

gt_success TYPE ty_t_success, "Success table

gt_bdc_tab TYPE ty_t_bdc_tab, "BDC table

gt_bdc_msg TYPE STANDARD TABLE OF bdcmsgcoll. "Message table

----


  • V A R I A B L E S *

----


DATA:

gv_tab_lines TYPE i,

gv_bdc_open_flag TYPE c.

----


  • G L O B A L D A T A D E C L A R A T I O N S *

----


DATA:

gs_objtxt TYPE solisti1, "Body

gs_reclist TYPE somlreci1, "Recipient List

gs_doc_chng TYPE sodocchgi1, "Mail Header details

gs_error TYPE ty_s_matnr, "Error table structure

gs_marc TYPE ty_s_plant, "Plant data Structure

gs_success TYPE ty_s_matnr, "Success table Structure

gs_bdc_tab TYPE bdcdata, "BDC table data

gt_msgs TYPE ty_t_msgs. "Capturing the messages

----


  • G L O B A L C O N S T A N T S *

----


CONSTANTS:

gc_x(1) TYPE c VALUE 'X', "For checking field

gc_c(1) TYPE c VALUE 'C', "Constant value C

gc_u(1) TYPE c VALUE 'U', "Contant value U

gc_p(4) TYPE c VALUE '1000', "Constant value 1000

gc_f TYPE c VALUE 'F', "Footer indicator

gc_h TYPE c VALUE 'H', "Header indicator

gc_at(2) TYPE c VALUE '@', "@ symbol

gc_grpid TYPE apqi-groupid VALUE 'RBC_ERRORS',

gc_cbht TYPE rstable-tabname VALUE 'ZKT_CBHT',

gc_s VALUE 'S', "constant S

gc_2 VALUE '2', "constant value 2

gc_3 VALUE '3', "constant value 3

gc_y VALUE 'Y'. "constant Y

----


  • S E L E C T I O N S C R E E N *

----


  • Selection Screen data for block b.

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

PARAMETERS:

p_gjahr TYPE zkt_cbht-gjahr OBLIGATORY, "Fiscal Year

p_monat TYPE zkt_cbht-monat OBLIGATORY, "FiscalPeriod

p_fweek TYPE zkt_cbht-fweek OBLIGATORY, "Fiscal week

p_budat TYPE budat OBLIGATORY DEFAULT sy-datum,

p_bukrs TYPE t001-bukrs OBLIGATORY DEFAULT gc_p.

SELECTION-SCREEN END OF BLOCK b.

*Selection Screen data for block b1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-006.

PARAMETERS: p_dlist TYPE p10_email OBLIGATORY."Email ID/Distr List

SELECTION-SCREEN END OF BLOCK b1.

----


  • A T S E L E C T I O N S C R E E N *

----


  • Validation check for Comapny code

AT SELECTION-SCREEN ON p_bukrs.

PERFORM validate_bukrs.

----


  • S T A R T O F S E L E C T I O N *

----


INITIALIZATION.

  • Defaulting the Fiscal Year/Period/Week on the Selection-screen

PERFORM default_fiscal_data.

----


  • S T A R T O F S E L E C T I O N *

----


START-OF-SELECTION.

  • Retrieve costing data from the custom table.

PERFORM get_cbht_data.

  • Retrieve all the plants data for which the material is extended

PERFORM get_data_from_marc.

  • Run the MR21 transaction to update Std Price retrieved from ZKT_CBHT

PERFORM update_std_price.

  • Display materials which are not updated.

PERFORM display_materials.

----


  • E N D O F S E L E C T I O N *

----


END-OF-SELECTION.

  • Check for materials that failed to update

IF gt_error IS NOT INITIAL.

  • Send a mail with error information

PERFORM send_log_mail.

ENDIF.

  • Raise event for Product costing reports (R044 & R045) only

  • when E029 runs in background

IF sy-batch EQ 'X'.

PERFORM raise_event.

ENDIF.

----


  • T O P O F P A G E *

----


TOP-OF-PAGE.

  • Header for the report display using FM 'Z_SL_HEADER_FOOTER'

PERFORM header_footer USING gc_h .

----


  • E N D - O F - P A G E *

----


END-OF-PAGE.

  • Footer for the report display using FM 'Z_SL_HEADER_FOOTER'

PERFORM header_footer USING gc_f.

----


  • Form get_cbht_data *

----


  • Retrieving data from the CBHT custom table *

----


FORM get_cbht_data .

  • Populate the internal table.

SELECT matnr "Material

werks "Plant

stprs "Standard material Price

trcom "Costing version

FROM zkt_cbht

INTO TABLE gt_cbht

WHERE gjahr EQ p_gjahr AND

monat EQ p_monat AND

fweek EQ p_fweek.

  • Delete the records for which the MR21 is completed

DELETE gt_cbht WHERE trcom EQ gc_y.

  • If the table is empty

IF gt_cbht IS INITIAL .

MESSAGE s004. "No data found status message

LEAVE LIST-PROCESSING.

ENDIF.

ENDFORM. " get_cbht_data

----


  • Form get_data_from_marc *

----


  • Retrieving All the Plant data from MARC table *

----


FORM get_data_from_marc.

  • local declaration

TYPES : BEGIN OF ty_s_t001k,

bwkey TYPE t001k-bwkey,

END OF ty_s_t001k,

ty_t_t001k TYPE STANDARD TABLE OF ty_s_t001k.

DATA : lr_bwkey TYPE RANGE OF t001k-bwkey,

ls_bwkey LIKE LINE OF lr_bwkey,

lt_t001k TYPE ty_t_t001k,

ls_t001k TYPE ty_s_t001k.

CONSTANTS: lc_i VALUE 'I',

lc_eq(2) VALUE 'EQ'.

REFRESH : lt_t001k,

gt_marc.

  • Get the Unique Materials from ZKT_CBHT

IF NOT gt_cbht IS INITIAL.

gt_cbht_tmp = gt_cbht.

SORT gt_cbht_tmp BY matnr.

DELETE ADJACENT DUPLICATES FROM gt_cbht_tmp COMPARING matnr.

ENDIF.

  • select all the plants and company codes

SELECT bwkey "Valuation area

FROM t001k

INTO TABLE lt_t001k

WHERE bukrs EQ p_bukrs.

  • Populating the range table for the Plants that are retrieved

ls_bwkey-sign = lc_i.

ls_bwkey-option = lc_eq.

LOOP AT lt_t001k INTO ls_t001k.

ls_bwkey-low = ls_t001k-bwkey.

APPEND ls_bwkey TO lr_bwkey.

CLEAR: ls_bwkey-low.

ENDLOOP.

  • Select all the plant values

SELECT matnr "Material number

werks "Plant

FROM marc

INTO TABLE gt_marc

FOR ALL ENTRIES IN gt_cbht_tmp

WHERE matnr EQ gt_cbht_tmp-matnr AND

werks IN lr_bwkey.

SORT gt_marc BY matnr werks.

  • If the table is empty

IF gt_marc IS INITIAL .

MESSAGE s004. "No data found status message

LEAVE LIST-PROCESSING.

ENDIF.

ENDFORM. " get_data_from_marc

----


  • Form UPDATE_STD_PRICE *

----


  • Run the BDC recording for MR21 for updating the Std Price *

----


FORM update_std_price.

  • clear the flag value and loop the cost blending table

CLEAR: gv_bdc_open_flag.

  • Filling the BDCDATA

PERFORM prepare_bdc_tab.

  • Close the SESSION

IF gv_bdc_open_flag = gc_x.

PERFORM bdc_close_group.

ENDIF.

ENDFORM. "UPDATE_STD_PRICE

----


  • Form prepare_bdc_tab *

----


  • Prepare BDC Table for updating Copack Purchase Prices *

----


FORM prepare_bdc_tab .

  • Local variable.

DATA: lv_date(10) TYPE c,

ls_stprs TYPE ty_s_cbht,

ls_plant TYPE ty_s_plant,

lv_fnmatnr TYPE bdcdata-fnam,

lv_fnbwkey TYPE bdcdata-fnam,

lv_fnnewvalpr TYPE bdcdata-fnam,

lv_counter(2) TYPE n,

lv_num TYPE i.

CONSTANTS: lc_8 VALUE '8'.

CLEAR: lv_date.

SORT gt_cbht BY matnr.

LOOP AT gt_marc INTO gs_marc.

ls_plant = gs_marc.

AT NEW matnr.

CLEAR lv_counter.

  • Capture the date as per the user setting

WRITE p_budat TO lv_date.

  • Initial Screen of MR21 transaction

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=ENTR',

'MR21HEAD-BUDAT' lv_date,

'MR21HEAD-BUKRS' p_bukrs,

'MR21HEAD-WERKS' space.

READ TABLE gt_cbht INTO ls_stprs

WITH KEY matnr = ls_plant-matnr BINARY SEARCH.

ENDAT.

CLEAR : lv_fnmatnr,

lv_fnbwkey,

lv_fnnewvalpr.

lv_counter = lv_counter + 1.

lv_num = lv_num + 1.

CONCATENATE:

'CKI_MR21_0250-MATNR(' lv_counter ')' INTO lv_fnmatnr,

'CKI_MR21_0250-BWKEY(' lv_counter ')' INTO lv_fnbwkey,

'CKI_MR21_0250-NEWVALPR(' lv_counter ')' INTO lv_fnnewvalpr.

  • Second screen of MR21 transaction

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=ENTR',

lv_fnmatnr ls_plant-matnr,

lv_fnbwkey ls_plant-werks,

lv_fnnewvalpr ls_stprs-stprs.

IF lv_num EQ lc_8.

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=DOWN'.

CLEAR lv_num.

CLEAR lv_counter.

ENDIF.

AT END OF matnr.

PERFORM bdc_field USING: 'BDC_OKCODE' '=SAVE'.

  • Run MR21 using CALL TRANSACTION, if errors found create a SESSION

PERFORM call_transaction_mr21 USING ls_plant.

CLEAR : ls_stprs.

REFRESH gt_bdc_tab.

ENDAT.

CLEAR : gs_marc,

ls_plant.

ENDLOOP.

ENDFORM. " prepare_bdc_tab

----


  • Form call_transaction_mr21 *

----


  • Call Transaction for updating CoPack Price entries *

----


FORM call_transaction_mr21 USING p_ls_plant TYPE ty_s_plant.

  • Local Data Declaration

CONSTANTS:lc_e TYPE c VALUE 'E',

lc_mr21(4) TYPE c VALUE 'MR21',

lc_mode(1) TYPE c VALUE 'N',

lc_update(1) TYPE c VALUE 'U'.

DATA: ls_msgs TYPE ty_s_msgs.

REFRESH: gt_bdc_msg.

  • Call MR21 Transaction

CALL TRANSACTION lc_mr21

USING gt_bdc_tab

MODE lc_mode

UPDATE lc_update

MESSAGES INTO gt_bdc_msg.

  • If the Call Transaction Fails

IF sy-subrc NE 0.

IF gv_bdc_open_flag IS INITIAL.

PERFORM bdc_open_group.

gv_bdc_open_flag = gc_x.

ENDIF.

PERFORM bdc_insert_group.

DELETE gt_bdc_msg WHERE msgtyp NE lc_e.

  • get the error message

PERFORM read_error_message USING gt_bdc_msg

CHANGING gt_msgs.

  • If the message table is having error mesasges

IF gt_bdc_msg IS NOT INITIAL.

LOOP AT gt_msgs INTO ls_msgs.

gs_error-matnr = p_ls_plant-matnr.

gs_error-msg = ls_msgs-msg.

APPEND gs_error TO gt_error.

CLEAR gs_error.

ENDLOOP.

ENDIF.

REFRESH:gt_bdc_msg,

gt_bdc_tab,

gt_msgs.

ELSE.

  • Update the status as 'Y' for ZKT_CBHT-TRCOM for success records

PERFORM update_transaction_complete USING p_ls_plant.

  • Record all materials that updated Successfully with Standard Price

gs_success-matnr = p_ls_plant-matnr.

APPEND gs_success TO gt_success.

CLEAR: gs_success.

ENDIF.

CLEAR p_ls_plant.

ENDFORM. " call_transaction_mr21

----


  • Form UPDATE_TRANSACTION_COMPLETE *

----


  • -->LS_CBHT text *

----


FORM update_transaction_complete USING p_ls_plant TYPE ty_s_plant.

DATA lv_varkey TYPE rstable-varkey.

  • generate the KEY for locking the record in ZKT_CBHT

CONCATENATE sy-mandt

p_gjahr

p_monat

p_fweek

p_fweek

p_ls_plant-matnr

INTO lv_varkey.

  • Lock the ZKT_CBHT table before update

PERFORM lock_cbht_table USING lv_varkey.

  • Update the Table ZKT_CBHT using the field TRCOM.

UPDATE zkt_cbht

SET trcom = gc_y

laepr = syst-datum

uzeit = syst-uzeit

WHERE gjahr EQ p_gjahr AND

monat EQ p_monat AND

fweek EQ p_fweek AND

tvers EQ p_fweek AND

matnr EQ p_ls_plant-matnr.

  • Unlock the ZKT_CBHT table after update

PERFORM unlock_cbht_table USING lv_varkey.

ENDFORM. "UPDATE_TRANSACTION_COMPLETE

----


  • Form READ_ERROR_MESSAGE *

----


  • -->GT_BDC_MSG text *

  • -->LT_MSGS text *

----


FORM read_error_message USING lt_bdc_msg TYPE ty_t_bdcmsg

CHANGING lt_msgs TYPE ty_t_msgs.

DATA: lv_msg(500).

DATA: ls_bdcmsg TYPE ty_s_bdcmsg.

DATA: ls_errormsg TYPE ty_s_msgs.

LOOP AT lt_bdc_msg INTO ls_bdcmsg.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = ls_bdcmsg-msgid

lang = 'E'

no = ls_bdcmsg-msgnr

v1 = ls_bdcmsg-msgv1

v2 = ls_bdcmsg-msgv2

v3 = ls_bdcmsg-msgv3

v4 = ls_bdcmsg-msgv4

IMPORTING

msg = lv_msg

EXCEPTIONS

not_found = 0

OTHERS = 0.

ls_errormsg-msg = lv_msg.

APPEND ls_errormsg TO lt_msgs.

CLEAR ls_errormsg-msg.

ENDLOOP.

ENDFORM. "READ_ERROR_MESSAGE

----


  • Form default_fiscal_data *

----


  • Fetch Fiscal Year, Fiscal Period, Fiscal Week. *

----


FORM default_fiscal_data .

CALL FUNCTION 'Z_GET_FISCAL_WEEK_FROM_DATE'

EXPORTING

i_datum = sy-datum

i_bukrs = p_bukrs

IMPORTING

e_fisc_period = p_monat

e_fisc_year = p_gjahr

e_week_num = p_fweek

EXCEPTIONS

error_period = 1

error_period_version = 2

error_special_period = 3

error_version = 4

error_fiscal_year = 5

error_posting_period = 6

error_posting_date = 7

invalid_company = 8

OTHERS = 9.

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. "Default_fiscal_data

----


  • Form send_log_mail *

----


  • Sending the Error log as mail *

----


FORM send_log_mail .

  • Local Constants

CONSTANTS: lc_raw(3) TYPE c VALUE 'RAW'. "Docuement Type

  • Creating the document to be sent with error message.

IF gt_error IS NOT INITIAL.

gs_doc_chng-obj_name = 'Error Price'(002).

gs_doc_chng-obj_descr =

'Material Standard Price Updation Errors'(003).

  • Mail Content

gs_objtxt = text-009.

APPEND gs_objtxt TO gt_objtxt.

gs_objtxt = text-020.

APPEND gs_objtxt TO gt_objtxt.

CLEAR gs_objtxt.

APPEND gs_objtxt TO gt_objtxt.

  • Error message Heading

CONCATENATE text-022 "Material

text-024 "Error Message

INTO gs_objtxt.

APPEND gs_objtxt TO gt_objtxt.

gs_objtxt = text-021. "under line in mail

APPEND gs_objtxt TO gt_objtxt.

LOOP AT gt_error INTO gs_error.

  • Remove leading zero's for Material

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = gs_error-matnr

IMPORTING

output = gs_error-matnr.

  • Genearte the error text

gs_objtxt = gs_error-matnr.

gs_objtxt+27 = gs_error-msg.

APPEND gs_objtxt TO gt_objtxt.

ENDLOOP.

ENDIF.

  • Add the Content to the E-mail

DESCRIBE TABLE gt_objtxt LINES gv_tab_lines.

READ TABLE gt_objtxt INTO gs_objtxt INDEX gv_tab_lines.

gs_doc_chng-doc_size =

( gv_tab_lines - 1 ) * 255 + STRLEN( gs_objtxt ).

  • Check for Internet Address or Distribution List

IF p_dlist IS NOT INITIAL.

SEARCH p_dlist FOR gc_at.

IF sy-subrc EQ 0.

gs_reclist-rec_type = gc_u.

ELSE.

gs_reclist-rec_type = gc_c.

ENDIF.

gs_reclist-receiver = p_dlist.

APPEND gs_reclist TO gt_reclist.

ENDIF.

  • Call the function module to send the mail

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'

EXPORTING

document_type = lc_raw

document_data = gs_doc_chng

put_in_outbox = gc_x

commit_work = gc_x

TABLES

object_header = gt_objhead

object_content = gt_objtxt

receivers = gt_reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

OTHERS = 99.

CASE sy-subrc.

WHEN 0.

SKIP.

FORMAT COLOR 3 ON.

WRITE:/ 'Mail has been sent successfully to below mentioned IDs:->'(005)

.

FORMAT COLOR 3 OFF.

WRITE:/ p_dlist.

WRITE:/ sy-uname.

WHEN 1.

WRITE: / 'Too many receivers specified !'(017).

WHEN 2.

WRITE: / 'No receiver got the document !'(018).

WHEN 4.

WRITE: / 'Missing send authority !'(016).

WHEN OTHERS.

WRITE: / 'Unexpected error occurred !'(019).

ENDCASE.

ENDFORM. " send_log_mail

----


  • Form display_materials *

----


  • Display all the Materials which failed to update the Standard Price *

----


FORM display_materials .

IF NOT gt_error IS INITIAL.

  • Update Failure message.

SKIP 2.

FORMAT COLOR 3 ON.

WRITE:/ text-009,

/ text-020. "Material Std.Price update failure message

FORMAT COLOR 3 OFF.

FORMAT COLOR COL_NEGATIVE ON.

  • Read all the materials that failed to update

LOOP AT gt_error INTO gs_error.

WRITE:/ gs_error-matnr,

28 gs_error-msg.

ENDLOOP.

FORMAT COLOR COL_NEGATIVE OFF.

SKIP 2.

ENDIF.

IF NOT gt_success IS INITIAL.

  • Mesage to define the updation is Successful.

FORMAT COLOR 3 ON.

WRITE:/ text-011, 97 p_bukrs."Material Std.Price update Success msg

FORMAT COLOR 3 OFF.

FORMAT COLOR COL_POSITIVE ON.

  • Read all the materials which updated Successfully

LOOP AT gt_success INTO gs_success.

WRITE:/ gs_success-matnr.

ENDLOOP.

FORMAT COLOR COL_POSITIVE OFF.

ENDIF.

ENDFORM. " display_materials

----


  • Form header_footer *

----


  • To write a header and a footer to the report layout *

----


  • -->P_GC_HF Header and Footer Indicator 'H' or 'F' *

----


FORM header_footer USING p_gc_hf TYPE sywtitl.

  • Custom Function module for the Header/Footer display for report

CALL FUNCTION 'Z_SL_HEADER_FOOTER'

EXPORTING

rpt_id = sy-cprog

rpt_txt_typ = p_gc_hf

rpt_width = sy-linsz

EXCEPTIONS

err_invalid_parameters = 1

OTHERS = 2.

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. " header_footer

----


  • FORM bdc_dynpro *

----


  • Generate BDCDATA *

----


FORM bdc_dynpro USING program TYPE bdcdata-program

dynpro TYPE bdcdata-dynpro .

CLEAR: gs_bdc_tab.

gs_bdc_tab-program = program.

gs_bdc_tab-dynpro = dynpro.

gs_bdc_tab-dynbegin = gc_x.

APPEND gs_bdc_tab TO gt_bdc_tab.

ENDFORM. "bdc_dynpro

----


  • FORM bdc_field *

----


  • Populate data to the Screen fields *

----


FORM bdc_field USING fnam TYPE bdcdata-fnam

fval TYPE any.

  • Clear the local structure.

CLEAR: gs_bdc_tab.

WRITE fval TO gs_bdc_tab-fval LEFT-JUSTIFIED.

gs_bdc_tab-fnam = fnam.

APPEND gs_bdc_tab TO gt_bdc_tab.

ENDFORM. "bdc_field

----


  • Form bdc_open_group *

----


  • Subroutine for Open BDC Group *

----


FORM bdc_open_group .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = gc_grpid

user = sy-uname

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.

WRITE 😕 text-013. "Error in BDC_OPEN_GROUP

EXIT.

ENDIF.

ENDFORM. " bdc_open_group

----


  • Form BDC_INSERT_GROUP *

----


  • Subroutine for calling BDC_INSERT for inserting BDC Table *

----


FORM bdc_insert_group .

DATA lc_mr21 TYPE tstc-tcode VALUE 'MR21'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = lc_mr21

TABLES

dynprotab = gt_bdc_tab

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.

WRITE 😕 text-014. "Error in BDC_INSERT

EXIT.

ENDIF.

ENDFORM. " BDC_INSERT_GROUP

----


  • Form BDC_CLOSE_GROUP *

----


  • Subroutine for Closeing of BDC group *

----


FORM bdc_close_group .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

not_open = 1

queue_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

WRITE 😕 text-015. "Error in BDC_CLOSE_GROUP.

EXIT.

ENDIF.

ENDFORM. " BDC_CLOSE_GROUP

----


  • Form validate_bukrs *

----


  • Validation for Company code *

----


FORM validate_bukrs .

  • Local declarations

DATA: lv_bukrs TYPE bukrs.

CLEAR lv_bukrs.

  • Check if the specified Company code exists or not

IF p_bukrs IS NOT INITIAL.

SELECT SINGLE bukrs "Comapny code

FROM t001

INTO lv_bukrs

WHERE bukrs EQ p_bukrs.

IF lv_bukrs IS INITIAL.

  • Enter a valid Company code

MESSAGE e117(zmm). "Invalid Company code

ENDIF.

ENDIF.

ENDFORM. " validate_bukrs

----


  • Form lock_cbht_table *

----


  • Lock the table 'ZKT_CBHT' while updating *

----


FORM lock_cbht_table USING p_varkey TYPE rstable-varkey.

CALL FUNCTION 'ENQUEUE_E_TABLES'

EXPORTING

mode_rstable = gc_s

tabname = gc_cbht

varkey = p_varkey

scope = gc2.

ENDFORM. "lock_cbht_table

----


  • Form unlock_cbht_table *

----


  • Unlock the table 'ZKT_CBHT' after updating *

----


FORM unlock_cbht_table USING p_varkey TYPE rstable-varkey.

CALL FUNCTION 'DEQUEUE_E_TABLES'

EXPORTING

mode_rstable = gc_s

tabname = gc_cbht

varkey = p_varkey

scope = gc3.

ENDFORM. "unlock_history_table

&----


*& Form raise_event

&----


  • text

----


FORM raise_event.

CONSTANTS:

lc_event_id TYPE btceventid VALUE 'ZCO_PC_REPORTS'.

DATA:

lv_msgtxt TYPE bapi_msg.

  • Raise the Event for Cost Blending

CALL FUNCTION 'BP_EVENT_RAISE'

EXPORTING

eventid = lc_event_id

EXCEPTIONS

bad_eventid = 1

eventid_does_not_exist = 2

eventid_missing = 3

raise_failed = 4

OTHERS = 5.

IF sy-subrc <> 0.

MESSAGE e067(1m) WITH lc_event_id INTO lv_msgtxt.

  • Event &1 not triggered

ELSE.

MESSAGE s066(1m) WITH lc_event_id INTO lv_msgtxt.

  • Event &1 triggered

ENDIF.

FORMAT COLOR COL_POSITIVE ON.

WRITE: / lv_msgtxt.

FORMAT COLOR COL_POSITIVE OFF.

  • End of spool report

WRITE:/ sy-uline(132).

ENDFORM. " raise_event