Application Development 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: 

Logic to add 1 from 01 until 99, then go to A1->Z9

Former Member
0 Kudos

I have a requirement add 1 to the line no. whenever I add a record to the table. I have to search the table for the highest line number saved and add 1 to it. The trick is that when I get to 99, the next line number should be A1, and then A2 until A9. When I get to A9 I should go to B1, etc. until Z9.

How can I accomplish this?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi

Perhaps something like this can help you:


DATA: BEGIN OF ITAB OCCURS 0,

        KEY(2) TYPE C,

       END   OF ITAB.

DATA: NUM_CHECK TYPE I.

DATA: NUM2(2) TYPE N.

DATA: NUM(1) TYPE N.

DATA: OFFSET TYPE I.

PARAMETERS: P_TIMES TYPE I.

DO P_TIMES TIMES.

   SORT ITAB BY KEY DESCENDING.

   READ TABLE ITAB INDEX 1.

   IF SY-SUBRC <> 0.

     ITAB-KEY = '01'.

   ELSE.

     IF ITAB-KEY CO '0123456789'.

       MOVE ITAB-KEY TO NUM_CHECK.

       IF NUM_CHECK < 99.

         NUM_CHECK = NUM_CHECK + 1.

         MOVE NUM_CHECK TO NUM2.

         MOVE NUM2      TO ITAB-KEY.

       ELSE.

         ITAB-KEY = 'A1'.

       ENDIF.

     ELSE.

       MOVE ITAB-KEY+1 TO NUM.

       IF NUM < 9.

         NUM = NUM + 1.

         ITAB-KEY+1(1) = NUM.

       ELSE.

         OFFSET = OFFSET + 1.

         ITAB-KEY(1) = SY-ABCDE+OFFSET(1).

         ITAB-KEY+1(1) = '1'.

       ENDIF.

     ENDIF.

   ENDIF.

   APPEND ITAB.

ENDDO.

SORT ITAB BY KEY.

LOOP AT ITAB.

   WRITE: / ITAB-KEY.

ENDLOOP.

Max

3 REPLIES 3

Former Member
0 Kudos

Hi

Perhaps something like this can help you:


DATA: BEGIN OF ITAB OCCURS 0,

        KEY(2) TYPE C,

       END   OF ITAB.

DATA: NUM_CHECK TYPE I.

DATA: NUM2(2) TYPE N.

DATA: NUM(1) TYPE N.

DATA: OFFSET TYPE I.

PARAMETERS: P_TIMES TYPE I.

DO P_TIMES TIMES.

   SORT ITAB BY KEY DESCENDING.

   READ TABLE ITAB INDEX 1.

   IF SY-SUBRC <> 0.

     ITAB-KEY = '01'.

   ELSE.

     IF ITAB-KEY CO '0123456789'.

       MOVE ITAB-KEY TO NUM_CHECK.

       IF NUM_CHECK < 99.

         NUM_CHECK = NUM_CHECK + 1.

         MOVE NUM_CHECK TO NUM2.

         MOVE NUM2      TO ITAB-KEY.

       ELSE.

         ITAB-KEY = 'A1'.

       ENDIF.

     ELSE.

       MOVE ITAB-KEY+1 TO NUM.

       IF NUM < 9.

         NUM = NUM + 1.

         ITAB-KEY+1(1) = NUM.

       ELSE.

         OFFSET = OFFSET + 1.

         ITAB-KEY(1) = SY-ABCDE+OFFSET(1).

         ITAB-KEY+1(1) = '1'.

       ENDIF.

     ENDIF.

   ENDIF.

   APPEND ITAB.

ENDDO.

SORT ITAB BY KEY.

LOOP AT ITAB.

   WRITE: / ITAB-KEY.

ENDLOOP.

Max

0 Kudos

I marked it as correct as I ran it and gave the output I wanted, but what if it wasn't from A1-A9 and instead it was from A1 to AZ?

0 Kudos

The logic is the same, but it needs to check the second char:


DATA: BEGIN OF ITAB OCCURS 0,

         KEY(2) TYPE C,

        END   OF ITAB.

PARAMETERS: P_TIMES TYPE I.

DO P_TIMES TIMES.

   SORT ITAB BY KEY DESCENDING.

   READ TABLE ITAB INDEX 1.

   IF SY-SUBRC <> 0.

     ITAB-KEY = '01'.

   ELSE.

     IF ITAB-KEY CO '0123456789'.

       PERFORM NUM_CHECK USING ITAB-KEY 99.

     ELSE.

       IF ITAB-KEY+1(1) CO '0123456789'.

         PERFORM NUM_CHECK USING ITAB-KEY+1(1) 9.

       ELSE.

         IF ITAB-KEY+1(1) <> 'Z'.

           PERFORM CHECK_ABC USING ITAB-KEY+1(1) SPACE.

         ELSE.

           PERFORM CHECK_ABC USING ITAB-KEY(1) 'X'.

         ENDIF.

       ENDIF.

     ENDIF.

   ENDIF.

   APPEND ITAB.

ENDDO.

SORT ITAB BY KEY.

LOOP AT ITAB.

   WRITE: / ITAB-KEY.

ENDLOOP.


FORM NUM_CHECK  USING    P_IN P_MAX TYPE I.

   DATA: NUM(2) TYPE N.

   DATA: NUM_CHECK TYPE I.

   MOVE P_IN TO NUM_CHECK.

   IF NUM_CHECK < P_MAX.

     NUM_CHECK = NUM_CHECK + 1.

     MOVE NUM_CHECK TO NUM.

     CASE P_MAX.

       WHEN 9MOVE NUM+1 TO ITAB-KEY+1.

       WHEN 99. MOVE NUM   TO ITAB-KEY.

     ENDCASE.

   ELSE.

     CASE P_MAX.

       WHEN 9ITAB-KEY+1(1) = 'A'.

       WHEN 99. ITAB-KEY      = 'A1'.

     ENDCASE.

   ENDIF.

ENDFORM.         


FORM CHECK_ABC  USING    P_IN

                          P_START.

   DATA: OFFSET TYPE I.

   FIND P_IN IN SY-ABCDE MATCH OFFSET OFFSET.

   OFFSET    = OFFSET + 1.

   P_IN      = SY-ABCDE+OFFSET(1).

   CHECK P_START = 'X'.

   ITAB-KEY+1(1) = 1.

ENDFORM.