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

Fields being overwritten

Former Member
0 Likes
577

Hi people,

I am trying to work with internal tables.

I have three tables:

DATA: itab TYPE bsid OCCURS 0 WITH HEADER LINE.

DATA: ktab TYPE kna1 OCCURS 0 WITH HEADER LINE.

DATA:BEGIN OF atab OCCURS 0,

kunnr LIKE bsid-kunnr,

no LIKE aging-no,

dmbtr LIKE bsid-dmbtr,

name1 LIKE kna1-name1,

stras LIKE kna1-stras,

ort01 LIKE kna1-ort01,

regio LIKE kna1-regio,

pstlz LIKE kna1-pstlz,

land1 LIKE kna1-land1,

END OF atab.

DATA: BEGIN OF ftab OCCURS 100,

kunnr LIKE bsid-kunnr,

name1 LIKE kna1-name1,

stras LIKE kna1-stras,

ort01 LIKE kna1-ort01,

regio LIKE kna1-regio,

pstlz LIKE kna1-pstlz,

current LIKE bsid-dmbtr,

amtunder_30 LIKE bsid-dmbtr,

amtunder_60 LIKE bsid-dmbtr,

amtunder_90 LIKE bsid-dmbtr,

over_90 LIKE bsid-dmbtr,

END OF ftab.

Now I have to write out the data into my FTAB from both ktab and atab.

all the customers have to be written but in atab the amount that are getting calculated have to be written also. Now for the entries coming from ATAB table, I am still getting values from the ktab table. Also, the name, stras, etc fields in the ATAB table are taking in the last entry from the KTAB table.

Can anybody help?

Thanks,

AM

3 REPLIES 3
Read only

Former Member
0 Likes
485

Can you share the code you are using to merge the internal tables. This is help us undetstand the problem.

Read only

0 Likes
485

Here is the code:

TABLES: BSID,
        KNB1,
        KNKK,
        KNA1.


DATA : BEGIN OF aging OCCURS 5,
no(1),
from(3),
to(5),
END OF aging.


DATA: itab TYPE bsid OCCURS 0 WITH HEADER LINE.


DATA: ktab TYPE kna1 OCCURS 0 WITH HEADER LINE.


DATA: BEGIN OF ctab OCCURS 0,
        kunnr LIKE kna1-kunnr,
        name1 LIKE kna1-name1,
        stras LIKE kna1-stras,
        ort01 LIKE kna1-ort01,
        regio LIKE kna1-regio,
        pstlz LIKE kna1-pstlz,
        land1 LIKE kna1-land1,
      END OF ctab.



DATA:BEGIN OF atab OCCURS 0,
        kunnr LIKE bsid-kunnr,
        no LIKE aging-no,
        dmbtr LIKE bsid-dmbtr,
        name1 LIKE kna1-name1,
        stras LIKE kna1-stras,
        ort01 LIKE kna1-ort01,
        regio LIKE kna1-regio,
        pstlz LIKE kna1-pstlz,
        land1 LIKE kna1-land1,
     END OF atab.


DATA: BEGIN OF ftab OCCURS 100,
        kunnr LIKE bsid-kunnr,
        name1 LIKE kna1-name1,
        stras LIKE kna1-stras,
        ort01 LIKE kna1-ort01,
        regio LIKE kna1-regio,
        pstlz LIKE kna1-pstlz,
        current LIKE bsid-dmbtr,
        amtunder_30 LIKE bsid-dmbtr,
        amtunder_60 LIKE bsid-dmbtr,
        amtunder_90 LIKE bsid-dmbtr,
        over_90 LIKE bsid-dmbtr,
      END OF ftab.


DATA: current LIKE bsid-dmbtr,
      amtunder_30 LIKE bsid-dmbtr,
      amtunder_60 LIKE bsid-dmbtr,
      amtunder_90 LIKE bsid-dmbtr,
      over_90 LIKE bsid-dmbtr.



DATA difday TYPE sy-dbcnt.
*sel-screen
PARAMETERS currdate LIKE sy-datum DEFAULT sy-datum.


DATA: date LIKE bsid-zfbdt,
      zterm LIKE knb1-zterm,
      crblb LIKE knkk-crblb.


DATA: l_kunnr LIKE kna1-kunnr.


START-OF-SELECTION.

* PERFORM GET-DATA.

*abbreviation !
   APPEND '100130' TO aging.
   APPEND '203160' TO aging.
   APPEND '306190' TO aging.
   APPEND '4091120' TO aging.
   APPEND '51219999' TO aging.



  SELECT * FROM kna1 INTO TABLE ktab WHERE erdat le currdate.


    SELECT kunnr INTO l_kunnr FROM kna1.
    ENDSELECT.

LOOP AT ktab.

*select data
   SELECT * FROM  bsid INTO TABLE itab
          WHERE kunnr = ktab-kunnr and budat le currdate.


   IF l_kunnr NE itab-kunnr.
        MOVE ktab-kunnr TO ftab-kunnr.
        MOVE ktab-name1 TO ftab-name1.
        MOVE ktab-stras TO ftab-stras.
       APPEND ftab.
    ENDIF.


*migration
 LOOP AT itab.

*correct sign
   IF itab-shkzg = 'H'.
     itab-dmbtr = itab-dmbtr * -1.
   ENDIF.


   IF itab-blart = 'AB'.
      IF itab-rebzg NE SPACE.
            SELECT zfbdt INTO date FROM bsid WHERE bsid~belnr =
            itab-rebzg.
                  MOVE date TO itab-zfbdt.
            ENDSELECT.
      ENDIF.
   ENDIF.



   MOVE-CORRESPONDING itab TO atab.

   IF l_kunnr EQ itab-kunnr.
       MOVE ktab-name1 TO atab-name1.
       MOVE ktab-stras TO atab-stras.
     APPEND atab.
   ENDIF.

*assigning age of invoices
   difday = currdate - itab-zfbdt.


   LOOP AT aging WHERE from LE difday
                   AND to   GE difday.
   ENDLOOP.


   IF sy-subrc = 0.
     MOVE aging-no TO atab-no.
   ELSE.
*error -> check customizing of aging / bldat of invoice
     MESSAGE s001(00) WITH 'cannot assign' .
   ENDIF.

        COLLECT atab.
  ENDLOOP.
ENDLOOP.



CLEAR atab.
SORT atab.
   LOOP AT atab.

      IF atab-no = 1.
          MOVE atab-dmbtr TO current.
      ELSEIF atab-no = 2.
          MOVE atab-dmbtr TO amtunder_30.
      ELSEIF atab-no = 3.
          MOVE atab-dmbtr TO amtunder_60.
      ELSEIF atab-no = 4.
          MOVE atab-dmbtr TO amtunder_90.
      ELSE.
          MOVE atab-dmbtr TO over_90.
      ENDIF.



   AT END OF kunnr.
      MOVE atab-kunnr TO ftab-kunnr.
      MOVE current TO ftab-current.
      MOVE amtunder_30 TO ftab-amtunder_30.
      MOVE amtunder_60 TO ftab-amtunder_60.
      MOVE amtunder_90 TO ftab-amtunder_90.
      MOVE over_90 TO ftab-over_90.

    APPEND ftab.

   ENDAT.


ENDLOOP.

SORT ftab.
LOOP AT ftab.
      WRITE: / ftab-kunnr, ftab-name1, ftab-stras,
               ftab-current,
               ftab-amtunder_30, ftab-amtunder_60, ftab-amtunder_90,
               ftab-over_90.

ENDLOOP.

Thanks,

AM

Read only

0 Likes
485

Hey guys,

I solved this problem on my own.

Thanks for any help that anybody has provided.

Regards,

AM