根据订单号加物料号 作为查询key
二分查询数据为下
DATA lv_index TYPE int4.
DATA lv_index2 TYPE i.
DATA lv_index3 TYPE int4.
DATA lv_index4 TYPE i.
REFRESH lt_resb.
SORT gt_resb BY aufnr matnr.
lt_resb = gt_resb.
DELETE ADJACENT DUPLICATES FROM lt_resb COMPARING aufnr matnr.
CLEAR:lv_index,lv_index2,lv_index3,lv_index4.
"二分查
LOOP AT lt_resb ASSIGNING FIELD-SYMBOL(<fs_resb>).
READ TABLE gt_resb INTO gs_resb WITH KEY aufnr = <fs_resb>-aufnr
matnr = <fs_resb>-matnr
BINARY SEARCH.
IF sy-subrc = 0.
IF lv_index = 0.
lv_index = sy-tabix. "第一次查找
ELSE.
lv_index2 = sy-tabix. "第二次查找
ENDIF.
ENDIF.
ENDLOOP.
"非二分查
LOOP AT lt_resb ASSIGNING <fs_resb>.
READ TABLE gt_resb INTO gs_resb WITH KEY aufnr = <fs_resb>-aufnr
matnr = <fs_resb>-matnr
.
IF sy-subrc = 0.
IF lv_index3 = 0.
lv_index3 = sy-tabix. "第一次查找
ELSE.
lv_index4 = sy-tabix. "第二次查找
ENDIF.
ENDIF.
ENDLOOP.
根据调试结果 可以发现 二分查询的行号索引 和普通查询的行号索引 一致
二分查询可能并不是单纯从中间取数
可能刚开始查数 从中间查扩展两边查询 但最后也做了其他处理 保证查询时 取到第一条符合条件的行号索引
换下另一种情况查询数据
结果一致