Текущее время: Ср, июл 23 2025, 11:39

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Считывание данных из подэкранов
СообщениеДобавлено: Пт, мар 09 2007, 14:45 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
Добрый день.

Есть задача, в которой из функционального модуля пользовательского средства поиска необходимо считывать значения полей напрямую с подэкранов. Считать данные из активного подэкрана получилось с помощью функции DYNP_VALUES_READ. Однако при считывании данных других подэкранов функция не дает результат. Подскажите, пожалуйста, как ей правильно пользоваться или как решить задачу по другому?

Вот мой пример исходного кода

Code:
function ZFM_SHLP_EXIT_CMMITEM.
*"----------------------------------------------------------------------
*"  TABLES
*"      SHLP_TAB TYPE  SHLP_DESCR_TAB_T
*"      RECORD_TAB STRUCTURE  SEAHLPRES
*"  CHANGING
*"     REFERENCE(SHLP) TYPE  SHLP_DESCR_T
*"     REFERENCE(CALLCONTROL) TYPE  DDSHF4CTRL
*"----------------------------------------------------------------------

* data declarations for populating batch field on dynpro
  data: DYFIELDS like DYNPREAD occurs 1 with header line,
        DYFIELDS_ADV like DYNPREAD occurs 1 with header line,
        tbl_cobl like cobl occurs 1 with header line.
  constants: C_DYNUMB(04) value '1145'.
  constants: C_GEBER(132) value 'COBL-GEBER'. "закладка "Контировка"
  constants: C_FIPEX(132) value 'COBL-FIPEX'."закладка "Контировка"
  constants: C_NAME1(132) value 'ADDR1_DATA-NAME1'.
"закладка"Адрес поставки"

  data: W_SELOPT like line of SHLP-SELOPT.
  data: WA_DYNPFIELDS like DYNPREAD,
        WA_DYNPFIELDS_ADV_FIELDS like DYNPREAD.

  data: WA_COBL like COBL.
  data: ENV_INFO type DDSHF4ENV,
        ENV_INFO_ADV_FIELDS type DDSHF4ENV.

DATA: RETTAB LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.

  call function 'F4UT_GET_ENVIRONMENT'
    importing
      ENV_INFO      = ENV_INFO
    exceptions
      F4_NOT_ACTIVE = 1.


* EXIT immediately, if you do not want to handle this step

  if CALLCONTROL-STEP <> 'SELONE' and
  CALLCONTROL-STEP <> 'SELECT' and
  CALLCONTROL-STEP <> 'PRESEL1' and
  CALLCONTROL-STEP <> 'RETURN' and
  " AND SO ON
  CALLCONTROL-STEP <> 'DISP'.
    exit.
  endif.


  if not SY-SUBRC is initial.
    ENV_INFO-SUBPROG = SY-CPROG.
    ENV_INFO-SUBDYNP = C_DYNUMB.
  endif.

*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
  if CALLCONTROL-STEP = 'PRESEL'.
* PERFORM PRESEL ..........
    exit.
  endif.

  if CALLCONTROL-STEP = 'PRESEL1'.
*          Ýòî ðàáî÷èé êóñîê êîäà - ñ÷èòûâàíèå äàííûõ èç àêòèâíîãî ïîäýêðàíà

*  check SY-TCODE eq 'AS02'.

*    DYFIELDS-FIELDNAME = C_GEBER.
*    append DYFIELDS.
*    DYFIELDS-FIELDNAME = C_FIPEX.
*    append DYFIELDS.
*
*
** Ñ÷èòûâàåì çíà÷åíèÿ ïîëåé ñòàíäàðòíîãî ïîäýêðàíà
*    call function 'DYNP_VALUES_READ'
*      exporting
*        DYNAME               = ENV_INFO-SUBPROG
*        DYNUMB               = ENV_INFO-SUBDYNP
*        START_SEARCH_IN_MAIN_SCREEN = 'X'
*      tables
*        DYNPFIELDS           = DYFIELDS
*      exceptions
*        INVALID_ABAPWORKAREA = 01
*        INVALID_DYNPROFIELD  = 02
*        INVALID_DYNPRONAME   = 03
*        INVALID_DYNPRONUMMER = 04
*        INVALID_REQUEST      = 05
*        NO_FIELDDESCRIPTION  = 06
*        UNDEFIND_ERROR       = 07.

    ENV_INFO-SUBPROG = 'SAPLSZA1'.
    ENV_INFO-SUBDYNP = '0301'.

    DYFIELDS-FIELDNAME = C_NAME1.
    append DYFIELDS.

    call function 'DYNP_VALUES_READ'
      exporting
        DYNAME               = ENV_INFO-SUBPROG
        DYNUMB               = ENV_INFO-SUBDYNP
      tables
        DYNPFIELDS           = DYFIELDS
      exceptions
        INVALID_ABAPWORKAREA = 01
        INVALID_DYNPROFIELD  = 02
        INVALID_DYNPRONAME   = 03
        INVALID_DYNPRONUMMER = 04
        INVALID_REQUEST      = 05
        NO_FIELDDESCRIPTION  = 06
        UNDEFIND_ERROR       = 07.

    check SY-SUBRC is initial.

if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.



    W_SELOPT-SIGN = 'I'.
    W_SELOPT-OPTION = 'EQ'.
    loop at DYFIELDS.
      check not DYFIELDS-FIELDVALUE is initial.

      case DYFIELDS-FIELDNAME.
        when C_GEBER.
          W_SELOPT-SHLPFIELD = 'GEBER'.
          W_SELOPT-LOW = DYFIELDS-FIELDVALUE.
          append W_SELOPT to SHLP-SELOPT.
        when C_FIPEX.
          W_SELOPT-SHLPFIELD = 'FIPEX'.
          W_SELOPT-LOW = DYFIELDS-FIELDVALUE.
          append W_SELOPT to SHLP-SELOPT.
      endcase.
    endloop.
    exit.
  endif.


