sap TC 联动 实现例子
tc 联动两种实现方式
一.tc f4联动实现
PROCESS ON VALUE-REQUEST. FIELD gw_tc1-zmpgg MODULE f4_zmpgg. *&---------------------------------------------------------------------* *& Module F4_ZGGDW INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE f4_zmpgg INPUT. DATA:lt_return LIKE TABLE OF ddshretval, ls_return LIKE ddshretval. DATA: it_dynpfields TYPE STANDARD TABLE OF dynpread, wa_dynpfields TYPE dynpread. DATA: tabix TYPE sy-tabix, lv_matnr TYPE /sapapo/matkey-matnr, v_line TYPE sy-stepl. GET CURSOR LINE v_line. tabix = ztc100-top_line + v_line - 1. READ TABLE gt_tc1 ASSIGNING <fs_tc1> INDEX tabix. lv_matnr = |{ <fs_tc1>-productno ALPHA = IN }|. * 第一步:根据交货单对应行的商品编码PRODUCTNO查/SAPAPO/MATKEY的产品ID标识MATID, * 然后根据产品ID取计量单位视图/SAPAPO/MARM的有效标识ZZVALID_IND=‘X’的单位MEINH,以及对应单位的规格描述ZZSPEC_TEXT; SELECT zzspec_text , meinh , matnr , umrez , umren FROM /sapapo/matkey AS a INNER JOIN /sapapo/marm AS b ON a~matid = b~matid INTO TABLE @DATA(lt_marm) WHERE matnr = @lv_matnr AND zzvalid_ind = 'X' . *第二步:然后根据商品PRODUCTNO查ZEWT2006的配送规格级别SPECLV=‘2(中包)’的所有单位ZEWT2006-MEINH; SELECT * FROM zewt2006 INTO TABLE @DATA(lt_zewt2006) WHERE matnr = @lv_matnr AND speclv = '2'. LOOP AT lt_zewt2006 INTO DATA(ls_zewt2006). DELETE lt_marm WHERE meinh = ls_zewt2006-meinh. ENDLOOP. CLEAR:lt_return. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING * DDIC_STRUCTURE = ' ' retfield = 'ZZSPEC_TEXT' * PVALKEY = ' ' dynpprog = sy-repid dynpnr = sy-dynnr * dynprofield = 'GW_TC1-ZMPGG' * STEPL = 0 * WINDOW_TITLE = * VALUE = ' ' value_org = 'S' * MULTIPLE_CHOICE = ' ' * DISPLAY = ' ' * CALLBACK_PROGRAM = ' ' * CALLBACK_FORM = ' ' * CALLBACK_METHOD = * MARK_TAB = * IMPORTING * USER_RESET = TABLES value_tab = lt_marm * FIELD_TAB = return_tab = lt_return * DYNPFLD_MAPPING = EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. READ TABLE lt_return INTO ls_return INDEX 1. <fs_tc1>-zmpgg = ls_return-fieldval. READ TABLE lt_marm INTO DATA(ls_marm) WITH KEY zzspec_text = <fs_tc1>-zmpgg. IF sy-subrc = 0. <fs_tc1>-zggdw = ls_marm-meinh. <fs_tc1>-zhs = ls_marm-umrez / ls_marm-umren. MOVE-CORRESPONDING <fs_tc1> TO GW_TC1. * MODIFY gt_tc1 FROM gw_tc1 INDEX tabix. CLEAR: it_dynpfields. CLEAR: wa_dynpfields. wa_dynpfields-stepl = tabix. wa_dynpfields-fieldname = 'GW_TC1-ZGGDW'. wa_dynpfields-fieldvalue = ls_marm-meinh. APPEND wa_dynpfields TO it_dynpfields. wa_dynpfields-stepl = tabix. wa_dynpfields-fieldname = 'GW_TC1-ZMPGG'. wa_dynpfields-fieldvalue = <fs_tc1>-zmpgg. APPEND wa_dynpfields TO it_dynpfields. wa_dynpfields-stepl = tabix. wa_dynpfields-fieldname = 'GW_TC1-ZHS'. wa_dynpfields-fieldvalue = <fs_tc1>-zhs . APPEND wa_dynpfields TO it_dynpfields. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = it_dynpfields EXCEPTIONS invalid_abapworkarea = 1 invalid_dynprofield = 2 invalid_dynproname = 3 invalid_dynpronummer = 4 invalid_request = 5 no_fielddescription = 6 undefind_error = 7 OTHERS = 8. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDIF. ENDMODULE.
二 :tc field 联动实现
1 PROCESS BEFORE OUTPUT. 2 3 MODULE ztc100_change_tc_attr. 4 5 LOOP AT gt_tc1 6 INTO gw_tc1 7 WITH CONTROL ztc100 8 CURSOR ztc100-current_line. 9 MODULE ztc100_get_lines. 10 11 ENDLOOP. 12 13 MODULE status_0100. 14 MODULE REFRESH_TC_0100. 15 PROCESS AFTER INPUT. 16 17 LOOP AT gt_tc1. 18 CHAIN. 19 FIELD gw_tc1-docno. 20 * FIELD GW_TC1-ITEMNO. 21 FIELD gw_tc1-productno. 22 FIELD gw_tc1-zmpgg. 23 FIELD gw_tc1-zggdw. 24 FIELD gw_tc1-batchno 25 MODULE batchno_check ON REQUEST. 26 FIELD gw_tc1-maktx. 27 FIELD gw_tc1-zqty. 28 FIELD gw_tc1-zmpsl 29 MODULE change_mpsl ON REQUEST. 30 FIELD gw_tc1-zldsl 31 MODULE change_ldsl ON REQUEST. 32 FIELD gw_tc1-nlpla. 33 FIELD gw_tc1-nlplas. 34 FIELD gw_tc1-message. 35 MODULE ztc100_modify ON CHAIN-REQUEST. 36 ENDCHAIN. 37 38 FIELD gw_tc1-zcel 39 MODULE ztc100_mark ON REQUEST. 40 *** add 20220511 联动* begin 41 FIELD gw_tc1-zsqty 42 MODULE zsqty_check ON REQUEST. 43 *** add 20220511 联动* end 44 ENDLOOP. 45 MODULE ztc100_user_command. 46 47 MODULE user_command_0100. 48 49 对应联动实现 50 51 *&---------------------------------------------------------------------* 52 *& Module ZSQTY_CHECK INPUT 53 *&---------------------------------------------------------------------* 54 * text 55 *----------------------------------------------------------------------* 56 MODULE zsqty_check INPUT. 57 GET CURSOR LINE v_line. 58 tabix = ztc100-top_line + v_line - 1. 59 READ TABLE gt_tc1 ASSIGNING <fs_tc1> INDEX tabix. 60 IF <fs_tc1>-message IS INITIAL . 61 <fs_tc1>-zsqty = gw_tc1-zsqty. 62 <fs_tc1>-zmpsl = <fs_tc1>-zzqty * <fs_tc1>-zhs + <fs_tc1>-zsqty. 63 ENDIF. 64 CLEAR: wa_dynpfields,it_dynpfields. 65 wa_dynpfields-fieldname = 'GW_TC1-ZSQTY'. 66 wa_dynpfields-fieldvalue = gw_tc1-zsqty. 67 APPEND wa_dynpfields TO it_dynpfields. 68 69 wa_dynpfields-fieldname = 'GW_TC1-ZMPSL'. 70 wa_dynpfields-fieldvalue = <fs_tc1>-zmpsl. 71 APPEND wa_dynpfields TO it_dynpfields. 72 73 CALL FUNCTION 'DYNP_VALUES_UPDATE' 74 EXPORTING 75 dyname = sy-repid 76 dynumb = sy-dynnr 77 TABLES 78 dynpfields = it_dynpfields 79 EXCEPTIONS 80 invalid_abapworkarea = 1 81 invalid_dynprofield = 2 82 invalid_dynproname = 3 83 invalid_dynpronummer = 4 84 invalid_request = 5 85 no_fielddescription = 6 86 undefind_error = 7 87 OTHERS = 8. 88 IF sy-subrc <> 0. 89 * Implement suitable error handling here 90 ENDIF. 91 ENDMODULE.
tc 隐藏字段不显示
1 PROCESS BEFORE OUTPUT. 2 3 MODULE ztc100_change_tc_attr. 4 5 LOOP AT gt_tc1 6 INTO gw_tc1 7 WITH CONTROL ztc100 8 CURSOR ztc100-current_line. 9 MODULE ztc100_get_lines. 10 11 ENDLOOP. 12 13 MODULE status_0100. 14 MODULE REFRESH_TC_0100. 15 实现隐藏字段逻辑 16 ztc100 定义 17 CONTROLS: ztc100 TYPE TABLEVIEW USING SCREEN 0100. 18 *&---------------------------------------------------------------------* 19 *& Module REFRESH_TC_0100 OUTPUT 20 *&---------------------------------------------------------------------* 21 * text 22 *----------------------------------------------------------------------* 23 MODULE refresh_tc_0100 OUTPUT. 24 REFRESH CONTROL 'ZTC100' FROM SCREEN sy-dynnr. 25 DATA: ls_col LIKE LINE OF ztc100-cols. 26 LOOP AT ztc100-cols INTO ls_col WHERE screen-name = 'GW_TC1-ZHS'. 27 ls_col-vislength = 0. 28 MODIFY ztc100-cols FROM ls_col. 29 ENDLOOP. 30 ENDMODULE.

浙公网安备 33010602011771号