Write an executable program which has a routine that receives an internal table and prints how many fields are blank by line (the type of table must have at least 4 fields).
Output must be generated as:
Line [line number] => [number of blank fields] + " blank fields"
Total: [total number of blank fields]
Solution:
REPORT z_abap101_062.
"---------------------------
" 1. Define Types
"---------------------------
TYPES: BEGIN OF ty_line,
id TYPE c LENGTH 10,
name TYPE string,
value TYPE i,
creation_date TYPE d,
END OF ty_line.
TYPES: ty_table TYPE STANDARD TABLE OF ty_line.
"---------------------------
" 2. Routine: Count Blank Fields
"---------------------------
FORM count_initial_fields_of_line USING us_table TYPE ty_table.
DATA lwa_line TYPE ty_line.
DATA lv_initial_field_total TYPE i.
DATA lv_initial_field TYPE i.
LOOP AT us_table INTO lwa_line.
CLEAR lv_initial_field.
" Check each field for blank/initial values
IF lwa_line-id IS INITIAL.
lv_initial_field = lv_initial_field + 1.
ENDIF.
IF lwa_line-name IS INITIAL.
lv_initial_field = lv_initial_field + 1.
ENDIF.
IF lwa_line-value IS INITIAL.
lv_initial_field = lv_initial_field + 1.
ENDIF.
IF lwa_line-creation_date IS INITIAL.
lv_initial_field = lv_initial_field + 1.
ENDIF.
" Print per line result
WRITE: / 'Line', sy-tabix, '=>', lv_initial_field, 'blank fields'.
" Add to total
lv_initial_field_total = lv_initial_field_total + lv_initial_field.
ENDLOOP.
" Print total count
WRITE: / 'Total:', lv_initial_field_total.
WRITE: / sy-uline.
ENDFORM. " count_initial_fields_of_line
"---------------------------
" 3. Start-of-Selection
"---------------------------
START-OF-SELECTION.
DATA itab TYPE ty_table.
DATA wa TYPE ty_line.
" Line 1: All fields filled
wa-id = '1'.
wa-name = 'John'.
wa-value = 50.
wa-creation_date = '20140727'.
APPEND wa TO itab.
CLEAR wa.
PERFORM count_initial_fields_of_line USING itab.
" Line 2: Missing creation_date
wa-id = '2'.
wa-name = 'Mary'.
wa-value = 20.
APPEND wa TO itab.
CLEAR wa.
PERFORM count_initial_fields_of_line USING itab.
" Line 3: Missing value & creation_date
wa-id = '3'.
wa-name = 'Max'.
APPEND wa TO itab.
CLEAR wa.
PERFORM count_initial_fields_of_line USING itab.
" Line 4: Only id filled
wa-id = '4'.
APPEND wa TO itab.
CLEAR wa.
PERFORM count_initial_fields_of_line USING itab.
Output: