sy-index和sy-tabix的区别

本文详细解析了sap系统中sy-index和sy-tabix的区别,包括它们的功能、用途及如何在实际编程中应用。


通过这个程序,让我清楚的知道了sy-index和sy-tabix的区别。

sy-index 是系统变量,在sap系统里的描述是:Loop Index-->这里我理解loop仅仅是循环的意思,并不是sap abap中loop。也就是说sy-index只是记录程序当前循环的次数,但是,对于sap abap中的loop循环sy-index是无效的,值是0.

sy-tabix 在sap系统里的描述是:Index of Internal Tables -->sy-tabix记录当前操作的是内表中的第几行数据,内表是不定的,取决于程序现在正在操作的内表。


REPORT  ZJAMIE_TEST.

DATA:  BEGIN OF t_mara OCCURS 0,
  matnr type matnr,
  MTART type MTART,
  END OF t_mara.


SELECT MATNR
       MTART
  INTO TABLE t_mara
  FROM MARA
  UP TO 10 ROWS
WHERE matnr BETWEEN '0000000000Z0000001' and '0000000000Z0000015'.

LOOP AT T_MARA.
  WRITE: / '           sy-index','  sy-tabix'.
  DO TIMES.
     WRITE: / 'DO-->', sy-index,sy-tabix , '-->Do'.
  ENDDO.
  WRITE '-------------------------------------------'.
  WRITE: / 'RB-->',sy-index,sy-tabix,'-->RB'.
  WRITE '-------------------------------------------'.
  read TABLE t_mara with key matnr = '0000000000Z0000009'.
  WRITE: / 'RA-->',sy-index,sy-tabix,'-->RA'.

  write: / 'RA-->','sy-subrc:',sy-subrc,'-->RA'.
ENDLOOP.

