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.

 

posted @ 2022-05-11 18:09  ultraluck  阅读(111)  评论(0)    收藏  举报