Текущее время: Пт, июл 18 2025, 14:43

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Не работает SAVE_TEXT
СообщениеДобавлено: Вт, авг 05 2014, 04:52 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, июл 23 2013, 17:41
Сообщения: 36
Пол: Мужской
День добрый!
Делаем расширение на miro по просьбе пользователей, надо чтобы текст из счет фактуры(начинающийся с № и @№) записывался в текст бухгалтерского документа:
при чем у меня все работает, у буха нет... =(
ST01 трассировка пользователя на полномочия все ОК.
Code:
DATA: ls_objkey TYPE thead,
      lv_text(30),
      lt_lines    TYPE TABLE OF tline,
      ls_lines    LIKE LINE OF lt_lines,
      lr_bsart    TYPE RANGE OF ekko-bsart,
      lv_bsart    TYPE ekko-bsart,
      lv_import   TYPE char14,
      lv_text_num TYPE string,
      BEGIN OF ls_bkpf,
       bukrs TYPE bkpf-bukrs,
       belnr TYPE bkpf-belnr,
       gjahr TYPE bkpf-gjahr,
      END OF ls_bkpf.
FIELD-SYMBOLS: <fs_sgtxt> TYPE rbkp-sgtxt,
               <fs_ebeln> TYPE rseg-ebeln.

IF sy-tcode = 'MIRO' AND sy-ucomm = 'BU'.
  IMPORT ev_zxmrnu03 TO lv_import FROM MEMORY ID sy-uname.
  FREE MEMORY ID sy-uname.
  lv_text = '(SAPLMRMP)RBKPV-SGTXT'.
  ASSIGN (lv_text) TO <fs_sgtxt>.
  IF sy-subrc = 0.
    IF <fs_sgtxt>(2) CO '@№' OR <fs_sgtxt>(1) CO '№'.
      CALL METHOD zcl_params=>get_range
        EXPORTING
          i_prgid      = 'MIR7'
          i_varid      = 'VAR01'
          i_table      = 'EKKO'
          i_field      = 'BSART'
        IMPORTING
          e_range      = lr_bsart
        EXCEPTIONS
          no_data      = 1
          is_parameter = 2
          OTHERS       = 3.
      IF sy-subrc = 0.
        lv_text = '(SAPLMR1M)DRSEG-EBELN'.
        ASSIGN (lv_text) TO <fs_ebeln>.
        IF sy-subrc = 0 AND <fs_ebeln> IS NOT INITIAL.
          SELECT SINGLE bsart
            INTO lv_bsart
            FROM ekko
           WHERE ebeln = <fs_ebeln>
             AND bsart IN lr_bsart.
          IF sy-subrc = 0.
            SELECT SINGLE bukrs belnr gjahr
              FROM bkpf
              INTO CORRESPONDING FIELDS OF ls_bkpf
             WHERE awkey = lv_import
               AND awtyp = 'RMRP'.
            IF sy-subrc = 0.
              ls_objkey-tdname = ls_bkpf. "bukrs + belnr + gjahr
              ls_objkey-tdid = '0008'.
              ls_objkey-tdobject = 'BELEG'.
              ls_objkey-tdspras = sy-langu.
              ls_lines-tdformat = '*'.
              IF <fs_sgtxt>(2) CO '@№'.
                lv_text_num = <fs_sgtxt>+2. "1.
              ELSEIF <fs_sgtxt>(1) CO '№'.
                lv_text_num = <fs_sgtxt>+1. "1.
              ELSE.
                lv_text_num = <fs_sgtxt>+2. "1.
              ENDIF.
              ls_lines-tdline = lv_text_num. "1.
              APPEND ls_lines TO lt_lines.

              CALL FUNCTION 'SAVE_TEXT'
                EXPORTING
                  savemode_direct = 'X'
                  local_cat       = ' '
                  header          = ls_objkey
                TABLES
                  lines           = lt_lines
                EXCEPTIONS
                  id              = 1
                  language        = 2
                  name            = 3
                  object          = 4
                  OTHERS          = 5.
              IF sy-subrc = 0.
                CALL FUNCTION 'COMMIT_TEXT'
                  EXPORTING
                    savemode_direct = 'X'
                    object          = ls_objkey-tdobject
                    name            = ls_objkey-tdname.

              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDIF.

_________________
- Хочу выучить весь SAP
- А ты не лопнешь деточка???


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не работает SAVE_TEXT
СообщениеДобавлено: Вт, авг 05 2014, 11:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
camelotka написал:
День добрый!
Делаем расширение на miro по просьбе пользователей, надо чтобы текст из счет фактуры(начинающийся с № и @№) записывался в текст бухгалтерского документа:
при чем у меня все работает, у буха нет... =(

Не должно срабатывать вот это
Code:
            SELECT SINGLE bukrs belnr gjahr
              FROM bkpf
              INTO CORRESPONDING FIELDS OF ls_bkpf
             WHERE awkey = lv_import
               AND awtyp = 'RMRP'.
            IF sy-subrc = 0.


При расширении в MIRO физически данные в BKPF еще не записаны.
Когда вы пытаетесь сделать это сами в отладке, то видимо происходит неявный commit и данные бух.документа уже записываются.

Где именно вы делаете расширение в MIRO?
Логичнее выполнять это действие в Open FI - событие 1050. Там уже известен номер бух. документа. Кстати, там COMMIT_TEXT нужно вызывать без savemode_direct = 'X'.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает SAVE_TEXT
СообщениеДобавлено: Ср, авг 06 2014, 07:48 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, июл 23 2013, 17:41
Сообщения: 36
Пол: Мужской
Всем спасибо! Сделал через OPEN_FI 1050...
Вставил сразу после коммита в форме variant_transactio (SAPLMR1M).
По идеи, в отладке после отработки коммита запись в BKPF уже была сделана...
Но на самом деле если программа работает в штатном режиме, то система просто не успевала внести запись.
И commit and wait не помог и задержку пытался сделать.. ни чего не вышло!

В итоге, сделал ФМ и зацепил его к OPEN_FI процессу 1050 и все нормально отработало,
плюс избавился от лишнего кода за счет импорта в ФМ.

Code:
FUNCTION z_open_fi_mm1580010.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  TABLES
*"      T_BKPF STRUCTURE  BKPF
*"----------------------------------------------------------------------
  CONSTANTS :
        gc_field_ntext(30)                       VALUE '(SAPLMRMP)RBKPV-SGTXT'
       ,gc_symbol_valid01(2)                     VALUE '@№'
       ,gc_symbol_valid02                        VALUE '№'
       ,gc_tranz_code_valid  TYPE sy-tcode       VALUE 'MIRO'
       ,gc_ok_code_valid     TYPE sy-ucomm       VALUE 'BU'
       ,gc_num_field_text    TYPE thead-tdid     VALUE '0008'
       ,gc_field_text_obj    TYPE thead-tdobject VALUE 'BELEG'
       ,gc_format_value(1)                       VALUE '*'
       ,gc_flag_fill(1)                          VALUE 'X'
       .
  DATA :
        ls_objkey TYPE thead                 " Объект текстов
       ,lv_text(30)
       ,lt_lines    TYPE TABLE OF tline
       ,ls_lines    LIKE LINE OF lt_lines
       .

  FIELD-SYMBOLS: <fs_sgtxt> TYPE rbkp-sgtxt,
                 <fs_ebeln> TYPE rseg-ebeln.
  " Условие отработки FM
  IF sy-tcode = gc_tranz_code_valid AND sy-ucomm = gc_ok_code_valid.
    " Получение текста
    ASSIGN (gc_field_ntext) TO <fs_sgtxt>.
    IF sy-subrc = 0.
      IF <fs_sgtxt>(2) CO gc_symbol_valid01   " Условие переноса текста в документ BKPF
      OR <fs_sgtxt>(1) CO gc_symbol_valid02.
          READ TABLE t_bkpf.
          IF sy-subrc = 0.
            "Формирование объекта текста
            CONCATENATE t_bkpf-bukrs t_bkpf-belnr t_bkpf-gjahr INTO ls_objkey-tdname.
            ls_objkey-tdid     = gc_num_field_text.
            ls_objkey-tdobject = gc_field_text_obj.
            ls_objkey-tdspras  = sy-langu.
            " Значение
            ls_lines-tdformat  = gc_format_value.
            IF <fs_sgtxt>(2)     CO gc_symbol_valid01.
              ls_lines-tdline = <fs_sgtxt>+2.
            ELSEIF <fs_sgtxt>(1) CO gc_symbol_valid02.
              ls_lines-tdline = <fs_sgtxt>+1.
            ENDIF.
            APPEND ls_lines TO lt_lines.
            " Сохраняем текст
            CALL FUNCTION 'SAVE_TEXT'
              EXPORTING
                savemode_direct = gc_flag_fill
                header          = ls_objkey
              TABLES
                lines           = lt_lines
              EXCEPTIONS
                id              = 1
                language        = 2
                name            = 3
                object          = 4
                OTHERS          = 5.
            IF sy-subrc = 0.
              " Коммит для заполнения текста
              CALL FUNCTION 'COMMIT_TEXT'
                EXPORTING
                  savemode_direct = gc_flag_fill
                  object          = ls_objkey-tdobject
                  name            = ls_objkey-tdname.

            ENDIF.

          ENDIF.

      ENDIF.

    ENDIF.

  ENDIF.

ENDFUNCTION.

_________________
- Хочу выучить весь SAP
- А ты не лопнешь деточка???


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не работает SAVE_TEXT
СообщениеДобавлено: Ср, авг 06 2014, 09:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
1. Условие IF sy-tcode = gc_tranz_code_valid AND sy-ucomm = gc_ok_code_valid. лишнее, т.к. событие 1050 отрабатывает только при сохранении документа.
Кроме этого, ASSIGN гарантирует, что дальнейшие действия будут выполняться только для входящих счетов.
2. При чтении данных лучше явно указывать номер строки (READ TABLE ... INDEX 1.) или выполнять цикл по таблице (LOOP AT ..).

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB