We have one table for example ZTBMM007, this table has several columns, where there are 2 columns i.e HKONT (GL Account) and TEXT (Description GL Account). For the case is we want after filling HKONT then the TEXT column will be filled automatically.
The solution is we can use Table maintenance events.
1.First step you need create table maintenance view for your table via table maintenance generator. go to SE11 and enter your table for this sample we will use ZTBMM007 table and click change. Go to menu Utilities->Table Maintenance Generator .
2. Click menu Environment -> Modification -> Events. then create two FORM Routine with table maintenance events 01 and 02.
Source Code F_BEFORE_SAVE., populate field automatically only call when ACTION – NEW Entry or CHANGE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
TYPES: BEGIN OF ty_tcdrp, object TYPE cdobjectcl, reportname TYPE cdreport, END OF ty_tcdrp, BEGIN OF ty_view_tab, object TYPE cdobjectcl, tabname TYPE cdtabname, END OF ty_view_tab. DATA: lt_ptab TYPE STANDARD TABLE OF string, lv_prog TYPE string, lv_mess TYPE string, lv_sid TYPE string, lt_obj TYPE STANDARD TABLE OF ty_view_tab, lt_tcdrp TYPE STANDARD TABLE OF ty_tcdrp, lv_fugn TYPE funct_pool, lv_table TYPE cdtabname, lv_namesfunc TYPE namespace, lv_funcgroup TYPE progname, lv_namesprog TYPE namespace, lv_program TYPE progname, lrt_tabname TYPE RANGE OF tabname, lt_dd26v TYPE TABLE OF dd26v, lv_object TYPE cdobjectcl. DATA: f_index LIKE sy-tabix. DATA : lv_index1 TYPE sy-tabix, "Index for Table 'TOTAL' lv_index2 TYPE sy-tabix, "Index for Table 'EXTRACT' lr_data TYPE REF TO data, "Reference Data object lv_action TYPE char1, "Variable for View action lv_mark TYPE char1. "Variable for View mark FIELD-SYMBOLS: <lf_fval> TYPE any, "For field value <lf_fval1> TYPE any, "For field value <ls_str> TYPE any, "For data string <ls_xfrom> TYPE x, "Hexadecimal value of from value <ls_xto> TYPE x. "Hexadecimal value of to value " Get tabnames " DD: Interface for reading a view from the ABAP/4 Dictionary CALL FUNCTION 'DDIF_VIEW_GET' EXPORTING name = vim_view_name TABLES dd26v_tab = lt_dd26v EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc IS NOT INITIAL. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. IF lt_dd26v IS INITIAL. APPEND INITIAL LINE TO lrt_tabname ASSIGNING FIELD-SYMBOL(<lrs_tabname>). <lrs_tabname>-sign = 'I'. <lrs_tabname>-option = 'EQ'. <lrs_tabname>-low = vim_view_name. ELSE. SORT lt_dd26v BY tabname. DELETE ADJACENT DUPLICATES FROM lt_dd26v COMPARING tabname. "*- LOOP AT lt_dd26v INTO DATA(ls_dd26v). APPEND INITIAL LINE TO lrt_tabname ASSIGNING <lrs_tabname>. <lrs_tabname>-sign = 'I'. <lrs_tabname>-option = 'EQ'. <lrs_tabname>-low = ls_dd26v-tabname. ENDLOOP. ENDIF. "Added Last Changed by and Last Changed Date CREATE DATA lr_data TYPE (x_header-viewname). ASSIGN lr_data->* TO <ls_str>. LOOP AT total. CLEAR lv_index1. lv_index1 = sy-tabix. READ TABLE extract WITH KEY total. IF sy-subrc EQ 0. lv_index2 = sy-tabix. ELSE. CLEAR lv_index2. ENDIF. ASSIGN total TO <ls_xfrom> CASTING. ASSIGN <ls_str> TO <ls_xto> CASTING. <ls_xto> = <ls_xfrom>. MOVE: <action> TO lv_action, <mark> TO lv_mark. CASE <action>. WHEN neuer_eintrag OR aendern. ASSIGN COMPONENT 'AFNAMC' OF STRUCTURE <ls_str> TO <lf_fval>. IF sy-subrc = 0. ASSIGN COMPONENT 'AFNAM' OF STRUCTURE <ls_str> TO <lf_fval1>. SELECT SINGLE afnamc INTO <lf_fval> FROM ztbmm006 WHERE afnam = <lf_fval1>. IF sy-subrc NE 0. MESSAGE 'Please check your Requisitioner input' TYPE 'E'. vim_abort_saving = 'X'. ELSE. vim_abort_saving = ''. ENDIF. ENDIF. ASSIGN COMPONENT 'EKNAM' OF STRUCTURE <ls_str> TO <lf_fval>. IF sy-subrc = 0. ASSIGN COMPONENT 'EKGRP' OF STRUCTURE <ls_str> TO <lf_fval1>. SELECT SINGLE eknam INTO <lf_fval> FROM t024 WHERE ekgrp = <lf_fval1>. IF sy-subrc NE 0. MESSAGE 'Please check your purch.grp input' TYPE 'E'. vim_abort_saving = 'X'. ELSE. vim_abort_saving = ''. ENDIF. ENDIF. ASSIGN COMPONENT 'NAME1' OF STRUCTURE <ls_str> TO <lf_fval>. IF sy-subrc = 0. ASSIGN COMPONENT 'WERKS' OF STRUCTURE <ls_str> TO <lf_fval1>. SELECT SINGLE name1 INTO <lf_fval> FROM t001w WHERE werks = <lf_fval1>. IF sy-subrc NE 0. MESSAGE 'Please check your plant input' TYPE 'E'. vim_abort_saving = 'X'. ELSE. vim_abort_saving = ''. ENDIF. ENDIF. ASSIGN COMPONENT 'LTEXT' OF STRUCTURE <ls_str> TO <lf_fval>. IF sy-subrc = 0. ASSIGN COMPONENT 'KOSTL' OF STRUCTURE <ls_str> TO <lf_fval1>. SELECT SINGLE ltext INTO <lf_fval> FROM cskt WHERE kostl = <lf_fval1> AND kokrs = 'JSMR' AND spras = sy-langu. IF sy-subrc NE 0. MESSAGE 'Please check your cost ctr input' TYPE 'E'. vim_abort_saving = 'X'. ELSE. vim_abort_saving = ''. ENDIF. ENDIF. ENDCASE. CHECK <action> EQ aendern OR <action> EQ neuer_eintrag. CLEAR: total,extract. ASSIGN <ls_str> TO <ls_xfrom> CASTING. ASSIGN total TO <ls_xto> CASTING. <ls_xto> = <ls_xfrom>. MOVE : lv_action TO <action>, lv_mark TO <mark>. CONCATENATE total lv_action lv_mark INTO total. MODIFY total FROM total INDEX lv_index1. * modify extract if this is necessary CHECK lv_index2 GT 0. extract = total. MODIFY extract FROM extract INDEX lv_index2. ENDLOOP. |
Source Code F_AFTER_SAVE for COMMIT.
1 2 3 |
FORM f_after_save ##CALLED. COMMIT WORK AND WAIT. ENDFORM. |