2007 Mar 14 4:08 AM
Dear All,
This below program will generate a list of PR with a check-box beside it. User can select the PRs and then click on the Create PO/Create RFQ button. The contents in the PR will be transferred to the PO/RFQ. The user will check the contents and if any changes he wud modify and then click on the save button. The user needs only ME21N transaction. Since bapi wud automatically generate the PO in the backgroung processing, i am using BDC- foreground processing so that the user can save manually. This works for a single line item in the PO. but if there are multiple line items it's not working. Kindly help me on this.
Regards,
Karthik
REPORT ZMY20PR
MESSAGE-ID ZD
LINE-SIZE 170
LINE-COUNT 65
NO STANDARD PAGE HEADING.
----
TABLES *
----
TABLES: PLAF,
EBAN, "Purchase Requisition
EKKO, "Purchasing Document Header
EKPO, "Purchasing Document Item
EKET, "Scheduling Agreement Schedule Lines
T001W,
RM06E,
LFA1,
MARA,
MARC,
MARD,
MAKT,
KSSK, "Allocation Table: Object to Class
KLAH, "Class Header Data
KSML, "Characteristics of a Class
CABN, "Characteristic
AUSP. "Characteristic Values
----
INTERNAL TABLES AND VARIABLES DECLARATION *
----
DATA : BEGIN OF MATLIST OCCURS 0,
BANFN LIKE EBAN-BANFN,
BNFPO LIKE EBAN-BNFPO,
LIFNR LIKE EINA-LIFNR,
DSDAT LIKE MDKP-DSDAT,
MENGE LIKE EBAN-MENGE,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
ATWRT LIKE AUSP-ATWRT,
AFNAM LIKE EBAN-AFNAM,
TXZ01 LIKE EBAN-TXZ01,
LGORT LIKE EBAN-LGORT,
ERNAM LIKE EBAN-ERNAM,
MEINS LIKE MARA-MEINS,
NAME1 LIKE LFA1-NAME1,
EBELN LIKE EBAN-EBELN,
ANFNR LIKE EKPO-ANFNR,
EBELN1 LIKE EKET-EBELN,
MARKS(1) TYPE C,
END OF MATLIST.
DATA: BEGIN OF CONVMAT OCCURS 0.
INCLUDE STRUCTURE MATLIST.
DATA END OF CONVMAT.
DATA : BEGIN OF MAT OCCURS 0,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
DISPO LIKE MARC-DISPO,
CLASS LIKE KLAH-CLASS,
ATWRT LIKE AUSP-ATWRT,
MEINS LIKE MARA-MEINS,
LGFSB LIKE MARC-LGFSB,
DISMM LIKE MARC-DISMM,
DISLS LIKE MARC-DISLS,
MINBE LIKE MARC-MINBE,
MABST LIKE MARC-MABST,
BSTFE LIKE MARC-BSTFE,
LABST LIKE MARD-LABST,
END OF MAT.
DATA X_FLAG(1) VALUE 'X'.
DATA: PF3_FLAG, X_SET_FLAG, X_X_FLAG,
COMPLETE_KEY_FLAG, CLIENT_FLAG.
DATA: V_ATINN LIKE AUSP-ATINN,
CNT TYPE I.
DATA: INDX LIKE SY-TABIX,
NOREC TYPE I.
DATA : BEGIN OF BDC_TAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF BDC_TAB.
DATA : MSG_LINES LIKE TLINE OCCURS 5 WITH HEADER LINE,
ZCOUNT(3) TYPE N,
ZDETER(3) TYPE N,
ZDETEC(1).
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: E_GROUP_OPENED,
NOMARK(1).
TABLES: T100.
DATA: BEGIN OF MSGTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF MSGTAB.
DATA: S_LIFNR LIKE LFA1-LIFNR,
PODATE(10),
RFQDEAD(10),
FCODE LIKE SY-UCOMM.
DATA: IT_EKET LIKE EKET OCCURS 0 WITH HEADER LINE.
DATA: V_DATE LIKE SY-DATUM,
P_DATE(2) TYPE N,
P_MTH(2) TYPE N,
P_YEAR(4) TYPE N.
----
SELECTION SCREENS *
----
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_WERKS FOR T001W-WERKS DEFAULT 'MY92' TO 'MY9Z',
S_BANFN FOR EBAN-BANFN,
S_DATE FOR EBAN-BADAT,
S_ERNAM FOR EBAN-ERNAM.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_STATU RADIOBUTTON GROUP RAD1 DEFAULT 'X',
P_STATU1 RADIOBUTTON GROUP RAD1,
P_STATU2 RADIOBUTTON GROUP RAD1,
P_STATU3 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
PARAMETERS: P_NAME1 AS CHECKBOX..
SELECTION-SCREEN END OF BLOCK B3.
***********************************************************************
INITIALIZATION *
***********************************************************************
INITIALIZATION.
P_DATE = SY-DATUM+6(2) + 01.
P_MTH = SY-DATUM+4(2) - 01.
P_YEAR = SY-DATUM+0(4).
CONCATENATE P_YEAR P_MTH P_DATE INTO V_DATE.
S_DATE-SIGN = 'I'.
S_DATE-OPTION = 'BT'.
S_DATE-LOW = V_DATE.
S_DATE-HIGH = SY-DATUM.
APPEND S_DATE.
***********************************************************************
AT SELECTION SCREEN *
***********************************************************************
AT SELECTION-SCREEN.
SELECT DISTINCT WERKS INTO T001W-WERKS
FROM T001W WHERE WERKS IN S_WERKS.
AUTHORITY-CHECK OBJECT 'Z_BASF_MM'
ID 'WERKS' FIELD T001W-WERKS
ID 'ZZ_LGORT' DUMMY
ID 'ZZ_UB' DUMMY
ID 'ZZ_SBU' DUMMY
ID 'ZZ_PROG' FIELD SY-REPID
ID 'ZZ_VALUE' DUMMY.
IF SY-SUBRC <> 0.
MESSAGE ID '00' TYPE 'E' NUMBER 149 WITH 'Z_BASF_MM'.
ENDIF.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E099 WITH 'Invalid Plant'.
ENDIF.
***********************************************************************
AT SELECTION SCREEN OUTPUT *
***********************************************************************
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ZPO'.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
EKKO-BSART = 'NB'.
RM06E-BEDAT = SY-DATUM.
EKKO-EKORG = 'MY20'.
EKKO-EKGRP = 'M96'.
PERFORM GET_POINFO.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
WHEN 'ZRFQ'.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
EKKO-BSART = 'AN'.
RM06E-BEDAT = SY-DATUM.
EKKO-EKORG = 'MY20'.
EKKO-EKGRP = 'M96'.
PERFORM GET_POINFO1.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
WHEN 'ZALL'.
PERFORM SEL_ALL.
WHEN 'ZUNS'.
PERFORM DE_SEL.
WHEN 'ZREF'.
PERFORM REFRESH.
WHEN 'ZPRINT'.
PERFORM PRINT_PR.
ENDCASE.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
PERFORM LISTING.
&----
*& Form RETRIVE_PLAF
&----
text
----
--> p1 text
<-- p2 text
----
FORM RETRIVE_EBAN.
CLEAR MATLIST.
IF P_STATU = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = ''.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
IF P_STATU1 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU = 'N'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
DELETE ADJACENT DUPLICATES FROM MATLIST COMPARING BANFN BNFPO ERNAM MATNR.
ENDSELECT.
ENDIF.
IF P_STATU2 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU EQ 'A'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
IF P_STATU3 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU EQ 'B'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
LOOP AT MATLIST.
IF MATLIST-BANFN IS INITIAL.
CLEAR MATLIST-LIFNR.
Get Last Vendor
SELECT LIFNR INTO (MATLIST-LIFNR) FROM EINA
WHERE MATNR = MATLIST-MATNR.
ENDSELECT.
ENDIF.
IF NOT MATLIST-LIFNR IS INITIAL.
Get Vendor Description
SELECT SINGLE NAME1 INTO MATLIST-NAME1 FROM LFA1
WHERE LIFNR = MATLIST-LIFNR.
ENDIF.
SELECT SINGLE EBELN INTO MATLIST-EBELN FROM EBAN
WHERE BANFN = MATLIST-BANFN.
SELECT SINGLE EBELN INTO MATLIST-EBELN1 FROM EKET
WHERE BANFN = MATLIST-BANFN.
MODIFY MATLIST.
ENDLOOP.
ENDFORM. " RETRIVE_PLAF
&----
*& Form WRITE_RESULT
&----
text
----
--> p1 text
<-- p2 text
----
FORM WRITE_RESULT.
PERFORM WRITE_HEADER.
CLEAR CNT.
SET PF-STATUS 'ACT1'.
SET SCREEN '000'.
IF P_NAME1 = 'X'.
SORT MATLIST ASCENDING BY NAME1.
ELSE.
SORT MATLIST BY BANFN MATNR.
ENDIF.
LOOP AT MATLIST.
CNT = CNT + 1.
WRITE: / MATLIST-MARKS INPUT ON AS CHECKBOX,
3 CNT LEFT-JUSTIFIED,
10 MATLIST-BANFN,
19 MATLIST-BNFPO,
26 MATLIST-MATNR,
35 MATLIST-TXZ01,
72 MATLIST-MENGE DECIMALS 2,
90 MATLIST-MEINS,
95 MATLIST-ERNAM,
110 MATLIST-DSDAT,
125 MATLIST-NAME1,
150 MATLIST-EBELN.
HIDE: X_FLAG, MATLIST.
ENDLOOP.
X_FLAG = SPACE.
ENDFORM. " WRITE_RESULT
&----
*& Form WRITE_HEADER
&----
text
----
--> p1 text
<-- p2 text
----
FORM WRITE_HEADER.
CNT = CNT + 1.
WRITE:/3 'No',
10 'PR No',
19 'Item',
26 'Material',
35 'Description',
80 'Quantity',
90 'UOM',
95 'Created By',
110 'Date',
125 'Manufacturer',
150 'PO No'.
ULINE AT /03(2).
ULINE AT 10(8).
ULINE AT 19(4).
ULINE AT 26(8).
ULINE AT 35(11).
ULINE AT 80(8).
ULINE AT 90(3).
ULINE AT 95(10).
ULINE AT 110(4).
ULINE AT 125(12).
ULINE AT 150(5).
ENDFORM. " WRITE_HEADER
&----
*& Form CALL_ME21
&----
text
----
--> p1 text
<-- p2 text
----
FORM CALL_ME21.
LOOP AT MATLIST WHERE MARKS = 'X'.
MOVE-CORRESPONDING MATLIST TO CONVMAT.
APPEND CONVMAT.
ENDLOOP.
SORT CONVMAT BY BANFN.
CLEAR : BDCDATA, MSGTAB.
REFRESH : BDCDATA, MSGTAB.
CONCATENATE RM06E-BEDAT6(2) '.' RM06E-BEDAT4(2) '.' RM06E-BEDAT+0(4)
INTO PODATE.
CLEAR CONVMAT.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MEV4000BUTTON'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO_TOPLINE-BSART'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MEV4001BUTTON'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO1226-ZTERM'.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
LOOP AT CONVMAT.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-SUPERFIELD'
EKKO-LIFNR.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO1226-INCO1'.
PERFORM BDC_FIELD USING 'MEPO1226-INCO1'
EKKO-INCO1.
PERFORM BDC_FIELD USING 'MEPO1211-BANFN(01)'
CONVMAT-BANFN.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
ENDLOOP.
CALL TRANSACTION 'ME21N' USING BDCDATA
MODE 'A' "Foreground processing
UPDATE 'S' "Synchronous update
MESSAGES INTO MSGTAB.
ENDFORM. " CALL_ME21
----
open dataset *
----
FORM OPEN_DATASET USING P_DATASET.
OPEN DATASET P_DATASET FOR INPUT IN TEXT MODE
ENCODING DEFAULT.
IF SY-SUBRC <> 0.
WRITE: / TEXT-E00, SY-SUBRC.
STOP.
ENDIF.
ENDFORM. "OPEN_DATASET
----
close dataset *
----
FORM CLOSE_DATASET USING P_DATASET.
CLOSE DATASET P_DATASET.
ENDFORM. "CLOSE_DATASET
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> '/'.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form CALL_ME41
&----
text
----
--> p1 text
<-- p2 text
----
FORM CALL_ME41.
LOOP AT MATLIST WHERE MARKS = 'X'.
MOVE-CORRESPONDING MATLIST TO CONVMAT.
APPEND CONVMAT.
ENDLOOP.
CONCATENATE EKKO-ANGDT6(2) '.' EKKO-ANGDT4(2) '.' EKKO-ANGDT+0(4)
INTO RFQDEAD.
CONCATENATE RM06E-BEDAT6(2) '.' RM06E-BEDAT4(2) '.' RM06E-BEDAT+0(4)
INTO PODATE.
SORT CONVMAT BY BANFN.
CLEAR : BDCDATA, MSGTAB.
REFRESH : BDCDATA, MSGTAB.
CLEAR CONVMAT.
LOOP AT CONVMAT.
AT FIRST.
ME41 Initial Screen.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'RM06E-ASART' EKKO-BSART.
PERFORM BDC_FIELD USING 'RM06E-ANFDT' PODATE.
PERFORM BDC_FIELD USING 'EKKO-ANGDT' RFQDEAD.
PERFORM BDC_FIELD USING 'EKKO-EKORG' EKKO-EKORG.
PERFORM BDC_FIELD USING 'EKKO-EKGRP' EKKO-EKGRP.
PERFORM BDC_FIELD USING 'RM06E-WERKS' RM06E-WERKS.
ENDAT.
Second Screen - Menu path PO>Copy with ref>PR
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BS'.
Thrid Screen - Enter the PR No.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0501'.
PERFORM BDC_FIELD USING 'EKET-BANFN' CONVMAT-BANFN.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTE'.
AT LAST.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RM06E-ANFPS(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=LS'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR' EKKO-LIFNR.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'.
ENDAT.
ENDLOOP.
CALL TRANSACTION 'ME41' USING BDCDATA
MODE 'A'
UPDATE 'S'
MESSAGES INTO MSGTAB.
ENDFORM. " CALL_ME41
&----
*& Form GET_POINFO
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_POINFO.
SET PF-STATUS 'ACT2'.
CALL SCREEN 200 STARTING AT 19 6
ENDING AT 66 20.
ENDFORM. " GET_POINFO
&----
*& Form GET_POINFO1
&----
text
----
FORM GET_POINFO1.
SET PF-STATUS 'ACT2'.
CALL SCREEN 400 STARTING AT 19 6
ENDING AT 66 20.
ENDFORM. "GET_POINFO1
&----
*& Module STATUS_0200 OUTPUT
&----
text
----
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'ACT2'.
SET TITLEBAR 'Enter the Following Details'.
ENDMODULE. " STATUS_0200 OUTPUT
&----
*& Module USER_COMMAND_0200 INPUT
&----
text
----
MODULE USER_COMMAND_0200 INPUT.
CASE SY-UCOMM.
WHEN 'EXEC'.
IF FCODE = 'ZPO'.
PERFORM CALL_ME21.
REFRESH CONVMAT.
CLEAR CONVMAT.
ELSE.
PERFORM CALL_ME41.
REFRESH CONVMAT.
CLEAR CONVMAT.
ENDIF.
LEAVE TO SCREEN '000'.
WHEN OTHERS.
LEAVE TO SCREEN '000'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
&----
*& Form SEL_ALL
&----
text
----
--> p1 text
<-- p2 text
----
FORM SEL_ALL.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X'.
SY-LISEL(1) = 'X'.
MODIFY LINE SY-INDEX.
ENDIF.
ENDDO.
ENDFORM. " SEL_ALL
&----
*& Form DE_SEL
&----
text
----
--> p1 text
<-- p2 text
----
FORM DE_SEL.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X'.
SY-LISEL(1) = ''.
MODIFY LINE SY-INDEX.
ENDIF.
ENDDO.
ENDFORM. " DE_SEL
&----
*& Form MARK_REC
&----
text
----
--> p1 text
<-- p2 text
----
FORM MARK_REC.
NOMARK = 'X'.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X' AND ( SY-LISEL(1) = 'X' OR SY-LISEL(1) = 'x' ).
NOMARK = ''.
READ TABLE MATLIST.
MATLIST-MARKS = 'X'.
X_SET_FLAG = 'X'.
MODIFY MATLIST INDEX SY-TABIX.
ENDIF.
ENDDO.
ENDFORM. " MARK_REC
&----
*& Form PRINT_PR
&----
text
----
FORM PRINT_PR.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
SUBMIT Z16BPCPR AND RETURN.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
ENDFORM. "PRINT_PR
&----
*& Form LISTING
&----
text
----
--> p1 text
<-- p2 text
----
FORM LISTING.
REFRESH: MATLIST, CONVMAT.
PERFORM RETRIVE_EBAN.
DESCRIBE TABLE MATLIST LINES NOREC.
IF NOREC <> 0.
PERFORM WRITE_RESULT.
ELSE.
MESSAGE I000 WITH 'No data Selected!'
'Please Check Your Selection Parameter'.
ENDIF.
ENDFORM. " LISTING
&----
*& Form REFRESH
&----
text
----
--> p1 text
<-- p2 text
----
FORM REFRESH.
PERFORM LISTING.
ENDFORM. " REFRESH
2007 Mar 14 5:41 AM
Hi,
Your line items are getting displayed in this perform statement.....
PERFORM BDC_FIELD USING 'MEPO1211-BANFN(01)'
CONVMAT-BANFN.
Here (01) actually stands for the line item index in the table control... So to display multiple line items this must be incremented......
You can try out something like this.....
DATA: cnt type i value 1,
temp_cnt(2) type c,
temp_field(40) type c.
LOOP AT CONVMAT.
.
.
.
.
.
if cnt lt 10.
concatenate '0' cnt into temp_cnt.
endif.
concatenate 'MEPO1211-BANFN(' temp_cnt ')' into temp_field.
PERFORM BDC_FIELD USING temp_field
CONVMAT-BANFN.
add 1 to cnt.
.
.
.
.
ENDLOOP.
Try this. It will surely work.
*************Reward points if found useful****************
Regards,
Kriththika.
Dear All,
This below program will generate a list of PR with a check-box beside it. User can select the PRs and then click on the Create PO/Create RFQ button. The contents in the PR will be transferred to the PO/RFQ. The user will check the contents and if any changes he wud modify and then click on the save button. The user needs only ME21N transaction. Since bapi wud automatically generate the PO in the backgroung processing, i am using BDC- foreground processing so that the user can save manually. This works for a single line item in the PO. but if there are multiple line items it's not working. Kindly help me on this.
Regards,
Karthik
REPORT ZMY20PR
MESSAGE-ID ZD
LINE-SIZE 170
LINE-COUNT 65
NO STANDARD PAGE HEADING.
----
TABLES *
----
TABLES: PLAF,
EBAN, "Purchase Requisition
EKKO, "Purchasing Document Header
EKPO, "Purchasing Document Item
EKET, "Scheduling Agreement Schedule Lines
T001W,
RM06E,
LFA1,
MARA,
MARC,
MARD,
MAKT,
KSSK, "Allocation Table: Object to Class
KLAH, "Class Header Data
KSML, "Characteristics of a Class
CABN, "Characteristic
AUSP. "Characteristic Values
----
INTERNAL TABLES AND VARIABLES DECLARATION *
----
DATA : BEGIN OF MATLIST OCCURS 0,
BANFN LIKE EBAN-BANFN,
BNFPO LIKE EBAN-BNFPO,
LIFNR LIKE EINA-LIFNR,
DSDAT LIKE MDKP-DSDAT,
MENGE LIKE EBAN-MENGE,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
ATWRT LIKE AUSP-ATWRT,
AFNAM LIKE EBAN-AFNAM,
TXZ01 LIKE EBAN-TXZ01,
LGORT LIKE EBAN-LGORT,
ERNAM LIKE EBAN-ERNAM,
MEINS LIKE MARA-MEINS,
NAME1 LIKE LFA1-NAME1,
EBELN LIKE EBAN-EBELN,
ANFNR LIKE EKPO-ANFNR,
EBELN1 LIKE EKET-EBELN,
MARKS(1) TYPE C,
END OF MATLIST.
DATA: BEGIN OF CONVMAT OCCURS 0.
INCLUDE STRUCTURE MATLIST.
DATA END OF CONVMAT.
DATA : BEGIN OF MAT OCCURS 0,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
DISPO LIKE MARC-DISPO,
CLASS LIKE KLAH-CLASS,
ATWRT LIKE AUSP-ATWRT,
MEINS LIKE MARA-MEINS,
LGFSB LIKE MARC-LGFSB,
DISMM LIKE MARC-DISMM,
DISLS LIKE MARC-DISLS,
MINBE LIKE MARC-MINBE,
MABST LIKE MARC-MABST,
BSTFE LIKE MARC-BSTFE,
LABST LIKE MARD-LABST,
END OF MAT.
DATA X_FLAG(1) VALUE 'X'.
DATA: PF3_FLAG, X_SET_FLAG, X_X_FLAG,
COMPLETE_KEY_FLAG, CLIENT_FLAG.
DATA: V_ATINN LIKE AUSP-ATINN,
CNT TYPE I.
DATA: INDX LIKE SY-TABIX,
NOREC TYPE I.
DATA : BEGIN OF BDC_TAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF BDC_TAB.
DATA : MSG_LINES LIKE TLINE OCCURS 5 WITH HEADER LINE,
ZCOUNT(3) TYPE N,
ZDETER(3) TYPE N,
ZDETEC(1).
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: E_GROUP_OPENED,
NOMARK(1).
TABLES: T100.
DATA: BEGIN OF MSGTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF MSGTAB.
DATA: S_LIFNR LIKE LFA1-LIFNR,
PODATE(10),
RFQDEAD(10),
FCODE LIKE SY-UCOMM.
DATA: IT_EKET LIKE EKET OCCURS 0 WITH HEADER LINE.
DATA: V_DATE LIKE SY-DATUM,
P_DATE(2) TYPE N,
P_MTH(2) TYPE N,
P_YEAR(4) TYPE N.
----
SELECTION SCREENS *
----
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_WERKS FOR T001W-WERKS DEFAULT 'MY92' TO 'MY9Z',
S_BANFN FOR EBAN-BANFN,
S_DATE FOR EBAN-BADAT,
S_ERNAM FOR EBAN-ERNAM.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_STATU RADIOBUTTON GROUP RAD1 DEFAULT 'X',
P_STATU1 RADIOBUTTON GROUP RAD1,
P_STATU2 RADIOBUTTON GROUP RAD1,
P_STATU3 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
PARAMETERS: P_NAME1 AS CHECKBOX..
SELECTION-SCREEN END OF BLOCK B3.
***********************************************************************
INITIALIZATION *
***********************************************************************
INITIALIZATION.
P_DATE = SY-DATUM+6(2) + 01.
P_MTH = SY-DATUM+4(2) - 01.
P_YEAR = SY-DATUM+0(4).
CONCATENATE P_YEAR P_MTH P_DATE INTO V_DATE.
S_DATE-SIGN = 'I'.
S_DATE-OPTION = 'BT'.
S_DATE-LOW = V_DATE.
S_DATE-HIGH = SY-DATUM.
APPEND S_DATE.
***********************************************************************
AT SELECTION SCREEN *
***********************************************************************
AT SELECTION-SCREEN.
SELECT DISTINCT WERKS INTO T001W-WERKS
FROM T001W WHERE WERKS IN S_WERKS.
AUTHORITY-CHECK OBJECT 'Z_BASF_MM'
ID 'WERKS' FIELD T001W-WERKS
ID 'ZZ_LGORT' DUMMY
ID 'ZZ_UB' DUMMY
ID 'ZZ_SBU' DUMMY
ID 'ZZ_PROG' FIELD SY-REPID
ID 'ZZ_VALUE' DUMMY.
IF SY-SUBRC <> 0.
MESSAGE ID '00' TYPE 'E' NUMBER 149 WITH 'Z_BASF_MM'.
ENDIF.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E099 WITH 'Invalid Plant'.
ENDIF.
***********************************************************************
AT SELECTION SCREEN OUTPUT *
***********************************************************************
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ZPO'.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
EKKO-BSART = 'NB'.
RM06E-BEDAT = SY-DATUM.
EKKO-EKORG = 'MY20'.
EKKO-EKGRP = 'M96'.
PERFORM GET_POINFO.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
WHEN 'ZRFQ'.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
EKKO-BSART = 'AN'.
RM06E-BEDAT = SY-DATUM.
EKKO-EKORG = 'MY20'.
EKKO-EKGRP = 'M96'.
PERFORM GET_POINFO1.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
WHEN 'ZALL'.
PERFORM SEL_ALL.
WHEN 'ZUNS'.
PERFORM DE_SEL.
WHEN 'ZREF'.
PERFORM REFRESH.
WHEN 'ZPRINT'.
PERFORM PRINT_PR.
ENDCASE.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
PERFORM LISTING.
&----
*& Form RETRIVE_PLAF
&----
text
----
--> p1 text
<-- p2 text
----
FORM RETRIVE_EBAN.
CLEAR MATLIST.
IF P_STATU = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = ''.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
IF P_STATU1 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU = 'N'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
DELETE ADJACENT DUPLICATES FROM MATLIST COMPARING BANFN BNFPO ERNAM MATNR.
ENDSELECT.
ENDIF.
IF P_STATU2 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU EQ 'A'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
IF P_STATU3 = 'X'.
SELECT BANFN BNFPO ERNAM AFNAM TXZ01 MATNR LGORT
MENGE MEINS FLIEF BADAT
INTO (MATLIST-BANFN, MATLIST-BNFPO, MATLIST-ERNAM, MATLIST-AFNAM,
MATLIST-TXZ01, MATLIST-MATNR, MATLIST-LGORT, MATLIST-MENGE,
MATLIST-MEINS, MATLIST-LIFNR, MATLIST-DSDAT )
FROM EBAN WHERE WERKS IN S_WERKS AND
BANFN IN S_BANFN AND
BADAT IN S_DATE AND
ERNAM IN S_ERNAM AND
LOEKZ = '' AND
STATU EQ 'B'.
IF SY-SUBRC = 0.
APPEND MATLIST.
ENDIF.
ENDSELECT.
ENDIF.
LOOP AT MATLIST.
IF MATLIST-BANFN IS INITIAL.
CLEAR MATLIST-LIFNR.
Get Last Vendor
SELECT LIFNR INTO (MATLIST-LIFNR) FROM EINA
WHERE MATNR = MATLIST-MATNR.
ENDSELECT.
ENDIF.
IF NOT MATLIST-LIFNR IS INITIAL.
Get Vendor Description
SELECT SINGLE NAME1 INTO MATLIST-NAME1 FROM LFA1
WHERE LIFNR = MATLIST-LIFNR.
ENDIF.
SELECT SINGLE EBELN INTO MATLIST-EBELN FROM EBAN
WHERE BANFN = MATLIST-BANFN.
SELECT SINGLE EBELN INTO MATLIST-EBELN1 FROM EKET
WHERE BANFN = MATLIST-BANFN.
MODIFY MATLIST.
ENDLOOP.
ENDFORM. " RETRIVE_PLAF
&----
*& Form WRITE_RESULT
&----
text
----
--> p1 text
<-- p2 text
----
FORM WRITE_RESULT.
PERFORM WRITE_HEADER.
CLEAR CNT.
SET PF-STATUS 'ACT1'.
SET SCREEN '000'.
IF P_NAME1 = 'X'.
SORT MATLIST ASCENDING BY NAME1.
ELSE.
SORT MATLIST BY BANFN MATNR.
ENDIF.
LOOP AT MATLIST.
CNT = CNT + 1.
WRITE: / MATLIST-MARKS INPUT ON AS CHECKBOX,
3 CNT LEFT-JUSTIFIED,
10 MATLIST-BANFN,
19 MATLIST-BNFPO,
26 MATLIST-MATNR,
35 MATLIST-TXZ01,
72 MATLIST-MENGE DECIMALS 2,
90 MATLIST-MEINS,
95 MATLIST-ERNAM,
110 MATLIST-DSDAT,
125 MATLIST-NAME1,
150 MATLIST-EBELN.
HIDE: X_FLAG, MATLIST.
ENDLOOP.
X_FLAG = SPACE.
ENDFORM. " WRITE_RESULT
&----
*& Form WRITE_HEADER
&----
text
----
--> p1 text
<-- p2 text
----
FORM WRITE_HEADER.
CNT = CNT + 1.
WRITE:/3 'No',
10 'PR No',
19 'Item',
26 'Material',
35 'Description',
80 'Quantity',
90 'UOM',
95 'Created By',
110 'Date',
125 'Manufacturer',
150 'PO No'.
ULINE AT /03(2).
ULINE AT 10(8).
ULINE AT 19(4).
ULINE AT 26(8).
ULINE AT 35(11).
ULINE AT 80(8).
ULINE AT 90(3).
ULINE AT 95(10).
ULINE AT 110(4).
ULINE AT 125(12).
ULINE AT 150(5).
ENDFORM. " WRITE_HEADER
&----
*& Form CALL_ME21
&----
text
----
--> p1 text
<-- p2 text
----
FORM CALL_ME21.
LOOP AT MATLIST WHERE MARKS = 'X'.
MOVE-CORRESPONDING MATLIST TO CONVMAT.
APPEND CONVMAT.
ENDLOOP.
SORT CONVMAT BY BANFN.
CLEAR : BDCDATA, MSGTAB.
REFRESH : BDCDATA, MSGTAB.
CONCATENATE RM06E-BEDAT6(2) '.' RM06E-BEDAT4(2) '.' RM06E-BEDAT+0(4)
INTO PODATE.
CLEAR CONVMAT.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MEV4000BUTTON'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO_TOPLINE-BSART'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MEV4001BUTTON'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO1226-ZTERM'.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
LOOP AT CONVMAT.
PERFORM BDC_DYNPRO USING 'SAPLMEGUI' '0014'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BSART'
EKKO-BSART.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-SUPERFIELD'
EKKO-LIFNR.
PERFORM BDC_FIELD USING 'MEPO_TOPLINE-BEDAT'
PODATE.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MEPO1226-INCO1'.
PERFORM BDC_FIELD USING 'MEPO1226-INCO1'
EKKO-INCO1.
PERFORM BDC_FIELD USING 'MEPO1211-BANFN(01)'
CONVMAT-BANFN.
PERFORM BDC_FIELD USING 'DYN_6000-LIST'
' 1'.
ENDLOOP.
CALL TRANSACTION 'ME21N' USING BDCDATA
MODE 'A' "Foreground processing
UPDATE 'S' "Synchronous update
MESSAGES INTO MSGTAB.
ENDFORM. " CALL_ME21
----
open dataset *
----
FORM OPEN_DATASET USING P_DATASET.
OPEN DATASET P_DATASET FOR INPUT IN TEXT MODE
ENCODING DEFAULT.
IF SY-SUBRC <> 0.
WRITE: / TEXT-E00, SY-SUBRC.
STOP.
ENDIF.
ENDFORM. "OPEN_DATASET
----
close dataset *
----
FORM CLOSE_DATASET USING P_DATASET.
CLOSE DATASET P_DATASET.
ENDFORM. "CLOSE_DATASET
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> '/'.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form CALL_ME41
&----
text
----
--> p1 text
<-- p2 text
----
FORM CALL_ME41.
LOOP AT MATLIST WHERE MARKS = 'X'.
MOVE-CORRESPONDING MATLIST TO CONVMAT.
APPEND CONVMAT.
ENDLOOP.
CONCATENATE EKKO-ANGDT6(2) '.' EKKO-ANGDT4(2) '.' EKKO-ANGDT+0(4)
INTO RFQDEAD.
CONCATENATE RM06E-BEDAT6(2) '.' RM06E-BEDAT4(2) '.' RM06E-BEDAT+0(4)
INTO PODATE.
SORT CONVMAT BY BANFN.
CLEAR : BDCDATA, MSGTAB.
REFRESH : BDCDATA, MSGTAB.
CLEAR CONVMAT.
LOOP AT CONVMAT.
AT FIRST.
ME41 Initial Screen.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'RM06E-ASART' EKKO-BSART.
PERFORM BDC_FIELD USING 'RM06E-ANFDT' PODATE.
PERFORM BDC_FIELD USING 'EKKO-ANGDT' RFQDEAD.
PERFORM BDC_FIELD USING 'EKKO-EKORG' EKKO-EKORG.
PERFORM BDC_FIELD USING 'EKKO-EKGRP' EKKO-EKGRP.
PERFORM BDC_FIELD USING 'RM06E-WERKS' RM06E-WERKS.
ENDAT.
Second Screen - Menu path PO>Copy with ref>PR
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BS'.
Thrid Screen - Enter the PR No.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0501'.
PERFORM BDC_FIELD USING 'EKET-BANFN' CONVMAT-BANFN.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTE'.
AT LAST.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RM06E-ANFPS(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=LS'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR' EKKO-LIFNR.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'.
ENDAT.
ENDLOOP.
CALL TRANSACTION 'ME41' USING BDCDATA
MODE 'A'
UPDATE 'S'
MESSAGES INTO MSGTAB.
ENDFORM. " CALL_ME41
&----
*& Form GET_POINFO
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_POINFO.
SET PF-STATUS 'ACT2'.
CALL SCREEN 200 STARTING AT 19 6
ENDING AT 66 20.
ENDFORM. " GET_POINFO
&----
*& Form GET_POINFO1
&----
text
----
FORM GET_POINFO1.
SET PF-STATUS 'ACT2'.
CALL SCREEN 400 STARTING AT 19 6
ENDING AT 66 20.
ENDFORM. "GET_POINFO1
&----
*& Module STATUS_0200 OUTPUT
&----
text
----
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'ACT2'.
SET TITLEBAR 'Enter the Following Details'.
ENDMODULE. " STATUS_0200 OUTPUT
&----
*& Module USER_COMMAND_0200 INPUT
&----
text
----
MODULE USER_COMMAND_0200 INPUT.
CASE SY-UCOMM.
WHEN 'EXEC'.
IF FCODE = 'ZPO'.
PERFORM CALL_ME21.
REFRESH CONVMAT.
CLEAR CONVMAT.
ELSE.
PERFORM CALL_ME41.
REFRESH CONVMAT.
CLEAR CONVMAT.
ENDIF.
LEAVE TO SCREEN '000'.
WHEN OTHERS.
LEAVE TO SCREEN '000'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
&----
*& Form SEL_ALL
&----
text
----
--> p1 text
<-- p2 text
----
FORM SEL_ALL.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X'.
SY-LISEL(1) = 'X'.
MODIFY LINE SY-INDEX.
ENDIF.
ENDDO.
ENDFORM. " SEL_ALL
&----
*& Form DE_SEL
&----
text
----
--> p1 text
<-- p2 text
----
FORM DE_SEL.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X'.
SY-LISEL(1) = ''.
MODIFY LINE SY-INDEX.
ENDIF.
ENDDO.
ENDFORM. " DE_SEL
&----
*& Form MARK_REC
&----
text
----
--> p1 text
<-- p2 text
----
FORM MARK_REC.
NOMARK = 'X'.
DO.
X_FLAG = ' '.
READ LINE SY-INDEX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF X_FLAG = 'X' AND ( SY-LISEL(1) = 'X' OR SY-LISEL(1) = 'x' ).
NOMARK = ''.
READ TABLE MATLIST.
MATLIST-MARKS = 'X'.
X_SET_FLAG = 'X'.
MODIFY MATLIST INDEX SY-TABIX.
ENDIF.
ENDDO.
ENDFORM. " MARK_REC
&----
*& Form PRINT_PR
&----
text
----
FORM PRINT_PR.
FCODE = SY-UCOMM.
PERFORM MARK_REC.
IF NOMARK = ''.
SUBMIT Z16BPCPR AND RETURN.
ELSE.
MESSAGE I000 WITH 'ERROR! NO PR SELECTED'.
ENDIF.
ENDFORM. "PRINT_PR
&----
*& Form LISTING
&----
text
----
--> p1 text
<-- p2 text
----
FORM LISTING.
REFRESH: MATLIST, CONVMAT.
PERFORM RETRIVE_EBAN.
DESCRIBE TABLE MATLIST LINES NOREC.
IF NOREC <> 0.
PERFORM WRITE_RESULT.
ELSE.
MESSAGE I000 WITH 'No data Selected!'
'Please Check Your Selection Parameter'.
ENDIF.
ENDFORM. " LISTING
&----
*& Form REFRESH
&----
text
----
--> p1 text
<-- p2 text
----
FORM REFRESH.
PERFORM LISTING.
ENDFORM. " REFRESH
2007 Mar 14 4:48 AM
Hi,
The problem is with the looping in BDC for PO. Pls help me to do the looping for multiple lline items.
Regards,
Karthik
2007 Mar 14 4:49 AM
Hi Karthik,
In this part ,
LOOP AT CONVMAT.
endloop.
On the screen, tablecontrol you will find a button to add line items. Every time you loop in to this loop you will have to call that button press in the BDC and the cursor will be on the first/second line always. This will help you to tackle multiple line item scenario.
Hope that helps.
Regards
Kapadia
***Assigning points is the way to say thanks in SDN.***
2007 Mar 14 5:41 AM
Hi,
Your line items are getting displayed in this perform statement.....
PERFORM BDC_FIELD USING 'MEPO1211-BANFN(01)'
CONVMAT-BANFN.
Here (01) actually stands for the line item index in the table control... So to display multiple line items this must be incremented......
You can try out something like this.....
DATA: cnt type i value 1,
temp_cnt(2) type c,
temp_field(40) type c.
LOOP AT CONVMAT.
.
.
.
.
.
if cnt lt 10.
concatenate '0' cnt into temp_cnt.
endif.
concatenate 'MEPO1211-BANFN(' temp_cnt ')' into temp_field.
PERFORM BDC_FIELD USING temp_field
CONVMAT-BANFN.
add 1 to cnt.
.
.
.
.
ENDLOOP.
Try this. It will surely work.
*************Reward points if found useful****************
Regards,
Kriththika.
2007 Mar 15 2:50 AM
Hi Kriththika,
Thanks for ur help. I solved that problem. But i have a new problem.
<b>if cnt lt 100.</b>
concatenate '0' cnt into temp_cnt.
endif.
i have increased the line item index to 100 according to the requirement. but the screen can accept only 15 line items. How do i add more line items?
Thanks & Regards,
Karthik
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |