‎2007 Aug 27 9:31 AM
Hi
how do we handle table controls in bdc?
i have tried it many times, but never could i give a satisfactory answer.
how do we handle views in bdc especially in mm01/02/03 transactions..
kindly explain me..
thanks in advance
‎2007 Aug 27 9:47 AM
hi check this code below,
REPORT Z_BOM_BDC.
----
DATA DECLARATIONS *
----
*INCLUDE bdcrecx1.
TYPES: BEGIN OF TY_FLAT, " structure for flat file
STRING(200),
END OF TY_FLAT.
TYPES: BEGIN OF TY_HEAD, " structure for header file
IND(2) TYPE N,
MATNR(18),
WERKS(4),
STLAN(1),
END OF TY_HEAD.
TYPES :BEGIN OF TY_ITEM, "structure for item file
IND(2) TYPE N,
POSTP(1),
IDNRK(18),
MENGE(13),
END OF TY_ITEM.
TYPES :BEGIN OF TY_FLAT1, " structure for final file
MATNR(18),
WERKS(4),
STLAN(1),
POSTP(1),
IDNRK(18),
MENGE(13),
END OF TY_FLAT1.
----
INTERNAL TABLE DECLARATIONS *
----
DATA : T_FLAT TYPE STANDARD TABLE OF TY_FLAT,
T_FLAT1 TYPE STANDARD TABLE OF TY_FLAT1,
T_HEAD TYPE STANDARD TABLE OF TY_HEAD,
T_ITEM TYPE STANDARD TABLE OF TY_ITEM,
T_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
T_BDCMSG TYPE STANDARD TABLE OF BDCMSGCOLL.
----
WORK AREA DECLARATIONS *
----
DATA : ST_FLAT TYPE TY_FLAT,
ST_FLAT1 TYPE TY_FLAT1,
ST_HEAD TYPE TY_HEAD,
ST_ITEM TYPE TY_ITEM,
ST_BDCDATA TYPE BDCDATA,
ST_BDCMSG TYPE BDCMSGCOLL.
----
VARIABLES *
----
DATA : FNAM TYPE LOCALFILE, "rlgrap-filename,
FTYP TYPE RLGRAP-FILETYPE,
LF_FNAM TYPE STRING.
----
VARIABLES *
----
DATA : V_IND(2) TYPE N, " value 1,
V_FLD(20),
V_NO(2) TYPE N.
----
SELECTION SCREEN *
----
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. "selection screen
PARAMETERS : P_FNAM LIKE FNAM.
SELECTION-SCREEN : END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAM.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FNAM.
CALL FUNCTION 'WS_UPLOAD' " uploading flat file
EXPORTING
FILENAME = P_FNAM
FILETYPE = 'ASC'
TABLES
DATA_TAB = T_FLAT.
IF SY-SUBRC NE 0.
WRITE : /1 'no flat file to upload into internal table t_flat'.
LEAVE TO LIST-PROCESSING.
ENDIF.
START-OF-SELECTION.
splitting the flat file data into header table and item table
LOOP AT T_FLAT INTO ST_FLAT.
ADD 1 TO v_ind.
**SPLIT ST_FLAT AT '|' INTO ST_FLAT1-SPEC_NO ST_FLAT1-ASTYP
**ST_FLAT1-TXZ01 ST_FLAT1-SORT1
**ST_FLAT1-WAERS ST_FLAT1-MATKL
**ST_FLAT1-EKORG ST_FLAT1-SRVPOS
**ST_FLAT1-MENGE.
**
SPLIT ST_FLAT AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
INTO ST_FLAT1-MATNR ST_FLAT1-WERKS
ST_FLAT1-STLAN ST_FLAT1-POSTP
ST_FLAT1-IDNRK ST_FLAT1-MENGE.
APPEND ST_FLAT1 TO T_FLAT1.
CLEAR ST_FLAT1.
ENDLOOP.
SORT T_FLAT1 BY MATNR WERKS STLAN POSTP IDNRK MENGE.
LOOP AT T_FLAT1 INTO ST_FLAT1.
MOVE :
ST_FLAT1-MATNR TO ST_HEAD-MATNR,
ST_FLAT1-WERKS TO ST_HEAD-WERKS,
ST_FLAT1-STLAN TO ST_HEAD-STLAN,
ST_FLAT1-SORT1 TO ST_HEAD-SORT1,
ST_FLAT1-WAERS TO ST_HEAD-WAERS,
ST_FLAT1-MATKL TO ST_HEAD-MATKL,
ST_FLAT1-EKORG TO ST_HEAD-EKORG,
ST_FLAT1-POSTP TO ST_ITEM-POSTP,
ST_FLAT1-IDNRK TO ST_ITEM-IDNRK,
ST_FLAT1-MENGE TO ST_ITEM-MENGE.
AT new STLAN.
AT end of EKORG.
ADD 1 TO V_IND.
ENDAT.
MOVE V_IND TO ST_HEAD-IND.
MOVE V_IND TO ST_ITEM-IND.
APPEND ST_HEAD TO T_HEAD.
APPEND ST_ITEM TO T_ITEM.
CLEAR ST_HEAD.
CLEAR ST_ITEM.
*CLEAR v_ind.
ENDLOOP.
CLEAR V_IND.
*perform open_group.
SORT T_ITEM BY IND.
SORT T_HEAD BY IND.
DELETE ADJACENT DUPLICATES FROM T_HEAD.
LOOP AT T_HEAD INTO ST_HEAD.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29N-STLAN'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RC29N-MATNR'
ST_HEAD-MATNR.
PERFORM BDC_FIELD USING 'RC29N-WERKS'
ST_HEAD-WERKS.
PERFORM BDC_FIELD USING 'RC29N-STLAN'
ST_HEAD-STLAN.
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
*
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-MENGE(01)'.
*
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SRV'.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-TXZ01'
ST_HEAD-TXZ01.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-SORT1'
ST_HEAD-SORT1.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-WAERS'
ST_HEAD-WAERS.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-MATKL'
ST_HEAD-MATKL.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-EKORG'
ST_HEAD-EKORG.
LOOP AT T_ITEM INTO ST_ITEM WHERE IND = ST_HEAD-IND.
ADD 1 TO V_NO.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-MENGE(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCUH'.
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMLSP'.
*
*PERFORM BDC_DYNPRO USING 'SAPLMLSP' '0201'.
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BZE'.
*
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'ESLL-MENGE(01)'.
CONCATENATE 'RC29P-IDNRK(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-IDNRK.
CONCATENATE 'RC29P-MENGE(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-MENGE.
CONCATENATE 'RC29P-POSTP(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-POSTP.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
*perform bdc_field using 'ESLL-SRVPOS(01)'
ITAB_PROGRAM-SRVPOS.
*
*
*perform bdc_field using 'ESLL-MENGE(01)'
ITAB_PROGRAM-MENGE.
**PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
**PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-IDNRK(02)'.
**PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCBU'.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
**
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
V_NO = 1.
ENDLOOP.
CLEAR V_NO.
*
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-IDNRK'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCBU'.
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SAV'.
*
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMLSP'.
CALL TRANSACTION 'CS01' USING T_BDCDATA MODE 'A'
UPDATE 'A' MESSAGES INTO T_BDCMSG.
refresh t_bdcdata.
clear t_bdcdata.
*
ENDLOOP.
PERFORM FR_FORMAT_MESSAGE.
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR ST_BDCDATA.
ST_BDCDATA-PROGRAM = PROGRAM.
ST_BDCDATA-DYNPRO = DYNPRO.
ST_BDCDATA-DYNBEGIN = 'X'.
APPEND ST_BDCDATA TO T_BDCDATA.
ENDFORM.
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE. "NODATA.
CLEAR ST_BDCDATA.
ST_BDCDATA-FNAM = FNAM.
ST_BDCDATA-FVAL = FVAL.
APPEND ST_BDCDATA TO T_BDCDATA.
ENDIF.
ENDFORM.
&----
*& Form fr_format_message
&----
text
----
--> p1 text
<-- p2 text
----
FORM FR_FORMAT_MESSAGE.
DATA : MESSAGE TYPE STRING.
WRITE : /1 'ID',
5 'No',
10 'Type',
20 'Message Info',
55 'Row No'.
LOOP AT T_BDCMSG INTO ST_BDCMSG.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = ST_BDCMSG-MSGID
LANG = SY-LANGU
NO = ST_BDCMSG-MSGNR
V1 = ST_BDCMSG-MSGV1
V2 = ST_BDCMSG-MSGV2
V3 = ST_BDCMSG-MSGV3
V4 = ST_BDCMSG-MSGV4
IMPORTING
MSG = MESSAGE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC EQ 0.
WRITE : /1 ST_BDCMSG-MSGID,
5 ST_BDCMSG-MSGNR,
10 ST_BDCMSG-MSGTYP,
20 MESSAGE.
ENDIF.
IF SY-SUBRC NE 0.
WRITE : /55 SY-TABIX.
ENDIF.
ENDLOOP.
ENDFORM. " fr_format_message
text file
000000000000000147 JL01 1 L 144 1.40
000000000000000147 JL01 1 L 145 1.40
000000000000000147 JL01 1 L 143 1.40
‎2007 Aug 27 9:36 AM
‎2007 Aug 27 9:36 AM
hi,
In BDc we are using table control insert large volume of data.A TC consist of Thousands of rows. Each row contains many data of a particular customer or vendor.In bdc we write a program to insert one row of data. Then we execute that program in a loop so that all the row will be inserted rowwise.
So the table control data will be uploaded to internal table. From their we can insert it into table executing program through a loop.
For example if we will insert all sales order generated by a customer , we can upload those rows of data to TC using loop.
Flat file....> Internal Table........> Table Control .....> DB tables
After recording using SHDB tcode, you have to save the generated code.
Select the recording name & click on Program to generate it.
Provide program name & check "Transfer from Recording" field contents.
Create a flat file with tab delimiters or Excel file with fields you have to enter into tablecontrol.
Field space must be as in the SAP table & provide the values for it.
If QTY & CURRENCY fields are there then change those fields to text in Excel file.
Save it as xls file & then Save As txt file.
While executing the program, select txt file for Uploading the Datas into Tablecontrol.
Ex:- ME51 transaction
REPORT ZK_ME51_01_NEW NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE BDCRECX1.
DATA: BEGIN OF ITAB OCCURS 0,
NUMBER(3),
MATNR LIKE EBAN-MATNR,
TXZ01 LIKE EBAN-TXZ01,
MENGE(13) TYPE C,
WERKS LIKE EBAN-WERKS,
LGORT(4),
END OF ITAB.
DATA: TABCT(2) TYPE C, "LINES IN FLAT FILE
CTL TYPE I, "
CTL1 TYPE C,
CTL2(3),
FINAL(3) TYPE C VALUE '0', " LAST VALUE IN FLAT FILE
PG(5) TYPE C VALUE '10', " FOR INCREMENTING THE PAGES
TEMPVAL(20) TYPE C.
START-OF-SELECTION.
PERFORM GETDATA.
PERFORM OPEN_GROUP.
SORT ITAB BY NUMBER.
LOOP AT ITAB.
IF ITAB-NUMBER NE FINAL.
PERFORM BDC_DYNPRO USING 'SAPMM06B' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EBAN-BSART'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EBAN-BSART'
'NB'.
PERFORM BDC_FIELD USING 'RM06B-LPEIN'
'T'.
MOVE 0 TO CTL1.
MOVE 0 TO CTL.
LOOP AT ITAB WHERE NUMBER = ITAB-NUMBER.
CTL = CTL + 1.
CTL2 = CTL.
IF CTL2 >= 10.
CTL1 = ''.
ENDIF.
IF CTL >= 19.
CTL2 = '19'.
ENDIF.
IF CTL2 >= 19.
PG = PG + 10.
ENDIF.
PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.
PERFORM BDC_FIELD USING 'RM06B-BNFPO'
PG.
CONCATENATE 'eban-lgort(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL ITAB-LGORT.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
CONCATENATE 'eban-matnr(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL ITAB-MATNR.
CONCATENATE 'eban-menge(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL ITAB-MENGE.
CONCATENATE 'eban-meins(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL 'EA'.
CONCATENATE 'rm06b-eeind(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL '27.07.2007'.
CONCATENATE 'eban-ekgrp(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL '000'.
CONCATENATE 'eban-matkl(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL '001'.
CONCATENATE 'eban-werks(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL ITAB-WERKS.
CONCATENATE 'eban-lgort(' CTL1 CTL2 ')' INTO TEMPVAL.
CONDENSE TEMPVAL NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAL ITAB-LGORT.
PERFORM BDC_DYNPRO USING 'SAPMM06B' '0102'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EBAN-MENGE'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EBAN-TXZ01'
ITAB-TXZ01." 'Lubricating oil'.
PERFORM BDC_FIELD USING 'EBAN-LGORT'
ITAB-LGORT. " '0001'.
PERFORM BDC_FIELD USING 'EBAN-MENGE'
ITAB-MENGE. " '200'.
PERFORM BDC_FIELD USING 'RM06B-EEIND'
'30.07.2007'.
PERFORM BDC_FIELD USING 'RM06B-LPEIN'
'D'.
PERFORM BDC_FIELD USING 'EBAN-EKGRP'
'003'.
PERFORM BDC_FIELD USING 'EBAN-BADAT'
'30.08.2007'.
PERFORM BDC_FIELD USING 'EBAN-DISPO'
'001'.
PERFORM BDC_FIELD USING 'EBAN-FRGDT'
'19.07.2007'.
PERFORM BDC_FIELD USING 'EBAN-WEBAZ'
'1'.
PERFORM BDC_FIELD USING 'EBAN-PREIS'
' 1.46'.
PERFORM BDC_FIELD USING 'EBAN-WAERS'
'USD'.
PERFORM BDC_FIELD USING 'EBAN-PEINH'
'1'.
PERFORM BDC_FIELD USING 'EBAN-REPOS'
'X'.
FINAL = ITAB-NUMBER.
PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06B-BNFPO'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_TRANSACTION USING 'ME51'.
REFRESH BDCDATA.
ENDIF.
ENDLOOP.
PERFORM CLOSE_GROUP.
&----
*& Form GETDATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM GETDATA .
CALL FUNCTION 'UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = ' '
FILETYPE = ' '
TABLES
DATA_TAB = ITAB
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 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.
ENDFORM. " GETDATA
rewards if useful
regards,
'Nazeer'
‎2007 Aug 27 9:38 AM
First, you must have a perfect control of the contents the TC will show. I mean, if you are trying to control an unknown amount of lines or you don't know the order of them, you will have no control over the TC, nor any chance to do anything good with it.
It means you will have a very good knowledge of the transaction you will call, and (very important) know the possible variances of it (user preferences and so).
Once you've managed to get all that information, just click the needed buttons in your recording to catch the ok_codes of the forward-backward-start-end buttons, and all the previous work is done.
Then the tedious one starts. You must use the bdc insert calls using 'TABLE_CONTROL[row_number]' when assigning/changing values there.
Good luck with it, will be as easy as sitting in a volcano, but as dangerous too. Try to find another way to do it, like a BAPI or another standard function...
‎2007 Aug 27 9:47 AM
hi check this code below,
REPORT Z_BOM_BDC.
----
DATA DECLARATIONS *
----
*INCLUDE bdcrecx1.
TYPES: BEGIN OF TY_FLAT, " structure for flat file
STRING(200),
END OF TY_FLAT.
TYPES: BEGIN OF TY_HEAD, " structure for header file
IND(2) TYPE N,
MATNR(18),
WERKS(4),
STLAN(1),
END OF TY_HEAD.
TYPES :BEGIN OF TY_ITEM, "structure for item file
IND(2) TYPE N,
POSTP(1),
IDNRK(18),
MENGE(13),
END OF TY_ITEM.
TYPES :BEGIN OF TY_FLAT1, " structure for final file
MATNR(18),
WERKS(4),
STLAN(1),
POSTP(1),
IDNRK(18),
MENGE(13),
END OF TY_FLAT1.
----
INTERNAL TABLE DECLARATIONS *
----
DATA : T_FLAT TYPE STANDARD TABLE OF TY_FLAT,
T_FLAT1 TYPE STANDARD TABLE OF TY_FLAT1,
T_HEAD TYPE STANDARD TABLE OF TY_HEAD,
T_ITEM TYPE STANDARD TABLE OF TY_ITEM,
T_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
T_BDCMSG TYPE STANDARD TABLE OF BDCMSGCOLL.
----
WORK AREA DECLARATIONS *
----
DATA : ST_FLAT TYPE TY_FLAT,
ST_FLAT1 TYPE TY_FLAT1,
ST_HEAD TYPE TY_HEAD,
ST_ITEM TYPE TY_ITEM,
ST_BDCDATA TYPE BDCDATA,
ST_BDCMSG TYPE BDCMSGCOLL.
----
VARIABLES *
----
DATA : FNAM TYPE LOCALFILE, "rlgrap-filename,
FTYP TYPE RLGRAP-FILETYPE,
LF_FNAM TYPE STRING.
----
VARIABLES *
----
DATA : V_IND(2) TYPE N, " value 1,
V_FLD(20),
V_NO(2) TYPE N.
----
SELECTION SCREEN *
----
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. "selection screen
PARAMETERS : P_FNAM LIKE FNAM.
SELECTION-SCREEN : END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAM.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FNAM.
CALL FUNCTION 'WS_UPLOAD' " uploading flat file
EXPORTING
FILENAME = P_FNAM
FILETYPE = 'ASC'
TABLES
DATA_TAB = T_FLAT.
IF SY-SUBRC NE 0.
WRITE : /1 'no flat file to upload into internal table t_flat'.
LEAVE TO LIST-PROCESSING.
ENDIF.
START-OF-SELECTION.
splitting the flat file data into header table and item table
LOOP AT T_FLAT INTO ST_FLAT.
ADD 1 TO v_ind.
**SPLIT ST_FLAT AT '|' INTO ST_FLAT1-SPEC_NO ST_FLAT1-ASTYP
**ST_FLAT1-TXZ01 ST_FLAT1-SORT1
**ST_FLAT1-WAERS ST_FLAT1-MATKL
**ST_FLAT1-EKORG ST_FLAT1-SRVPOS
**ST_FLAT1-MENGE.
**
SPLIT ST_FLAT AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
INTO ST_FLAT1-MATNR ST_FLAT1-WERKS
ST_FLAT1-STLAN ST_FLAT1-POSTP
ST_FLAT1-IDNRK ST_FLAT1-MENGE.
APPEND ST_FLAT1 TO T_FLAT1.
CLEAR ST_FLAT1.
ENDLOOP.
SORT T_FLAT1 BY MATNR WERKS STLAN POSTP IDNRK MENGE.
LOOP AT T_FLAT1 INTO ST_FLAT1.
MOVE :
ST_FLAT1-MATNR TO ST_HEAD-MATNR,
ST_FLAT1-WERKS TO ST_HEAD-WERKS,
ST_FLAT1-STLAN TO ST_HEAD-STLAN,
ST_FLAT1-SORT1 TO ST_HEAD-SORT1,
ST_FLAT1-WAERS TO ST_HEAD-WAERS,
ST_FLAT1-MATKL TO ST_HEAD-MATKL,
ST_FLAT1-EKORG TO ST_HEAD-EKORG,
ST_FLAT1-POSTP TO ST_ITEM-POSTP,
ST_FLAT1-IDNRK TO ST_ITEM-IDNRK,
ST_FLAT1-MENGE TO ST_ITEM-MENGE.
AT new STLAN.
AT end of EKORG.
ADD 1 TO V_IND.
ENDAT.
MOVE V_IND TO ST_HEAD-IND.
MOVE V_IND TO ST_ITEM-IND.
APPEND ST_HEAD TO T_HEAD.
APPEND ST_ITEM TO T_ITEM.
CLEAR ST_HEAD.
CLEAR ST_ITEM.
*CLEAR v_ind.
ENDLOOP.
CLEAR V_IND.
*perform open_group.
SORT T_ITEM BY IND.
SORT T_HEAD BY IND.
DELETE ADJACENT DUPLICATES FROM T_HEAD.
LOOP AT T_HEAD INTO ST_HEAD.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29N-STLAN'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RC29N-MATNR'
ST_HEAD-MATNR.
PERFORM BDC_FIELD USING 'RC29N-WERKS'
ST_HEAD-WERKS.
PERFORM BDC_FIELD USING 'RC29N-STLAN'
ST_HEAD-STLAN.
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
*
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-MENGE(01)'.
*
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SRV'.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-TXZ01'
ST_HEAD-TXZ01.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-SORT1'
ST_HEAD-SORT1.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-WAERS'
ST_HEAD-WAERS.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-MATKL'
ST_HEAD-MATKL.
*
*PERFORM BDC_FIELD USING 'TMP_SPEC-EKORG'
ST_HEAD-EKORG.
LOOP AT T_ITEM INTO ST_ITEM WHERE IND = ST_HEAD-IND.
ADD 1 TO V_NO.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-MENGE(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCUH'.
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMLSP'.
*
*PERFORM BDC_DYNPRO USING 'SAPLMLSP' '0201'.
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BZE'.
*
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'ESLL-MENGE(01)'.
CONCATENATE 'RC29P-IDNRK(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-IDNRK.
CONCATENATE 'RC29P-MENGE(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-MENGE.
CONCATENATE 'RC29P-POSTP(' V_NO ')' INTO V_FLD.
CONDENSE V_FLD.
PERFORM BDC_FIELD USING V_FLD
ST_ITEM-POSTP.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
*perform bdc_field using 'ESLL-SRVPOS(01)'
ITAB_PROGRAM-SRVPOS.
*
*
*perform bdc_field using 'ESLL-MENGE(01)'
ITAB_PROGRAM-MENGE.
**PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
**PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-IDNRK(02)'.
**PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCBU'.
PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
**
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
V_NO = 1.
ENDLOOP.
CLEAR V_NO.
*
*PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0140'.
*PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC29P-IDNRK'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FCBU'.
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLCSDI'.
*PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SAV'.
*
*PERFORM BDC_FIELD USING 'BDC_SUBSCR'
'SAPLMLSP'.
CALL TRANSACTION 'CS01' USING T_BDCDATA MODE 'A'
UPDATE 'A' MESSAGES INTO T_BDCMSG.
refresh t_bdcdata.
clear t_bdcdata.
*
ENDLOOP.
PERFORM FR_FORMAT_MESSAGE.
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR ST_BDCDATA.
ST_BDCDATA-PROGRAM = PROGRAM.
ST_BDCDATA-DYNPRO = DYNPRO.
ST_BDCDATA-DYNBEGIN = 'X'.
APPEND ST_BDCDATA TO T_BDCDATA.
ENDFORM.
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE. "NODATA.
CLEAR ST_BDCDATA.
ST_BDCDATA-FNAM = FNAM.
ST_BDCDATA-FVAL = FVAL.
APPEND ST_BDCDATA TO T_BDCDATA.
ENDIF.
ENDFORM.
&----
*& Form fr_format_message
&----
text
----
--> p1 text
<-- p2 text
----
FORM FR_FORMAT_MESSAGE.
DATA : MESSAGE TYPE STRING.
WRITE : /1 'ID',
5 'No',
10 'Type',
20 'Message Info',
55 'Row No'.
LOOP AT T_BDCMSG INTO ST_BDCMSG.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = ST_BDCMSG-MSGID
LANG = SY-LANGU
NO = ST_BDCMSG-MSGNR
V1 = ST_BDCMSG-MSGV1
V2 = ST_BDCMSG-MSGV2
V3 = ST_BDCMSG-MSGV3
V4 = ST_BDCMSG-MSGV4
IMPORTING
MSG = MESSAGE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC EQ 0.
WRITE : /1 ST_BDCMSG-MSGID,
5 ST_BDCMSG-MSGNR,
10 ST_BDCMSG-MSGTYP,
20 MESSAGE.
ENDIF.
IF SY-SUBRC NE 0.
WRITE : /55 SY-TABIX.
ENDIF.
ENDLOOP.
ENDFORM. " fr_format_message
text file
000000000000000147 JL01 1 L 144 1.40
000000000000000147 JL01 1 L 145 1.40
000000000000000147 JL01 1 L 143 1.40