*"----------------------------------------------------------------------
* STEP RETURN (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------

*  if CALLCONTROL-STEP = 'RETURN'.
*    data: LEN type I.
**DESCRIBE FIELD wa_COBL LENGTH LEN.
**MOVE RECORD_TAB(LEN) TO wa_COBL.
*
*    move C_WERKS to WA_DYNPFIELDS-FIELDNAME.
*    move WA_COBL-WERKS to WA_DYNPFIELDS-FIELDVALUE.
*    translate WA_DYNPFIELDS-FIELDNAME to upper case.
*    append WA_DYNPFIELDS to DYFIELDS.
*
*    move C_STORT to WA_DYNPFIELDS-FIELDNAME.
*    move WA_COBL-STORT to WA_DYNPFIELDS-FIELDVALUE.
*    translate WA_DYNPFIELDS-FIELDNAME to upper case.
*    append WA_DYNPFIELDS to DYFIELDS.
*
*    call function 'DYNP_UPDATE_FIELDS'
*      exporting
*        DYNAME               = ENV_INFO-SUBPROG
*        DYNUMB               = ENV_INFO-SUBDYNP
*        REQUEST              = 'A'
*      tables
*        DYNPFIELDS           = DYFIELDS
*      exceptions
*        INVALID_ABAPWORKAREA = 1
*        INVALID_DYNPROFIELD  = 2
*        INVALID_DYNPRONAME   = 3
*        INVALID_DYNPRONUMMER = 4
*        INVALID_REQUEST      = 5
*        NO_FIELDDESCRIPTION  = 6
*        UNDEFIND_ERROR       = 7
*        others               = 8.
*    exit.
*  endif.
*



endfunction.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 09 2007, 16:25 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Говорю честно - код не читал, но ответ есть сразу. Assign + F1


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Считывание данных из подэкранов
СообщениеДобавлено: Пт, мар 09 2007, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Потому что номер активного подэкрана явно задается в DYNP_VALUES_READ с помощью ENV_INFO-SUBDYNP.
Если хотите читать данные с других подэкранов, явно указывайте их номер. :wink:
А вообще-то лучше все необходимые поля определить в качестве параметров ввода и передавать им значения непосредственно при вызове средства поиска, раз уж оно свое.

И пользуйтесь поиском

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 12 2007, 15:09 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
Не получается считать данные из другого подекрана, явно указав его программу и номер подекрана. Ошибка - "нет такой программы". Если указываю как параметр программы SAPLMEGUI(она главная), то ошибка следующая - "нет такого поля".

если можно, объясните, как с помощью ASSIGN считать данные с подекранов


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 12 2007, 15:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Через глобальную адресацию. Т.е. (имя программы)имя поля. Вот так и ассайнить.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 14 2007, 19:06 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
через Assign ошибка та-же.

приведу реальный пример:

транзакция me23n
вкладка Контировка
SearchHelp реализован для поля финансовая позиция
необходимо считать поле из закладки данные клиента

дело в том, что я могу считать данные только из видимой области окна. Если обращаюсь к подекрану, который сейчас не видим - данных получить не могу. Может, кто-то сталкивался с подобной задачей?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 14 2007, 20:13 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Сергей Литвин написал(а):
через Assign ошибка та-же.

приведу реальный пример:

транзакция me23n
вкладка Контировка
SearchHelp реализован для поля финансовая позиция
необходимо считать поле из закладки данные клиента

дело в том, что я могу считать данные только из видимой области окна. Если обращаюсь к подекрану, который сейчас не видим - данных получить не могу. Может, кто-то сталкивался с подобной задачей?
Он не невидим, его просто нет, нельзя обратиться к тому чего нет. Хацкерское решение уже предложили - доступ через assign к глобальным переменым программы, содержащей нужный подэкран.
Но может стоит поискать более прямые решения - типа соответствующих UE или BAdI?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 14 2007, 23:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
В 4.7 нет стандартной закладки "Данные клиента" в me21-3N :o
Если данная закладка реализована через BAdI ME_GUI_PO_CUST, то программа подэкрана должна быть другая...

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 15 2007, 08:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Вообще-то надо различать два случая: клиентские и серверные табстрипы. Независимо от этого все переменные подэкранов в программе определены, поэтому assign к ним сделать можно. Но пока PBO соответствующего подэкрана не отработало, эти переменные могут быть пустыми.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 15 2007, 11:25 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
Удав написал(а):
В 4.7 нет стандартной закладки "Данные клиента" в me21-3N :o
Если данная закладка реализована через BAdI ME_GUI_PO_CUST, то программа подэкрана должна быть другая...


также не получается обратится и к любому стандартному подекрану


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 15 2007, 11:27 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
sibrin написал:
Вообще-то надо различать два случая: клиентские и серверные табстрипы. Независимо от этого все переменные подэкранов в программе определены, поэтому assign к ним сделать можно. Но пока PBO соответствующего подэкрана не отработало, эти переменные могут быть пустыми.


Если можно, подскажите, к какой программе мне необходимо обратиться.
Пробовал SAPLMEGUI и ее дочерние программы обработки подекранов - безрезультатно. Буду очень благодарен за помощь


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 15 2007, 12:37 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 09 2007, 13:46
Сообщения: 11
Удав написал(а):
В 4.7 нет стандартной закладки "Данные клиента" в me21-3N :o
Если данная закладка реализована через BAdI ME_GUI_PO_CUST, то программа подэкрана должна быть другая...


У меня версия 6.4. Может есть какие-то особенности, связанные с этим?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 15 2007, 14:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Попробуйте, например, (SAPLSZA1)ADDR1_DATA-NAME1. У вас же всё уже в первом посте написано.

Только пока на вкладку с адресом ещё не заходили, то и программа SAPLSZA1 ещё не запускалась и адрес ещё никто не читал. Поэтому искать значения адреса в главной программе дело бессмысленное.


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

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


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

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


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

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