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

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


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

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


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

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