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

syntax err:cannot use an internal table as work area

former_member612655
Participant
0 Likes
1,040

hii experts,

REPORT ZMM_BUSINESS_BASE.
TABLES : ZMM_BUSINESS,T001W,T001L,CEPC.
SELECT-OPTIONS : WERKS FOR ZMM_BUSINESS-WERKS.
* PRCTR FOR ZMM_BUSINESS-PRCTR.

TYPES : BEGIN OF TY_FINAL,
WERKS TYPE T001W-WERKS,
NAME1 TYPE T001W-NAME1,
LGORT TYPE T001L-LGORT,
LIFNR TYPE T001L-LIFNR,
PRCTR TYPE CEPC-PRCTR,


END OF TY_FINAL.
DATA : WA_FINAL TYPE TY_FINAL,
IT_FINAL TYPE TABLE OF TY_FINAL.

TYPES : BEGIN OF TY_ZMM_BUSINESS,

WERKS TYPE ZMM_BUSINESS-WERKS,
LGORT TYPE ZMM_BUSINESS-LGORT,
PRCTR TYPE ZMM_BUSINESS-PRCTR,
END OF TY_ZMM_BUSINESS.
DATA : WA_ZMM_BUSINESS TYPE TY_ZMM_BUSINESS,
IT_ZMM_BUSINESS TYPE TABLE OF TY_ZMM_BUSINESS.

TYPES : BEGIN OF TY_T001L,
IGORT TYPE T001L-LGORT,
WERKS TYPE T001L-WERKS,
LIFNR TYPE T001L-LIFNR,
END OF TY_T001L.
DATA : WA_T001L TYPE TY_T001L,
IT_T001L TYPE TABLE OF TY_T001L.

TYPES : BEGIN OF TY_T001W,
WERKS TYPE T001W-WERKS,
NAME1 TYPE T001W-WERKS,
LIFNR TYPE T001W-LIFNR,
END OF TY_T001W.
DATA : WA_T001W TYPE TY_T001W,
IT_T001W TYPE TABLE OF TY_T001W.



TYPES : BEGIN OF TY_CEPC,
PRCTR TYPE CEPC-PRCTR,
NAME1 TYPE CEPC-NAME1,
END OF TY_CEPC.
DATA : WA_CEPC TYPE TY_CEPC,
IT_CEPC TYPE TABLE OF TY_CEPC.


SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : S_WERKS FOR T001W-WERKS,
S_LGORT FOR T001L-LGORT,
S_PRCTR FOR CEPC-PRCTR.

SELECTION-SCREEN END OF BLOCK A.

SELECT WERKS LGORT PRCTR FROM ZMM_BUSINESS INTO TABLE IT_ZMM_BUSINESS WHERE WERKS IN S_WERKS.

IF IT_ZMM_BUSINESS IS NOT INITIAL.
SELECT LGORT WERKS LIFNR FROM T001L INTO IT_T001L FOR ALL ENTRIES IN IT_ZMM_BUSINESS WHERE WERKS = IT_ZMM_BUSINESS-WERKS.
ENDIF.

IF IT_T001L IS NOT INITIAL.
SELECT WERKS NAME1 LIFNR FROM T001W INTO IT_T001W FOR ALL ENTRIES IN IT_T001L WHERE LIFNR = IT_T001L-LIFNR.
ENDIF.

IF IT_T001W IS NOT INITIAL.
SELECT PRCTR NAME1 FROM CEPC INTO IT_CEPC FOR ALL ENTRIES IN IT_T001W WHERE NAME1 = IT_T001L-NAME1.
ENDIF.

LOOP AT IT_ZMM_BUSINESS INTO WA_ZMM_BUSINESS.
WA_FINAL-WERKS = WA_ZMM_BUSINESS-WERKS.
WA_FINAL-LGORT = WA_ZMM_BUSINESS-LGORT.
WA_FINAL-PRCTR = WA_ZMM_BUSINESS-PRCTR.
ENDLOOP.

LOOP AT IT_T001L INTO WA_T001L.

WA_FINAL-LIFNR = WA_T001L-LIFNR.
ENDLOOP.

LOOP AT IT_CEPC INTO WA_CEPC.
WA_FINAL-NAME1 = WA_CEPC-NAME1.

READ TABLE IT_T001W INTO WA_T001W WITH KEY WERKS = WA_T001L-WERKS.
* WA_FINAL-NAME1 = WA_T001L-NAME1.

APPEND WA_FINAL TO IT_FINAL.

CLEAR : WA_ZMM_BUSINESS,
WA_T001W,
WA_T001L,
WA_CEPC.
ENDLOOP.



LOOP AI IT_FINAL INTO WA_FINAL.

WRITE 😕 WA_FINAL-WERKS,
WA_FINAL-LGORT,
WA_FINAL-PRCTR,
WA_FINAL_NAME1,
WA_FINAL_LIFNR.

ENDLOOP.

This program gives an error on select statement(we cannot use an internal table as workarea)

4 REPLIES 4
Read only

matt
Active Contributor
930

A few points

  1. TABLES is obsolete. Don't use it
  2. You should post code using the "code" button in the editor
  3. You've got a READ with a result that's not used
  4. If you're using READ you should have a HASHED table not a STANDARD, with READ ... TABLE KEY...
  5. You should joins rather than FOR ALL ENTRIES.
  6. You've got FOUR select statements. Which one is causing trouble?
  7. You've managed to get it right with one of them. I suggest you read carefully all four and try to spot the difference. But you should nonetheless use point 5 above.
Read only

agrawalaadhar8
Participant
930

Hi,

ABAP Code Checker clearly gives the correct error.

Seems you are missing TABLE keyword in your select queries (SELECT * INTO TABLE).

So IT_T001L, IT_T001W.... are considered as Work Areas and you cannot loop into work areas.

Please check the code once again.

Regards.

Read only

Former Member
930

OBSOLETE 1 :

TABLES : ZMM_BUSINESS,T001W,T001L,CEPC.

TYPES : BEGIN OF TY_ZMM_BUSINESS,
WERKS TYPE ZMM_BUSINESS-WERKS,
LGORT TYPE ZMM_BUSINESS-LGORT,
PRCTR TYPE ZMM_BUSINESS-PRCTR,
END OF TY_ZMM_BUSINESS.

TO FIX :

Instead of TABLES use Data element

TYPES : BEGIN OF TY_ZMM_BUSINESS,
WERKS TYPE WERKS_D,
LGORT TYPE LGORT_D,
PRCTR TYPE PRCTR,
END OF TY_ZMM_BUSINESS.

ERROR 1 :

SELECT WERKS NAME1 LIFNR FROM T001W INTO IT_T001W FOR ALL ENTRIES IN IT_T001L WHERE LIFNR = IT_T001L-LIFNR.

TO FIX :

SELECT WERKS NAME1 LIFNR FROM T001W INTO TABLE IT_T001W FOR ALL ENTRIES IN IT_T001L WHERE LIFNR = IT_T001L-LIFNR.

ERROR 2 :

SELECT WERKS NAME1 LIFNR FROM T001W INTO IT_T001W FOR ALL ENTRIES IN IT_T001L WHERE LIFNR = IT_T001L-LIFNR.

TO FIX :

SELECT WERKS NAME1 LIFNR FROM T001W INTO TABLE IT_T001W FOR ALL ENTRIES IN IT_T001L WHERE LIFNR = IT_T001L-LIFNR.

ERROR 3 :

SELECT PRCTR NAME1 FROM CEPC INTO IT_CEPC FOR ALL ENTRIES IN IT_T001W WHERE NAME1 = IT_T001L-NAME1.

TO FIX :

SELECT PRCTR NAME1 FROM CEPC INTO TABLE IT_CEPC FOR ALL ENTRIES IN IT_T001W WHERE NAME1 = IT_T001W-NAME1.


ERROR 4 :

LOOP AI IT_FINAL INTO WA_FINAL.

TO FIX :

LOOP AT IT_FINAL INTO WA_FINAL.

I have given the snaps by seeing the code any other error comes in feature ping here

Read only

nikita_narayana
Discoverer
0 Likes
930

We are using the FOR ALL ENTRIES for fetching the details from the respective table, so every time when we use FOR ALL ENTRIES we need to populate the values into Table.

In the above select statement, you have used FOR ALL ENTRIES but didn't used INTO TABLE IT_T001L statement instead you have used INTO IT_T001L.

Replace your code like this.

IF IT_ZMM_BUSINESS[] IS NOT INITIAL.

SELECT LGORT WERKS LIFNR FROM T001L INTO TABLE IT_T001L FOR ALL ENTRIES IN IT_ZMM_BUSINESS WHERE WERKS = IT_ZMM_BUSINESS-WERKS.

ENDIF.

Thanks,

Nikita N.