‎2007 Jun 13 4:55 AM
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
‎2007 Jun 13 4:57 AM
Hi,
Check the sample program in the following link
http://sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm
Thanks
Naren
‎2007 Jun 13 5:09 AM
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.
‎2007 Jun 14 1:14 PM
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.
‎2007 Jun 13 5:03 AM
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
‎2007 Jun 14 1:37 PM
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
‎2007 Jun 14 4:03 PM
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