Look via debug, the initial value for a DATS type field is '00000000', IS INITIAL will check this value. I suppose space was input as initial value so it is displaying space at screen/on print.
DATA: datefield TYPE d VALUE space. IF datefield IS INITIAL. WRITE: / 'datefield <', datefield, '> IS INITIAL.'. ELSE. WRITE: / 'datefield <', datefield, '> IS NOT INITIAL.'. ENDIF. CLEAR datefield. IF datefield IS INITIAL. WRITE: / 'datefield <', datefield, '> IS INITIAL.'. ELSE. WRITE: / 'datefield <', datefield, '> IS NOT INITIAL.'. ENDIF.
For more information check documentation of Abap type d fields.
Only date entries in the format "yyyymmdd" are valid for data objects of type d, whereby "00010101" is the first valid value. The conversion rules, however, allow the assignment of date fields that contain invalid data. The latter is not recommended.
Regards,
Raymond