Показаны сообщения с ярлыком fm. Показать все сообщения
Показаны сообщения с ярлыком fm. Показать все сообщения

08 апреля 2022

20 августа 2021

Проблема вывода ALV Grid после вызова ФМ TEXT_CONVERT_CSV_TO_SAP

Было замечено, что после загрузки CSV-файла ФМом TEXT_CONVERT_CSV_TO_SAP вывод ALV Grid (как через класс cl_gui_alv_grid, так и cl_salv_table) происходит медленно.

05 февраля 2021

ФМ CS_BOM_EXPL_MAT_V2

Функциональный модуль CS_BOM_EXPL_MAT_V2 для разузлования спецификаций. Количество компонент будет рассчитано с учетом входного параметра EMENG.

01 февраля 2021

ФМ CS_WHERE_USED_MAT

Функциональный модуль CS_WHERE_USED_MAT для определения в каких спецификациях используется материал.

14 декабря 2020

28 мая 2019

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.

26 сентября 2018

Popup окно с выбором значения в виде таблицы ALV

Есть два (а может и больше) ФМа SRM_SELECTION_POPUP_WITH_ALV и REUSE_ALV_POPUP_TO_SELECT.

  DATA:
    lt_tab           TYPE TABLE OF rbkp_key,

    lv_selected_line TYPE i,
    lv_canceled      TYPE srmboolean,

    ls_selfield      TYPE slis_selfield,
    lv_exit.

  SELECT *
    FROM rbkp
    INTO CORRESPONDING FIELDS OF TABLE lt_tab
    WHERE bldat BETWEEN '20180901' AND '20181231'.

  CALL FUNCTION 'SRM_SELECTION_POPUP_WITH_ALV'
    EXPORTING
      im_title            = 'Title'
      im_tabname          = 'RBKP_KEY'
      im_startx           = 5
      im_stopx            = 100
      im_starty           = 1
      im_stopy            = 10
    IMPORTING
      ex_selected_line    = lv_selected_line
      ex_canceled_by_user = lv_canceled
    CHANGING
      lt_outtab           = lt_tab.

  " Or

  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_title                       = 'Это заголовок'
*     i_selection                   = 'X'
*     i_allow_no_selection          =
      i_zebra                       = 'X'
*     i_screen_start_column         = 0
*     i_screen_start_line           = 0
*     i_screen_end_column           = 0
*     i_screen_end_line             = 0
*     i_checkbox_fieldname          =
*     i_linemark_fieldname          =
*     i_scroll_to_sel_line          = 'X'
      i_tabname                     = '1'
      i_structure_name              = 'RBKP_KEY'
*     it_fieldcat                   =
*     it_excluding                  =
*     i_callback_program            =
*     i_callback_user_command       =
*     is_private                    =
    IMPORTING
      es_selfield                   = ls_selfield
      e_exit                        = lv_exit
    TABLES
      t_outtab                      = lt_tab
    EXCEPTIONS
      program_error                 = 1
      OTHERS                        = 2.

02 февраля 2018

Средство поиска со значениями из внутренней таблицы

Используем функциональный модуль F4IF_INT_TABLE_VALUE_REQUEST.
  DATA: lt_tab1           TYPE TABLE OF ztab1,
        lt_return_tab     TYPE TABLE OF ddshretval,
        ls_return_tab     LIKE LINE OF lt_return_tab.

  SELECT *
    FROM ztab1
    INTO TABLE lt_tab1.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     ddic_structure         = ' '
      retfield               = 'DOCTYPE' " for example
*     pvalkey                = ' '
*     dynpprog               = ' '
*     dynpnr                 = ' '
*     dynprofield            = ' '
*     stepl                  = 0
*     window_title           =
*     value                  = ' '
      value_org              = 'S'
*     multiple_choice        = ' '
*     display                = ' '
*     callback_program       = ' '
*     callback_form          = ' '
*     callback_method        =
*     mark_tab               =
*   IMPORTING
*     user_reset             =
    TABLES
      value_tab              = lt_tab1
*     field_tab              =
      return_tab             = lt_return_tab
