2019 Dec 24 9:52 AM
When i do
SELECT-OPTIONS rangeDat FOR VBAK-ERDAT DEFAULT sy-datum TO sy-datum NO-EXTENSION.
I get input screen to enter a range with both low and high values pre-filled with current date.

But if i replace the low sy-datum with a variable as:
DATA lowDate TYPE sy-datum.
lowDate = sy-datum.
SELECT-OPTIONS rangeDat FOR VBAK-ERDAT DEFAULT lowDate TO sy-datum NO-EXTENSION.
then the low value is displayed blank instead of being pre-filled.

Why is this happening?
2019 Dec 24 12:09 PM
If you had debugged your program, you could have seen that when the selection screen is displayed, the kernel doesn't go through lowDate initialization.
1) Don't be mistaken by the order of statements, SELECT-OPTIONS is not a classic statement: it's not executed at runtime, it's mostly interpreted when the program is activated to create the "selection screen" object (the "default selection screen" by default, i.e. the dynpro number 1000).
2) Why lowDate is not executed: when a program is started, right before the default selection screen is displayed, the kernel executes the statements placed after three event blocks, in this order:
Any statement before these blocks belongs to the event block START-OF-SELECTION, this event is executed only after the selection screen is displayed, if the user presses the Execute button.
3) Solution: for instance, add the statement "INITIALIZATION." before lowDate initialization.
More information: ABAP documentation Flow of an Executable Program
When i do
SELECT-OPTIONS rangeDat FOR VBAK-ERDAT DEFAULT sy-datum TO sy-datum NO-EXTENSION.
I get input screen to enter a range with both low and high values pre-filled with current date.

But if i replace the low sy-datum with a variable as:
DATA lowDate TYPE sy-datum.
lowDate = sy-datum.
SELECT-OPTIONS rangeDat FOR VBAK-ERDAT DEFAULT lowDate TO sy-datum NO-EXTENSION.
then the low value is displayed blank instead of being pre-filled.

Why is this happening?
2019 Dec 24 12:09 PM
If you had debugged your program, you could have seen that when the selection screen is displayed, the kernel doesn't go through lowDate initialization.
1) Don't be mistaken by the order of statements, SELECT-OPTIONS is not a classic statement: it's not executed at runtime, it's mostly interpreted when the program is activated to create the "selection screen" object (the "default selection screen" by default, i.e. the dynpro number 1000).
2) Why lowDate is not executed: when a program is started, right before the default selection screen is displayed, the kernel executes the statements placed after three event blocks, in this order:
Any statement before these blocks belongs to the event block START-OF-SELECTION, this event is executed only after the selection screen is displayed, if the user presses the Execute button.
3) Solution: for instance, add the statement "INITIALIZATION." before lowDate initialization.
More information: ABAP documentation Flow of an Executable Program
2019 Dec 30 6:34 AM
Neither INITIALIZATION nor AT SELECTION-SCREEN OUTPUT worked. LOAD-OF-PROGRAM worked! Thanks.