Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

how can validate tablecontrol fields while inserting records?

Former Member
0 Likes
800

hi, all,

my requirement in table control iam entering some records in that some fields are not in format or already exist in database .so when i press enter i should display the error message and cursor is placed where the record field is from starting .If I correct and press enter cusor is placed next error automatically

so how can achieve this please give me any suggestion and any samplecode

satheesh.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
776

Hi

U need to manage the control into the loop of PAI

PROCESS PAI.

  LOOP AT ITAB.
     CHAIN.
          FIELDS: FIELD1,
                       FIELD2,
                       FIELDN  MODULE CHECK_FIELDS.
     ENDCHAIN.
  ENDLOOP.

MODULE CHECK_FIELDS.
   
   IF FIELD1 = .......
       FIELDN = ....
     MESSAGE E208(00) WITH 'Error'.
  ENDIF.
ENDMODULE.

Max

9 REPLIES 9
Read only

Former Member
0 Likes
776

CHAIN...ENDCHAIN should solve your purpose. You will need to write this in the PAI of your screen. For further details on the keyword please hit the F1 key on your ABAP editor for the keyword CHAIN.

Hope this helps.

Sudha

Read only

Former Member
0 Likes
777

Hi

U need to manage the control into the loop of PAI

PROCESS PAI.

  LOOP AT ITAB.
     CHAIN.
          FIELDS: FIELD1,
                       FIELD2,
                       FIELDN  MODULE CHECK_FIELDS.
     ENDCHAIN.
  ENDLOOP.

MODULE CHECK_FIELDS.
   
   IF FIELD1 = .......
       FIELDN = ....
     MESSAGE E208(00) WITH 'Error'.
  ENDIF.
ENDMODULE.

Max

Read only

0 Likes
776

hi max ,

thanks for replying my question.I have some doubts please replay me.

my code is like this,

in PAI

LOOP AT g_vcontrol_itab.

CHAIN.

FIELD zcust_call_rec-kunnr.

FIELD zcust_call_rec-budat.

FIELD zcust_call_rec-code.

FIELD zcust_call_rec-remarks.

MODULE vcontrol_modify ON CHAIN-REQUEST.

MODULE valid_input_300.

ENDCHAIN.

ENDLOOP.

MODULE vcontrol_modify INPUT.

MOVE-CORRESPONDING zcust_call_rec TO g_vcontrol_wa.

APPEND g_vcontrol_wa TO g_vcontrol_itab." index vcontrol-current_line

  • MODIFY G_VCONTROL_ITAB

  • FROM G_VCONTROL_WA

  • INDEX VCONTROL-CURRENT_LINE.

ENDMODULE. "VCONTROL_MODIFY INPUT

&----


*& Module valid_input_300 INPUT

&----


  • text

----


MODULE valid_input_300 INPUT.

DATA: g_vcontrol_itab1 LIKE TABLE OF zcust_call_rec,

g_vcontrol_wa1 LIKE g_vcontrol_wa.

SELECT * FROM zcust_call_rec

INTO CORRESPONDING FIELDS OF TABLE g_vcontrol_itab1

FOR ALL ENTRIES IN g_vcontrol_itab

WHERE kunnr = g_vcontrol_itab-kunnr AND budat = g_vcontrol_itab-budat.

IF sy-subrc = 0.

MESSAGE i001(0) WITH 'not'.

ENDIF.

CLEAR SY-UCOMM.

ENDMODULE. " valid_input_300 INPUT

my requirement already i posted. so please give me any modification i want to do.

satheesh.

Read only

0 Likes
776

Hi,


LOOP AT g_vcontrol_itab.
CHAIN.
FIELD zcust_call_rec-kunnr.
FIELD zcust_call_rec-budat.
FIELD zcust_call_rec-code.
FIELD zcust_call_rec-remarks.
MODULE vcontrol_modify ON CHAIN-REQUEST.
MODULE valid_input_300.
ENDCHAIN.
ENDLOOP.

MODULE vcontrol_modify INPUT.
MOVE-CORRESPONDING zcust_call_rec TO g_vcontrol_wa.
APPEND g_vcontrol_wa TO g_vcontrol_itab." index vcontrol-current_line

* MODIFY G_VCONTROL_ITAB
* FROM G_VCONTROL_WA
* INDEX VCONTROL-CURRENT_LINE.
ENDMODULE. "VCONTROL_MODIFY INPUT

*&---------------------------------------------------------------------*
*& Module valid_input_300 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE valid_input_300 INPUT.

DATA: g_vcontrol_itab1 LIKE TABLE OF zcust_call_rec,
g_vcontrol_wa1 LIKE g_vcontrol_wa.

SELECT * FROM zcust_call_rec
INTO CORRESPONDING FIELDS OF TABLE g_vcontrol_itab1
FOR ALL ENTRIES IN g_vcontrol_itab
WHERE kunnr = g_vcontrol_itab-kunnr AND budat = g_vcontrol_itab-budat.

IF sy-subrc = 0.
 " Sort and check the number of entries in both tables
sort g_vcontrol_itab by kunnar budat.
sort g_vcontrol_itab1 by kunnar budat.
if lines(g_vcontrol_itab) = lines(g_vcontrol_itab1).
 "All values are there in Database table
else.
 "Raise message. 
endif.
MESSAGE i001(0) WITH 'not'.
ENDIF.
CLEAR SY-UCOMM.
ENDMODULE. " valid_input_300 INPUT

Regards,

Sesh

Read only

0 Likes
776

hi sesh,

thanks for replaying .

my requirement is i want to place the cusor where the record is error after displaying message?

help me please.

satheesh.

Read only

0 Likes
776

Hi

The cursor is automatically setted in the first field, where the error occurs, managed into FIELDS statament:

so if you used:

FIELDS: FIELD1 MODULE CHECK_ERROR.

The cursor will be placed in field FIELD1

CHAIN.
    FIELDS: FIELDA,
                 FIELDB,
                 FIELDC MODULE CHECK_ERROR.
ENDCHAIN.

The cursor will be placed in field FIELDA.

The FIELDS statament keeps the field available to change the input, all others fields will be greyd after raising an error message: u can't decide where the cursor has to be placed, it'll be placed in the first field in FIELDS statament.

Max

Read only

0 Likes
776

max ,

please give any sample code in that module for validations.

satheesh.

Read only

0 Likes
776

Hi

See the modification in your code:

LOOP AT g_vcontrol_itab.
     CHAIN. FIELD zcust_call_rec-kunnr.
                 FIELD zcust_call_rec-budat.
                 FIELD zcust_call_rec-code.
                 FIELD zcust_call_rec-remarks.
                 MODULE valid_input_300 ON CHAIN-REQUEST.
     ENDCHAIN.
    MODULE vcontrol_modify 
ENDLOOP.

MODULE vcontrol_modify INPUT.
    MOVE-CORRESPONDING zcust_call_rec TO g_vcontrol_wa.
    MODIFY  g_vcontrol_itab from g_vcontrol_wa index vcontrol-current_line.
    IF SY-SUBRC <> 0.
      APPEND g_vcontrol_wa TO g_vcontrol_itab.
    ENDIF.
ENDMODULE. "VCONTROL_MODIFY INPUT

MODULE valid_input_300 INPUT.
  DATA: g_vcontrol_itab1 LIKE TABLE OF zcust_call_rec,
             g_vcontrol_wa1 LIKE g_vcontrol_wa.

  SELECT KUNNR FROM zcust_call_rec INTO zcust_call_rec-kunnr 
        WHERE kunnr = zcust_call_rec-kunnr AND 
              AND budat = zcust_call_rec-budat.
   IF sy-subrc = 0.
      MESSAGE E001(0) WITH 'Customer exists in zcust_call_rec'.
   ENDIF.
ENDMODULE. " valid_input_300 INPUT

In this case only the line where the error occurs is available for modification and the cursor will be placed in zcust_call_rec-kunnr.

Max

Read only

gopi_narendra
Active Contributor
0 Likes
776

  loop with control TABCTRL.
    chain.
      field: <field1>,
             <field2>......
      module READ_TABCTRL.
    endchain.
  endloop.

Regards

Gopi