Текущее время: Вт, июл 22 2025, 19:51

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 12:55 
Специалист
Специалист

Зарегистрирован:
Вт, сен 16 2008, 13:15
Сообщения: 124
Пол: Мужской
привет
есть код:
Code:
FORM get_attributes_for_class
  TABLES t_attributes          TYPE attrcls_tab
  USING  value(u_class)        LIKE sdokobject-class.

  STATICS: isdokclprop LIKE sdokclprop OCCURS 0 WITH HEADER LINE.

  DATA: attribute_definition LIKE sdokprop.

  DATA: tfill         LIKE sy-tfill,
        tabix_aux     LIKE sy-tabix,
        tabix_buf     LIKE sy-tabix,
        subrc_aux     LIKE sy-subrc,
        internal_mode type sdok_intrn,
        typ           like sdokiocl-io_type.

  STATICS: BEGIN OF buffertab OCCURS 0,
             class LIKE u_class,
             mode  type sdok_intrn,
             attributes TYPE attrcls_tab,
           END OF buffertab.


* ... Initialize returned tables ...

  REFRESH: t_attributes.

* ... Get current value of internal operation mode ...

  PERFORM internal_mode_access
    USING    internal_mode_command_get
    CHANGING internal_mode.

* ... Try to get answer from header line of buffer table ...

  IF NOT buffertab-class IS INITIAL AND buffertab-class EQ u_class
  AND buffertab-mode EQ internal_mode.
    APPEND LINES OF buffertab-attributes TO t_attributes.
    EXIT.
  ENDIF.


но при входе в него табличка buffertab-attributes уже заполнена значениями.
как можно узнать, откуда берутся эти значения
вызов проходит
Code:
PERFORM GET_ATTRIBUTES_FOR_CLASS
    TABLES ATTRIBUTES_FOR_CLASS
    USING  CLASS.

ATTRIBUTES_FOR_CLASS - пустая


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 12:59 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Наверное buffertab объявлена глобально, помимо STATICS: BEGIN OF buffertab внутри подпрограммы, рас она на входе в перформ уже декларирована и заполнена. А вообще можете поставить точку наблюдения и посмотреть в каком месте заполняется таблица.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 13:06 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
namen написал:
привет
есть код:
Code:
...

но при входе в него табличка buffertab-attributes уже заполнена значениями.
как можно узнать, откуда берутся эти значения

А весь ли код приведён???

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 13:25 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
namen написал:
но при входе в него табличка buffertab-attributes уже заполнена значениями

Такое вполне возможно, на то она и statics.
Вы уверены, что это не первый вызов данной формы? Точку в нее ставить пробовали?

PS сори если это и так понятно, можт я не понял вопрос


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 13:39 
Специалист
Специалист

Зарегистрирован:
Вт, сен 16 2008, 13:15
Сообщения: 124
Пол: Мужской
нет код не полный, вся программа около 8000 строк

ставил в начало формы точку прерывания, но при каждом вызове табличка уже заполнена :(
ставил точку прерывания при изменении значений, опять таки срабатывает при входе в get_attributes_for_class

код:
Code:
FORM get_attributes_for_class
  TABLES t_attributes          TYPE attrcls_tab
  USING  value(u_class)        LIKE sdokobject-class.

  STATICS: isdokclprop LIKE sdokclprop OCCURS 0 WITH HEADER LINE.

  DATA: attribute_definition LIKE sdokprop.

  DATA: tfill         LIKE sy-tfill,
        tabix_aux     LIKE sy-tabix,
        tabix_buf     LIKE sy-tabix,
        subrc_aux     LIKE sy-subrc,
        internal_mode type sdok_intrn,
        typ           like sdokiocl-io_type.

  STATICS: BEGIN OF buffertab OCCURS 0,
             class LIKE u_class,
             mode  type sdok_intrn,
             attributes TYPE attrcls_tab,
           END OF buffertab.


* ... Initialize returned tables ...

  REFRESH: t_attributes.

* ... Get current value of internal operation mode ...

  PERFORM internal_mode_access
    USING    internal_mode_command_get
    CHANGING internal_mode.

* ... Try to get answer from header line of buffer table ...

  IF NOT buffertab-class IS INITIAL AND buffertab-class EQ u_class
  AND buffertab-mode EQ internal_mode.
    APPEND LINES OF buffertab-attributes TO t_attributes.
    EXIT.
  ENDIF.

* ... Try to get answer from buffer table ...

  READ TABLE buffertab
    WITH KEY class = u_class
             mode = internal_mode
    BINARY SEARCH.
  IF sy-subrc EQ 0.
    APPEND LINES OF buffertab-attributes TO t_attributes.
    EXIT.
  ELSE.
    tabix_buf = sy-tabix.
  ENDIF.

* ... Fill internal table ...

  READ TABLE isdokclprop
    WITH KEY io_class = u_class
    BINARY SEARCH
    TRANSPORTING NO FIELDS.
  if sy-subrc NE 0.
    SELECT * FROM sdokclprop
      APPENDING TABLE isdokclprop
      WHERE io_class = u_class.
    SORT isdokclprop BY io_class prop_name.
  endif.

* ... Fill returned table ...

  READ TABLE isdokclprop
    WITH KEY io_class = u_class
    BINARY SEARCH
    TRANSPORTING NO FIELDS.
  IF sy-subrc EQ 0.
    tabix_aux = sy-tabix.
    LOOP AT isdokclprop FROM tabix_aux.
      IF isdokclprop-io_class NE u_class.
        EXIT.                          "<--- Exit from loop
      ENDIF.
      PERFORM get_attribute_definition
        USING    isdokclprop-prop_name
        CHANGING attribute_definition  subrc_aux.
      IF subrc_aux EQ 0.
        CLEAR t_attributes.
        MOVE-CORRESPONDING isdokclprop TO t_attributes.
        APPEND t_attributes.
      ENDIF.
    ENDLOOP.
  ENDIF.

if internal_mode = sdoka_internal_mode_active.
  read table t_attributes with key prop_name = 'CREATED_BY'.
    if sy-subrc <> 0.
      clear t_attributes.
      t_attributes-PROP_NAME = 'CREATED_BY'.
      t_attributes-x_unique = 'X'.
      append t_attributes.
    endif.
  read table t_attributes with key prop_name = 'CREATED_AT'.
    if sy-subrc <> 0.
      clear t_attributes.
      t_attributes-PROP_NAME = 'CREATED_AT'.
      t_attributes-x_unique = 'X'.
      append t_attributes.
    endif.
  read table t_attributes with key prop_name = 'LAST_CHANGED_BY'.
    if sy-subrc <> 0.
      clear t_attributes.
      t_attributes-PROP_NAME = 'LAST_CHANGED_BY'.
      t_attributes-x_unique = 'X'.
      append t_attributes.
    endif.
  read table t_attributes with key prop_name = 'LAST_CHANGED_AT'.
    if sy-subrc <> 0.
      clear t_attributes.
      t_attributes-PROP_NAME = 'LAST_CHANGED_AT'.
      t_attributes-x_unique = 'X'.
      append t_attributes.
    endif.

  PERFORM get_class_type
    USING    u_class
    CHANGING typ.
* SELECT SINGLE io_type FROM sdokiocl INTO typ WHERE io_class = u_class.
  if typ = 'IRPHIO'.
  read table t_attributes with key prop_name = 'STATE'.
    if sy-subrc <> 0.
      clear t_attributes.
      t_attributes-PROP_NAME = 'STATE'.
      t_attributes-x_unique = 'X'.
      append t_attributes.
    endif.
  endif.

sort t_attributes BY prop_name.
endif.

* ... Store returned table into buffer table ...

  buffertab-class = u_class.
  buffertab-mode = internal_mode.
  buffertab-attributes = t_attributes[].
  INSERT buffertab INDEX tabix_buf.

ENDFORM.                    "get_attributes_for_class


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 13:45 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Что когда в поиск по слову buffertab по всему коду смотрите, там нигде не видно, что она вообще заполняется хоть как то и при это она заполнена?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 14:08 
Специалист
Специалист

Зарегистрирован:
Вт, сен 16 2008, 13:15
Сообщения: 124
Пол: Мужской
спасибо за ответы
разобрался, табличка заполняется при входе в систему


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Чт, июн 03 2010, 15:59 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Besa написал:
Что когда в поиск по слову buffertab по всему коду смотрите, там нигде не видно, что она вообще заполняется хоть как то и при это она заполнена?

Ну как же не видно, очень хорошо видно:
Code:
* ... Store returned table into buffer table ...

  buffertab-class = u_class.
  buffertab-mode = internal_mode.
  buffertab-attributes = t_attributes[].
  INSERT buffertab INDEX tabix_buf.

ENDFORM.                    "get_attributes_for_class

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как узнать где заполняется переменная
СообщениеДобавлено: Вт, июн 08 2010, 10:35 
Специалист
Специалист

Зарегистрирован:
Вт, сен 16 2008, 13:15
Сообщения: 124
Пол: Мужской
аха, только до этого t_attributes[] были заполнены buffertab-attributes
а buffertab-attributes запоняется значениями из таблички


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

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


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

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


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

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