以下程式兩組radion 只能兩擇一,請修正。report zt . type-pools: vrm, slis, soi,ole2. *--------------------------------------------------------------------- * 1. 內表結構 *--------------------------------------------------------------------- TYPES: BEGIN OF ty_data,          lifnr       TYPE char10,   " 供應商編號          check1(1)   TYPE c,          bank1_text  TYPE char40,          check2(1)   TYPE c,          bank2_text  TYPE char40,        END OF ty_data. DATA: gt_data     TYPE STANDARD TABLE OF ty_data,       gs_data     TYPE ty_data. *--------------------------------------------------------------------- * 2. LVC 欄位目錄 / Layout *--------------------------------------------------------------------- DATA: gt_fieldcat TYPE lvc_t_fcat,       gs_fieldcat TYPE lvc_s_fcat,       gs_layout   TYPE lvc_s_layo. DATA: gt_dropdown TYPE lvc_t_drop,       gs_drop     TYPE lvc_s_drop. *--------------------------------------------------------------------- * 3. 從 ZVBANK 撈資料並組合 BANK TEXT *--------------------------------------------------------------------- FORM get_data_from_zvbank.   DATA: lt_zvbank TYPE TABLE OF zvbank,         ls_zvbank TYPE zvbank.   " 直接抓 ZVBANK   SELECT * FROM zvbank INTO TABLE lt_zvbank UP TO 50 ROWS.   LOOP AT lt_zvbank INTO ls_zvbank.     CLEAR gs_data.     " LIFNR 用 BANKL 當範例顯示     gs_data-lifnr = ls_zvbank-bankl.     " BANK1_TEXT / BANK2_TEXT 都用 BANKL + BANKN 組合     CONCATENATE ls_zvbank-bankl ls_zvbank-bankn                 INTO gs_data-bank1_text SEPARATED BY space.     CONCATENATE ls_zvbank-bankl ls_zvbank-bankn                 INTO gs_data-bank2_text SEPARATED BY space.     APPEND gs_data TO gt_data.   ENDLOOP. ENDFORM. *--------------------------------------------------------------------- * 4. 建立欄位目錄 *--------------------------------------------------------------------- FORM build_fieldcat.   CLEAR gt_fieldcat.   CLEAR gs_fieldcat.   gs_fieldcat-fieldname = 'LIFNR'.   gs_fieldcat-scrtext_m = '供應商'.   APPEND gs_fieldcat TO gt_fieldcat.   CLEAR gs_fieldcat.   gs_fieldcat-fieldname = 'CHECK1'.   gs_fieldcat-checkbox  = 'X'.   gs_fieldcat-edit      = 'X'.   gs_fieldcat-scrtext_m = '選項 1'.   APPEND gs_fieldcat TO gt_fieldcat.   CLEAR gs_fieldcat.   gs_fieldcat-fieldname = 'BANK1_TEXT'.   gs_fieldcat-scrtext_m = '銀行1說明'.   APPEND gs_fieldcat TO gt_fieldcat.   CLEAR gs_fieldcat.   gs_fieldcat-fieldname = 'CHECK2'.   gs_fieldcat-checkbox  = 'X'.   gs_fieldcat-edit      = 'X'.   gs_fieldcat-scrtext_m = '選項 2'.   APPEND gs_fieldcat TO gt_fieldcat.   CLEAR gs_fieldcat.   gs_fieldcat-fieldname = 'BANK2_TEXT'.   gs_fieldcat-scrtext_m = '銀行2說明'.   APPEND gs_fieldcat TO gt_fieldcat. ENDFORM. *--------------------------------------------------------------------- * 5. Layout 設定 *--------------------------------------------------------------------- FORM set_layout.   CLEAR gs_layout.   gs_layout-zebra = 'X'.         " 交錯底色   gs_layout-cwidth_opt = 'X'.    " 欄寬最佳化 ENDFORM. *--------------------------------------------------------------------- * 7. USER_COMMAND:兩組互斥 *--------------------------------------------------------------------- FORM user_command USING r_ucomm LIKE sy-ucomm                       rs_selfield TYPE slis_selfield.   DATA lv_index TYPE sy-tabix.   IF r_ucomm = 'ENTER' OR r_ucomm = '&IC1'.     " --- CHECK1 互斥     CLEAR lv_index.     LOOP AT gt_data INTO gs_data.       IF gs_data-check1 = 'X' AND lv_index IS INITIAL.         lv_index = sy-tabix.       ELSEIF gs_data-check1 = 'X' AND NOT lv_index IS  INITIAL.         gs_data-check1 = space.         MODIFY gt_data FROM gs_data INDEX sy-tabix.       ENDIF.     ENDLOOP.     " --- CHECK2 互斥     CLEAR lv_index.     LOOP AT gt_data INTO gs_data.       IF gs_data-check2 = 'X' AND lv_index IS INITIAL.         lv_index = sy-tabix.       ELSEIF gs_data-check2 = 'X' AND NOT lv_index IS INITIAL.         gs_data-check2 = space.         MODIFY gt_data FROM gs_data INDEX sy-tabix.       ENDIF.     ENDLOOP.     " --- 同列不能雙選     LOOP AT gt_data INTO gs_data.       IF gs_data-check1 = 'X' AND gs_data-check2 = 'X'.         " 清掉另一個         gs_data-check2 = space.         MODIFY gt_data FROM gs_data INDEX sy-tabix.       ENDIF.     ENDLOOP.     rs_selfield-refresh = 'X'.   ENDIF. ENDFORM. *--------------------------------------------------------------------- * 8. 主程式 *--------------------------------------------------------------------- START-OF-SELECTION.   PERFORM get_data_from_zvbank.   PERFORM build_fieldcat.   PERFORM set_layout.   data : gd_repid like sy-repid. gd_repid = sy-repid.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'     EXPORTING       i_callback_program       = gd_repid       i_callback_user_command  = 'USER_COMMAND'       i_callback_pf_status_set = 'FRM_SET_STATUS'       is_layout_lvc            = gs_layout       it_fieldcat_lvc          = gt_fieldcat       it_drop_down_list        = gt_dropdown     TABLES       t_outtab                 = gt_data. if sy-subrc <> 0.   message id sy-msgid type sy-msgty number sy-msgno           with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. *&---------------------------------------------------------------------* *&       Form  frm_set_status *&---------------------------------------------------------------------* form frm_set_status using rt_extab type slis_t_extab.   clear: rt_extab.   refresh: rt_extab.   set pf-status 'ALV_STATUS'. endform.
08-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值