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

Часовой пояс: 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 часа


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

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


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

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