Sam Stone написал(а):
Хочется избежать промежуточного объявления переменных  

К сожалению, OPEN SQL так не умеет, как и использование строковых шаблонов, цепочек методов и т.п. удобных штук.
Можно написать свою обёртку для OPEN SQL на классах. Тогда можно будет это всё использовать, но потеряется проверка синтаксиса.
ВНИМАНИЕ РЕКЛАМА!
Я пользуюсь своим велосипедом на классе, который расширяет возможности OPEN SQL и облегчает труд программиста.
Если интересно, могу скинуть в личку, но там много лишних действий делается для Вашей задачи и система у Вас новее, сам жду, когда у нас до 7.4 SP08 обновят, чтобы ещё удобнее всё сделать и быстрее...
Code:
  zcldev_dyndatbuf=>select(
    EXPORTING
      iv_table  = 'BSEG'        " Название таблицы для выборки
      i_key     = lt_income     " Ключ для выборки (первич.ключ/поле=<>значен/структура/таблица)
      iv_comp   =               " Компоненты структуры/таблицы I_KEY для выборки из таблицы + доп. фильтры
                  `BELNR=BELNR_MM `     &&
                  `GJAHR=ZGETDATE(4) `  &&
                  `WERKS `              &&
                  `XREF3=NLIST+6(10) `  &&
                  `AUGDT=&SY-DATUM& `   &&
                  `DMBTR>'0' `          &&
                  `WRBTR<=&I_VAR1& `    &&
                  `KOART=&I_VAR2& `     &&
                  `SHKZG=&I_VAR3& `
                  " Формат: фильтры, разделённые пробелом
                  " (поле таблицы)[знак[['константа'](компонент ключа[+смещение[(длина)]])['константа']]
                  "                    |[('константа')]
                  "                    |[(&переменная&)]
                  "               ]
      i_var1    = '100'         " Значение 1-ой переменной в фильтре (WRBTR<=&I_VAR1&)
      i_var2    = ls_bseg-koart " Значение 2-ой переменной в фильтре (KOART=&I_VAR2&)
      i_var3    = lr_shkzg      " 1-ый RANGE (SHKZG=&I_VAR3&)
      iv_append = 'X'           " Флаг добавления строк к возвращаемым данным (не очищ.E_DATA)
      iv_empty  = 'X'           " Флаг необходимости выборки из IV_TABLE по пустым ключам
                                " (с пустым BELNR_MM, ZGETDATE(4), WERKS, NLIST+6(10) в lt_income)
    IMPORTING
      e_data    = lt_bseg       " Таблица с выбранными данными (+ старые данные, т.к. iv_append = 'X')
      ev_subrc  = lv_subrc      " Флаг наличия выбранных данных
    CHANGING
      ct_buf    = gst_bseg      " Все когда-либо выбираемые данные из БД по этой таблице
                                " дублировать в буферную переменную gst_bseg
  ).
  " Делает примерно это
  DATA:
    lt_bseg_buf     LIKE lt_bseg[],
    lt_income_buf   LIKE lt_income[],
    ls_bseg_buf     LIKE LINE OF lt_bseg_buf,
    ls_income       LIKE LINE OF lt_income_buf.
  lv_subrc = zcldev_dyndatbuf=>c_subrc_no_data. " = 4
  " Формирование уникальных ключей
  lt_income_buf[] = lt_income[].
  SORT lt_income_buf BY belnr_mm zgetdate werks nlist.
  DELETE ADJACENT DUPLICATES FROM lt_income_buf COMPARING belnr_mm zgetdate werks nlist.
  LOOP AT lt_income_buf INTO ls_income.
    ls_income-zgetdate  = ls_income-zgetdate(4).
    ls_income-werks     = ls_income-werks(4).
    ls_income-nlist     = ls_income-nlist+6(10).
    MODIFY lt_income_buf FROM ls_income TRANSPORTING zgetdate werks nlist.
    " Выборка из буферной таблицы
    LOOP AT gst_bseg INTO ls_bseg_buf USING KEY werks_key
                     WHERE belnr  = ls_income-belnr_mm
                       AND gjahr  = ls_income-zgetdate(4)
                       AND werks  = ls_income-werks(4)
                       AND xref3  = ls_income-nlist+6(10)
                       AND augdt  = sy-datum
                       AND dmbtr  > '0'
                       AND wrbtr <= '100'
                       AND koart  = ls_bseg-koart
                       AND shkzg IN lr_shkzg.
      INSERT ls_bseg_buf INTO TABLE lt_bseg.
      DELETE lt_income_buf.
      lv_subrc = zcldev_dyndatbuf=>c_subrc_data_found.  " = 0
    ENDLOOP.
  ENDLOOP.
  IF NOT lt_income_buf[] IS INITIAL.
    " Выборка новых данных
    SELECT bukrs belnr gjahr buzei augdt koart shkzg mwskz dmbtr wrbtr werks xref3
    INTO TABLE lt_bseg_buf
    FROM bseg
    FOR ALL ENTRIES IN lt_income_buf
    WHERE belnr   = lt_income_buf-belnr_mm
     "AND gjahr   = lt_income_buf-zgetdate
     "AND werks   = lt_income_buf-werks
     "AND xref3   = lt_income_buf-nlist
      AND augdt   = sy-datum
      AND dmbtr  >  '0'
      AND wrbtr  <= '100'
      AND koart   = ls_bseg-koart
      AND shkzg  IN lr_shkzg.
    IF sy-subrc <> 0.
      lv_subrc = zcldev_dyndatbuf=>c_subrc_no_new_data. " = 8
    ENDIF.
    INSERT LINES OF lt_bseg_buf INTO TABLE: gst_bseg, lt_bseg.
  ENDIF.