Текущее время: Пн, июл 28 2025, 01:52

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 11:50 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
BatchInput. Вызов стандартной транзакции с bdcdata.
Собственно хотелось бы полю экрана передать всю область значений (включая, исключая заданные интервалы или значения).
Т.е. не передавать по отдельному значению, а весь мой готовый range. Возможно это сделать, не разбирая мой ренж на составляющие?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 11:55 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
SCORPION_Z написал(а):
BatchInput. Вызов стандартной транзакции с bdcdata.
Собственно хотелось бы полю экрана передать всю область значений (включая, исключая заданные интервалы или значения).
Т.е. не передавать по отдельному значению, а весь мой готовый range. Возможно это сделать, не разбирая мой ренж на составляющие?

http://sapboard.ru/forum/viewtopic.php?f=13&t=45844&view=previous


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 11:56 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
SCORPION_Z написал(а):
BatchInput. Вызов стандартной транзакции с bdcdata.
Собственно хотелось бы полю экрана передать всю область значений (включая, исключая заданные интервалы или значения).
Т.е. не передавать по отдельному значению, а весь мой готовый range. Возможно это сделать, не разбирая мой ренж на составляющие?
А что за транзакция?

_________________
"I have a dream"(c)Martin Luther King, Jr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 13:47 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
Alex80 написал:
SCORPION_Z написал(а):
BatchInput. Вызов стандартной транзакции с bdcdata.
Собственно хотелось бы полю экрана передать всю область значений (включая, исключая заданные интервалы или значения).
Т.е. не передавать по отдельному значению, а весь мой готовый range. Возможно это сделать, не разбирая мой ренж на составляющие?
А что за транзакция?


ME80FN, но тема интересна и не только для неё. Да, и SUBMIT мне не подошел, т.к. следующий экран транзакции уже не так отрабатывает, как при вызове через CALL TRANSACTION, т.е. вызов через SUBMIT не позволяет провалиться в документ.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 14:03 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
Besa написал:


Я таки надеялся обойтись без RSCSEL-SLOW_I, RSCSEL-ILOW_I, RSCSEL-IHIGH_I, RSCSEL-SLOW_E и тп.
К примеру SUBMIT очень просто обрабатывает ranges. А так мне нужно разбирать мои ранжи на предмет того
интервал это или отдельное значение, включая или исключая. Не очень удобный подход надо сказать.
А ренжов будет не один... И ладно что поле sign имеет всего два значения "I" for include and "E" for exclude,
а вот уже поле option имеет область значений побольше "EQ", "NE", "GE", "GT", "LE", "LT", "CP" and "NP" if column high is initial, and "BT", "NB" if column high is not initial.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 15:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
SCORPION_Z написал(а):
ME80FN, но тема интересна и не только для неё. Да, и SUBMIT мне не подошел, т.к. следующий экран транзакции уже не так отрабатывает, как при вызове через CALL TRANSACTION, т.е. вызов через SUBMIT не позволяет провалиться в документ.

Под ME80FN скрывается в конечном итоге вызов отчета SAP Query...
Следующий экран при SUBMIT не отрабатывет из-за "индусского кода" в отчете RM06EAAW:
Code:
START-OF-SELECTION.
...
* set variant dependent from transaction code
  IF SY-TCODE = 'ME80FN'.
    QUERY_NAME = 'ME80FN'.
    VARIANT    = 'SAP&ME80FN'.         " standard for purch. ord.
    l_action   = 'ME80FN'.
  ELSEIF SY-TCODE = 'ME80AN'.
    QUERY_NAME = 'ME80FN'.
    VARIANT    = 'SAP&ME80AN'.         " standard for rfq
    l_action   = 'ME80AN'.
  ELSEIF SY-TCODE = 'ME80RN'.
    QUERY_NAME = 'ME80FN'.
    VARIANT    = 'SAP&ME80RN'.         " standard for sched. agreem.
    l_action   = 'ME80RN'.
  ELSE.
    QUERY_NAME = 'ME80FN'.
    VARIANT    = 'SAP&ME80FN'.         " standard for purch. ord.
    l_action   = 'ME80FN'.
  ENDIF.

