22 мая 2019

FB01: счёт от кредитора с НДС (BAPI, а также предварительная регистрация)

Используется функциональный модуль BAPI_ACC_DOCUMENT_POST. Если поставить header-doc_status = '2', то документ будет предварительно зарегистрирован.

21 мая 2019

Проверка при сохранении техкарты (транзакция CA01/CA02)

Для проверки при сохранении техкарты (тр. CA01/CA02) можно использовать enhancement spot ES_SAPLCPDI, точки EHP604_LCPDIFV1_01 и EHP604_LCPDIFP1_02. Первая сработает при нажатии на кнопку "Сохранить", вторая - если сохранить при выходе через кнопку "Назад".

16 мая 2019

15 мая 2019

24 апреля 2019

Выполнение команд ОС из SAP GUI

Для запуска команд операционной системы из SAP перейти в транзакцию SM69, найти команду, выделить и нажать "Выполнить". Здесь также можно создать свою команду, нажав кнопку "Создать" и указав параметры: имя команды, команда операционной системы, параметры команды.

08 января 2019

Транзакция для вызова ракурса ведения

1. Запустить SE93, указать имя транзакции, нажать "Создать".
2. Указать краткий текст, выбрать тип транзакции "Транзакция с параметрами".
3. Указать транзакцию SM30, поставить галки "Пропустить первый экран" и "Наследовать параметры GUI".
4. Параметры: VIEWNAME = имя ракурса ведения, UPDATE = X (значения параметров без кавычек и апострофов).

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.

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.

25 сентября 2018

Добавить ZZ-поле в отчет FBL1N

1. Добавить поле в структуры RFPOS (RFPOSX) через append-структуру.
2. Запустить программу RFPOSXEXTEND, чтобы сгенерировать необходимые структуры.
3. Для заполнения поля использовать BTE 00001650 "LINE ITEM DISPLAY: Add to Data per Line" (P/S Module) или BAdI "FI_ITEMS_CH_DATA".