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 9. MOVE NUM+1 TO ITAB-KEY+1.
WHEN 99. MOVE NUM TO ITAB-KEY.
ENDCASE.
ELSE.
CASE P_MAX.
WHEN 9. ITAB-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.