‎2007 Jul 31 8:35 AM
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.
‎2007 Jul 31 8:38 AM
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
‎2007 Jul 31 8:37 AM
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
‎2007 Jul 31 8:38 AM
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
‎2007 Jul 31 9:17 AM
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.
‎2007 Jul 31 9:23 AM
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
‎2007 Jul 31 9:33 AM
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.
‎2007 Jul 31 9:42 AM
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
‎2007 Jul 31 9:55 AM
max ,
please give any sample code in that module for validations.
satheesh.
‎2007 Jul 31 10:05 AM
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 INPUTIn 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
‎2007 Jul 31 8:40 AM
loop with control TABCTRL.
chain.
field: <field1>,
<field2>......
module READ_TABCTRL.
endchain.
endloop.
Regards
Gopi