日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ABAP中的Table Control编程

發(fā)布時(shí)間:2025/3/20 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP中的Table Control编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SAP中,Table Control是在Screen中用的最廣泛的控件之一了,可以實(shí)現(xiàn)對(duì)多行數(shù)據(jù)的編輯。 簡(jiǎn)單來(lái)說(shuō),Table Control是一組屏幕元素在Screen上的重復(fù)出現(xiàn),這就是它與普通屏幕元素的區(qū)別。 如果我們對(duì)一個(gè)Table Control定義其內(nèi)表為itab,工作區(qū)域?yàn)閣a。那么在PBO中,系統(tǒng)將逐一取itab的某行到wa,然后將wa的內(nèi)容轉(zhuǎn)換成屏幕元素,即Table Control的一行,如此反復(fù)。 換句話說(shuō),Table Control的每一行是跟wa交互的,與itab沒(méi)有直接的關(guān)聯(lián)。 反過(guò)來(lái)在PAI中,系統(tǒng)將根據(jù)Table Control的錄入情況,逐行取數(shù)據(jù)到wa(前提是該行的內(nèi)容不為空),然后我們即可根據(jù)wa的內(nèi)容往itab修改或添加一行記錄。 1. 如何設(shè)置TC的行數(shù) 如果我們定義了TC的名稱為tc_0100,則TC向?qū)⑸扇缦乱恍写a: CONTROLS: tc_0100 TYPE TABLEVIEW USING SCREEN 0100. 調(diào)試可知,tc_0100是個(gè)Deep Structure,擁有很多屬性,它實(shí)現(xiàn)了對(duì)表格控件的所有屬性的封裝。 這里我們先介紹屬性:lines。lines代表該表控件一共有多少行可供用戶查看或輸入。 如果是查看狀態(tài),則一般可為其賦值LINES( itab )。如果是編輯狀態(tài),為了允許用戶添加條目,則必須大于itab的行數(shù)。 而如果TC的該屬性小于內(nèi)表行數(shù)呢?則只有內(nèi)表中的前面幾行可以顯示,后面的內(nèi)容將不會(huì)出現(xiàn)在SCREEN中,當(dāng)然實(shí)際中我們不會(huì)這么操作。 2. 如何設(shè)置TC中某單元格編輯與否 對(duì)于普通的屏幕元素,我們都很清楚,用LOOP AT SCREEN可以實(shí)現(xiàn)。對(duì)于TC,當(dāng)然也是一樣的。 TC向?qū)?huì)生成如下的Screen Flow Logic: LOOP AT itab INTO wa WITH CONTROL tc_0100 CURSOR tc_0100-current_line.
??? MODULE tc_0100_change_field_attr.
? ENDLOOP. 這是什么意思呢?事實(shí)上,如果我們?cè)O(shè)置了tc_0100-lines = 50,那么該Module將被執(zhí)行50次。
所以,只要在tc_0100_change_field_attr中添加LOOP AT SCREEN即可,如下: MODULE tc_0100_change_field_attr OUTPUT.
? LOOP AT SCREEN.
??? CASE screen-name.
????? WHEN 'ITAB-KEYFELD'.
??????? IF tc_0100-current_line > db_num.
????????? screen-input = '1'.
??????? ELSE.
????????? screen-input = '0'.
??????? ENDIF.
????? WHEN OTHERS.
??? ENDCASE.
??? MODIFY SCREEN.
? ENDLOOP.
ENDMODULE. 3. 如何更新我們內(nèi)表的數(shù)據(jù) 上面已經(jīng)說(shuō)過(guò),在PAI處理過(guò)程中,系統(tǒng)將根據(jù)逐行讀取TC的數(shù)據(jù),填充到wa中,而我們的itab與屏幕元素其實(shí)沒(méi)有直接的關(guān)聯(lián),所以簡(jiǎn)單而言,可以如下編寫(xiě)代碼: MODULE tc_0100_modify INPUT.
??? IF tc_0100-current_line <= LINES(?itab ).
????? MODIFY?itab FROM?wa INDEX tc_0100-current_line.
??? ELSE.
????? APPEND?wa TO itab.
??? ENDIF.
? ENDMODULE. 前面說(shuō)過(guò),如果tc_0100-lines = 50,那么Module tc_0100_change_field_attr將被執(zhí)行50次。 那么這里的Module tc_0100_modify 是不是也是50次呢?答案是<=50次,這是因?yàn)?#xff0c;如果TC中某行完全為空的話,系統(tǒng)是不可能調(diào)用tc_0100_modify的,換句話說(shuō),此時(shí)TC中的該行將視同不存在。 上篇講了Table Control的基本功能,現(xiàn)在繼續(xù)討論它在其他方面的一些設(shè)置。 4,滾動(dòng)到某行某列 如果我們希望,屏幕顯示后展示在用戶面前的最上端或者左端是表內(nèi)容中的某行某列,則應(yīng)該修改變量top_line和left_col的值。一般可在PBO的tc_0100_change_tc_attr里設(shè)置: tc_0100-top_line = 3. tc_0100-left_col = 3. 后面left_col語(yǔ)句起作用的前提是,內(nèi)表的字段較多,導(dǎo)致表控件寬度不夠,確有左右滾動(dòng)的必要。 5,獲取鼠標(biāo)所在位置 這里要用GET CURSOR語(yǔ)句,比如 DATA:?l_line TYPE i,
????? l_field TYPE screen-name. GET CURSOR FIELD l_field LINE l_line.
這樣就取得了鼠標(biāo)在內(nèi)表的所在行以及字段名。不過(guò)要注意的是,如果希望映射到itab,那可別忘了top_line。正確讀取鼠標(biāo)所在條目對(duì)應(yīng)于內(nèi)表哪行數(shù)據(jù)的語(yǔ)句是: GET CURSOR LINE l_line. l_line = l_line + tc_0100-top_line - 1. READ TABLE itab INTO wa INDEX l_line. 與此類似,希望鼠標(biāo)定位于內(nèi)表中某單元格的語(yǔ)句是SET CURSOR FIELD l_field LINE l_line. 6,設(shè)置固定列,設(shè)置行選擇 有時(shí)我們希望Table Control的左邊幾列(一般是關(guān)鍵字段),它們?cè)谄聊簧鲜枪潭ǖ?#xff0c;可以方便用戶的閱讀。要怎么設(shè)置呢?首先我們肯定會(huì)想到字段的屬性中去找,可惜沒(méi)找到。 其實(shí)這是Table Control本身的一個(gè)屬性,我們只能定義最左邊的某些列不可滾動(dòng)。在Screen Layout中,雙擊Table Control的右上角,彈出“表控制”屬性,即可設(shè)置:
這里也可以看到我們對(duì)表控件的行選擇進(jìn)行了設(shè)置,允許多重選擇,同時(shí)選中與否的信息將更新到wa的mark字段,mark一般定義成c(1)。 7,如何隱藏某列 隱藏屏幕字段,我們首先想到的肯定是LOOP AT SCREEN,設(shè)置ACTIVE或INVISIBLE的字段值。可惜測(cè)試后,發(fā)現(xiàn)行不通。正確的做法是,通過(guò)編程修改tabctrl-cols下的某字段可見(jiàn)長(zhǎng)度。 DATA:?l_hide TYPE c, ls_col LIKE LINE OF tc_0100-cols. LOOP AT tc_0100-cols INTO ls_col WHERE screen-name = 'WA-FIELD2'.
? IF l_hide IS INITIAL.
??? ls_col-vislength = 6.
? ELSE.
??? ls_col-vislength = 0.
? ENDIF.
? MODIFY tc_0100-cols FROM ls_col.
ENDLOOP.

總結(jié)

以上是生活随笔為你收集整理的ABAP中的Table Control编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。