26 ноября 2018

Вызов программы с передачей динамических параметров селекционного экрана

При вызове программы через SUBMIT, селекционный экран которой имеет динамические параметры, используем дополнение WITH FREE SELECTIONS lt_texpr, где lt_texpr имеет тип rsds_texpr. В следующем примере вызываем программу для транзакции FBL1N и передаём в динамический параметр "Блокировка платежа" значение "A".

DATA:
  lv_sydatum          TYPE sy-datum,
  lt_items            TYPE it_rfposxext,
  lt_trange           TYPE rsds_trange,
  lt_texpr            TYPE rsds_texpr.

FIELD-SYMBOLS:
  <lfs_trange>        LIKE LINE OF lt_trange,
  <lfs_frange>        LIKE LINE OF <lfs_trange>-frange_t,
  <lfs_selopt>        LIKE LINE OF <lfs_frange>-selopt_t.

lv_sydatum = sy-datum.
  
INSERT INITIAL LINE INTO TABLE lt_trange ASSIGNING <lfs_trange>.
<lfs_trange>-tablename = 'BSIK'.
INSERT INITIAL LINE INTO TABLE <lfs_trange>-frange_t ASSIGNING <lfs_frange>.
<lfs_frange>-fieldname = 'ZLSPR'.
INSERT INITIAL LINE INTO TABLE <lfs_frange>-selopt_t ASSIGNING <lfs_selopt>.
<lfs_selopt>-sign = 'I'.
<lfs_selopt>-option = 'EQ'.
<lfs_selopt>-low = 'A'.

CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX'
  EXPORTING
    field_ranges = lt_trange
  IMPORTING
    expressions  = lt_texpr.

SUBMIT rfitemap
  WITH kd_bukrs IN s_bukrs    " БЕ
  WITH kd_lifnr IN s_lifnr    " Кредитор
  WITH pa_stida EQ lv_sydatum " Открытые на отчетную дату
  WITH pa_vari EQ '1SAP'      " Формат
  WITH x_aisel EQ ''          " Все позиции
  WITH x_apar EQ ''           " Позиции дебиторов
  WITH x_clsel EQ ''          " Выровненные позиции
  WITH x_merk EQ ''           " Памятные позиции
  WITH x_norm EQ 'X'          " Стандартные позиции
  WITH x_opsel EQ ''          " Открытые позиции
  WITH x_park EQ ''           " Предв. зарегистрированные
  WITH x_shbv EQ ''           " Операции Особой главной книги
  WITH FREE SELECTIONS lt_texpr
  EXPORTING LIST TO MEMORY
  AND RETURN.


14 ноября 2018

Расчет суммы налога по коду налога и базовой сумме

Используется функциональный модуль CALCULATE_TAX_FROM_NET_AMOUNT.

  CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
    EXPORTING
      i_bukrs           = lv_bukrs
      i_mwskz           = lv_mwskz
      i_waers           = lv_waers
      i_wrbtr           = lv_wrbtr
    IMPORTING
      e_fwste           = lv_fwste
    TABLES
      t_mwdat           = lt_mwdat
    EXCEPTIONS
      bukrs_not_found   = 1
      country_not_found = 2
      mwskz_not_defined = 3
      mwskz_not_valid   = 4
      ktosl_not_found   = 5
      kalsm_not_found   = 6
      parameter_error   = 7
      knumh_not_found   = 8
      kschl_not_found   = 9
      unknown_error     = 10
      account_not_found = 11
      txjcd_not_valid   = 12
      OTHERS            = 13.

13 ноября 2018

Сумма прописью

Используется функциональный модуль SPELL_AMOUNT.

  DATA:
     lv_p1(8) TYPE p VALUE '950',
     ls_words TYPE spell.

  CALL FUNCTION 'SPELL_AMOUNT'
   EXPORTING
      amount          = lv_p1
*     currency        = ' '
*     filler          = ' '
      language        = 'R'
    IMPORTING
      in_words        = ls_words
    EXCEPTIONS
      not_found       = 1
      too_large       = 2
      OTHERS          = 3.

  IF sy-subrc EQ 0.
    " ls_words-word содержит сумму прописью
  ENDIF.