Поэтому для нормального вызова аналитических отчетов через SUBMIT необходимо сделать копию этого отчета в Z область с возможностью заполнения полей QUERY_NAME, VARIANT и l_action через:
- параметры отчета или
- SET/GET параметры или
- через IMPORT TO/EXPORT FROM MEMORY

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 15:55 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Можно вот так вызвать (в данном случае передётся номер материала).
Извините за код, лепил на коленке.
Code:
DATA: my_query               TYPE REF TO cl_abap_query_mm.
DATA: ex_table_ref           TYPE REF TO data,
      ex_fieldcatalog        TYPE lvc_t_fcat,
      wa_fieldcatalog        TYPE lvc_s_fcat.

DATA:
  gt_selection_table TYPE me_t_rsparams,
  gs_selection_table TYPE LINE OF me_t_rsparams.

START-OF-SELECTION.

  IF my_query IS INITIAL.
    CREATE OBJECT my_query
      EXPORTING
        im_query_name = 'ME80FN' "query_name
        im_variant    = 'SAP&ME80FN'. "variant.
  ENDIF.
  gs_selection_table-selname = 'S_MATNR'.
  gs_selection_table-kind = 'S'.
  gs_selection_table-sign = 'I'.
  gs_selection_table-option = 'EQ'.
  gs_selection_table-low = '123'.
*gs_selection_table-HIGH

  APPEND gs_selection_table TO gt_selection_table.
*  CALL METHOD my_query->set_via_screen( 'X' ).
  CALL METHOD my_query->set_selection_table( gt_selection_table ).
  CALL METHOD my_query->if_reader_mm~read_table
    EXPORTING
      im_name         = 'ME80FN'
    IMPORTING
      ex_fieldcatalog = ex_fieldcatalog
      ex_table_ref    = ex_table_ref
    EXCEPTIONS
      not_found       = 1
      cancelled       = 2.
  IF sy-subrc <> 0.
*    if sy-subrc = 1.
*      leave program.
    IF sy-subrc = 2.
      LEAVE PROGRAM.
    ENDIF.
  ENDIF.

_________________
"I have a dream"(c)Martin Luther King, Jr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 15:56 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
Да, я видел этот кусок
Code:
IF SY-TCODE =...
, вот он то и не дает отработать SUBMIT так как мне нужно


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 16:01 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
Alex80 написал:
Можно вот так вызвать (в данном случае передётся номер материала).
Извините за код, лепил на коленке.
Code:
DATA: my_query               TYPE REF TO cl_abap_query_mm.
DATA: ex_table_ref           TYPE REF TO data,
      ex_fieldcatalog        TYPE lvc_t_fcat,
      wa_fieldcatalog        TYPE lvc_s_fcat.

DATA:
  gt_selection_table TYPE me_t_rsparams,
  gs_selection_table TYPE LINE OF me_t_rsparams.

START-OF-SELECTION.

  IF my_query IS INITIAL.
    CREATE OBJECT my_query
      EXPORTING
        im_query_name = 'ME80FN' "query_name
        im_variant    = 'SAP&ME80FN'. "variant.
  ENDIF.
  gs_selection_table-selname = 'S_MATNR'.
  gs_selection_table-kind = 'S'.
  gs_selection_table-sign = 'I'.
  gs_selection_table-option = 'EQ'.
  gs_selection_table-low = '123'.
*gs_selection_table-HIGH

  APPEND gs_selection_table TO gt_selection_table.
*  CALL METHOD my_query->set_via_screen( 'X' ).
  CALL METHOD my_query->set_selection_table( gt_selection_table ).
  CALL METHOD my_query->if_reader_mm~read_table
    EXPORTING
      im_name         = 'ME80FN'
    IMPORTING
      ex_fieldcatalog = ex_fieldcatalog
      ex_table_ref    = ex_table_ref
    EXCEPTIONS
      not_found       = 1
      cancelled       = 2.
  IF sy-subrc <> 0.
*    if sy-subrc = 1.
*      leave program.
    IF sy-subrc = 2.
      LEAVE PROGRAM.
    ENDIF.
  ENDIF.


А вот это уже интересно. НА такой метод
Code:
CREATE OBJECT my_query
я уже натыкался, когда нужно было разобраться с SAP Query. Не додумал его применить здесь. Сейчас попробую...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Ср, авг 25 2010, 16:28 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Ограничения то оно передаёт, но для дальнейшего вывода ALV нужно ещё всю логику 100 экрана брать.
Можно ещё использовать ФМ RSAQ_QUERY_CALL.

_________________
"I have a dream"(c)Martin Luther King, Jr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Чт, авг 26 2010, 07:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 20 2008, 16:29
Сообщения: 245
Откуда: RU->DE
Пол: Мужской
Есть простой, быстрый и универсальный способ в таких случаях: MOVE-CORRESPONDING, RS_CREATE_VARIANT, CALL TRANSACTION, RS_VARIANT_DELETE. Если нужно более подробно - могу поискать кусок кода.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput  Тема решена
СообщениеДобавлено: Чт, авг 26 2010, 08:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 20 2008, 16:29
Сообщения: 245
Откуда: RU->DE
Пол: Мужской
Вот пример для транзакции IH08

Code:
TABLES equi.

SELECT-OPTIONS s_equnr FOR equi-equnr.

DATA:
  desc TYPE varid,
  contents TYPE TABLE OF rsparams WITH HEADER LINE,
  text TYPE TABLE OF varit WITH HEADER LINE,
  report TYPE rsvar-report,
  variant TYPE rsvar-variant,
  bdctab TYPE TABLE OF bdcdata.

report = 'RIEQUI20'.

* Создаем уникальное имя варианта
CONCATENATE 'ZBC' sy-uzeit
            INTO variant.

* Угрожающе обзываем его
CLEAR text.
text-langu = sy-langu.
text-report = report.
text-variant = variant.
text-vtext = 'Временный (НЕ ИСПОЛЬЗОВАТЬ!)'.
APPEND text.

* Задаём параметры
desc-report = report.
desc-variant = variant.
desc-environmnt = 'A'.   "Использовать в фоне и онлайн
desc-version = 1.
desc-ename = sy-uname.
desc-edat = sy-datum.
desc-etime = sy-uzeit.
desc-mlangu = sy-langu.

* Макрос для быстрого заполнения SELECT-OPTIONS
DEFINE fill_so.
  loop at &1.
    clear contents.
    move-corresponding &1 to contents.
    contents-kind = 'S'.
    contents-selname = &2.
    append contents.
  endloop.
END-OF-DEFINITION.

* Заполняем SELECT-OPTIONS
CLEAR contents[].
fill_so s_equnr 'EQUNR'.

* Заполняем таблицу BDC с выбором варианта
PERFORM create_bdc.

* Создаём вариант
CALL FUNCTION 'RS_CREATE_VARIANT'
  EXPORTING
    curr_report                     = report
    curr_variant                    = variant
    vari_desc                       = desc
  TABLES
    vari_contents                   = contents
    vari_text                       = text
*   VSCREENS                        =
EXCEPTIONS
   illegal_report_or_variant       = 1
   illegal_variantname             = 2
   not_authorized                  = 3
   not_executed                    = 4
   report_not_existent             = 5
   report_not_supplied             = 6
   variant_exists                  = 7
   variant_locked                  = 8
   OTHERS                          = 9.

* Запускаем транзакцию
CALL TRANSACTION 'IH08' USING bdctab.

* Чистим за собой
CALL FUNCTION 'RS_VARIANT_DELETE'
  EXPORTING
    report               = report
    variant              = variant
    flag_confirmscreen   = 'X'
    flag_delallclient    = 'X'
  EXCEPTIONS
    not_authorized       = 1
    not_executed         = 2
    no_report            = 3
    report_not_existent  = 4
    report_not_supplied  = 5
    variant_locked       = 6
    variant_not_existent = 7
    no_corr_insert       = 8
    variant_protected    = 9
    OTHERS               = 10.

WRITE 'Ну вот и всё'.

****************************************************
* Создаём таблицу BDC с выбором варианта
****************************************************
FORM create_bdc.
  DATA:
    bdcdata_str LIKE bdcdata.

  DEFINE add_bdc.
    clear bdcdata_str.
    bdcdata_str-program = &1.
    bdcdata_str-dynpro = &2.
    bdcdata_str-dynbegin = &3.
    bdcdata_str-fnam = &4.
    bdcdata_str-fval = &5.
    append bdcdata_str to bdctab.
  END-OF-DEFINITION.

  CLEAR bdctab[].

  add_bdc report '1000' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '/EGET'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '=%SC'.
  add_bdc 'SAPLSYSF' '0800' 'X' '' ''.
  add_bdc '' '' '' 'BDC_CURSOR' 'RSYSF-STRING'.
  add_bdc '' '' '' 'BDC_OKCODE' '=SCAN'.
  add_bdc '' '' '' 'RSYSF-STRING' variant.
  add_bdc '' '' '' 'SCAN_STRING-START' 'X'.
  add_bdc '' '' '' 'SCAN_STRING-LIMIT' '100'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_CURSOR' '03/04'.
  add_bdc '' '' '' 'BDC_OKCODE' '=POSI'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '=PICK'.
  add_bdc 'RIEQUI20' '1000' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '/EE'.
  add_bdc '' '' '' 'BDC_CURSOR' 'EQUNR-LOW'.
ENDFORM.                    "create_bdc


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Чт, авг 26 2010, 15:54 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, окт 06 2008, 11:22
Сообщения: 56
BaBuin Да, с вариантом ренджи нормально передались, у меня их 3.
Был только один вопрос, а как же точно передать имя временного варианта в BDC.
Но смотрю, что используется 0800 экран для поиска "нашего" варианта.
Правда при записи поиска в SHDB перед '=PICK' была ещё строка с поз. курсора:
Code:
   add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
   add_bdc '' '' '' 'BDC_CURSOR' '07/08'.  "! её нужно комментить или убирать
   add_bdc '' '' '' 'BDC_OKCODE' '=PICK'.


Я так понимаю, что её следует исключать, т.к. она жестко привязывается к строке в 0120 экране...
Без неё всё рулит. Да, и если из отчета доступен многократный вызов "нужной" транзакции
(например из ALV), то всё же стоит чистить эту штуку
Code:
CLEAR text[].


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Вт, апр 26 2011, 12:16 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
BaBuin написал:

Code:
  add_bdc report '1000' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '/EGET'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '=%SC'.
  add_bdc 'SAPLSYSF' '0800' 'X' '' ''.
  add_bdc '' '' '' 'BDC_CURSOR' 'RSYSF-STRING'.
  add_bdc '' '' '' 'BDC_OKCODE' '=SCAN'.
  add_bdc '' '' '' 'RSYSF-STRING' variant.
  add_bdc '' '' '' 'SCAN_STRING-START' 'X'.
  add_bdc '' '' '' 'SCAN_STRING-LIMIT' '100'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_CURSOR' '03/04'.
  add_bdc '' '' '' 'BDC_OKCODE' '=POSI'.
  add_bdc 'SAPMSSY0' '0120' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '=PICK'.
  add_bdc 'RIEQUI20' '1000' 'X' '' ''.
  add_bdc '' '' '' 'BDC_OKCODE' '/EE'.
  add_bdc '' '' '' 'BDC_CURSOR' 'EQUNR-LOW'.
ENDFORM.                    "create_bdc


а нельзя это дело как-то заменить на
call function 'RS_HDSYS_CALL_TC_VARIANT' ? или может что-то еще есть такое... ато call function 'RS_CREATE_VARIANT' не создает запись в shdtvu... которой пользуется 'RS_HDSYS_CALL_TC_VARIANT' => не может найти вариант (


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как передать range в качестве параметра в BatchInput
СообщениеДобавлено: Вт, апр 26 2011, 15:02 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
[censored] написал(а):
а нельзя это дело как-то заменить на
call function 'RS_HDSYS_CALL_TC_VARIANT' ? или может что-то еще есть такое... ато call function 'RS_CREATE_VARIANT' не создает запись в shdtvu... которой пользуется 'RS_HDSYS_CALL_TC_VARIANT' => не может найти вариант (

ответ на это получен в теме viewtopic.php?f=13&t=57954


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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