*     dynpfld_mapping        =
    EXCEPTIONS
      parameter_error        = 1
      no_values_found        = 2
      OTHERS                 = 3.

  IF sy-subrc EQ 0.

    READ TABLE lt_return_tab INTO ls_return_tab INDEX 1.

    IF sy-subrc EQ 0.

      " ls_return_tab-fieldval содержит выбранное значение

    ENDIF.

  ENDIF.

01 февраля 2018

Чтение значений домена

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

  DATA: lt_domain_text TYPE bkkdc_t_domain_text.

  CALL FUNCTION 'BKK_DOMAIN_TEXTS_READ'
    EXPORTING
      i_langu              = sy-langu
      i_domname            = 'ZDOMNAME'
    IMPORTING
      et_domain_text       = lt_domain_text.

  " Внутренняя таблица lt_domain_text содержит значения домена

20 декабря 2017

Чтение набора, созданного в GS01

Имеем набор значений, созданный в транзакции GS01.
*  Importing:
*    iv_setname TYPE c " Set name
*  Exporting:
*    et_range TYPE TABLE " Range with values 

  DATA: lv_setid        TYPE sethier-setid,
        lt_set_values   TYPE TABLE OF rgsb4.

  FIELD-SYMBOLS: <lfs_set_values>     LIKE LINE OF lt_set_values,
                 <lfs_range>          TYPE any,
                 <lfs_value>          TYPE any.


*  Чтение набора

  CALL FUNCTION 'G_SET_GET_ID_FROM_NAME'
    EXPORTING
      shortname                      = iv_setname
    IMPORTING
      new_setid                      = lv_setid
*     set_info                       =
*   TABLES
*     t_sets                         =
    EXCEPTIONS
      no_set_found                   = 1
      no_set_picked_from_popup       = 2
      wrong_class                    = 3
      wrong_subclass                 = 4
      table_field_not_found          = 5
      fields_dont_match              = 6
      set_is_empty                   = 7
      formula_in_set                 = 8
      set_is_dynamic                 = 9
      OTHERS                         = 10
            .
  CHECK sy-subrc EQ 0.

  CALL FUNCTION 'G_SET_GET_ALL_VALUES'
    EXPORTING
      setnr         = lv_setid
    TABLES
      set_values    = lt_set_values
    EXCEPTIONS
      set_not_found = 1
      OTHERS        = 2.
  CHECK sy-subrc EQ 0.

  LOOP AT lt_set_values ASSIGNING <lfs_set_values>.

    INSERT INITIAL LINE INTO TABLE et_range ASSIGNING <lfs_range>.

    ASSIGN COMPONENT 'SIGN' OF STRUCTURE <lfs_range> TO <lfs_value>.
    IF sy-subrc EQ 0.
      <lfs_value> = 'I'.
    ENDIF.

    ASSIGN COMPONENT 'OPTION' OF STRUCTURE <lfs_range> TO <lfs_value>.
    IF sy-subrc EQ 0.
      IF <lfs_set_values>-to IS NOT INITIAL.
        <lfs_value> = 'BT'.
      ELSE.
        <lfs_value> = 'EQ'.
      ENDIF.
    ENDIF.

    ASSIGN COMPONENT 'LOW' OF STRUCTURE <lfs_range> TO <lfs_value>.
    IF sy-subrc EQ 0.
      <lfs_value> = <lfs_set_values>-from.
    ENDIF.

    ASSIGN COMPONENT 'HIGH' OF STRUCTURE <lfs_range> TO <lfs_value>.
    IF sy-subrc EQ 0.
      <lfs_value> = <lfs_set_values>-to.
    ENDIF.

  ENDLOOP.

19 марта 2017

Прибавить/отнять N лет/месяцев/дней к дате

Чтобы прибавить к дате некоторое количество лет/месяцев/дней, используем функциональный модуль RP_CALC_DATE_IN_INTERVAL.

  DATA: lv_days(2)    TYPE n,
        lv_months(2)  TYPE n,
        lv_years(2)   TYPE n,
        lv_date       TYPE d.

  " Прибавить к текущей дате 6 месяцев

  lv_months = '6'.

  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date            = sy-datum
      days            = lv_days
      months          = lv_months
*     signum          = '+'
      years           = lv_years
    IMPORTING
      calc_date       = lv_date.

Чтобы отнять от даты некоторое количество лет/месяцев/дней используем signum = '-'.