Текущее время: Вс, июл 20 2025, 17:15

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: CLASS и таблица
СообщениеДобавлено: Чт, июл 26 2007, 12:07 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
есть код.

например:
Code:
CLASS ALV_DISPLAY DEFINITION.
PUBLIC SECTION.
      DATA  tableName TYPE TABLE.
ENDCLASS.


получаем ошибку:

type or field "table" is generic.No table row has been specifield...

что не так?

мне нужна в классе таблица (внутр.) которую нужно туда (в класс) передать и над ней там потом "измываться".

Что я не так делаю?

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS и таблица
СообщениеДобавлено: Чт, июл 26 2007, 12:21 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Code:
CLASS ALV_DISPLAY DEFINITION.
PUBLIC SECTION.
      DATA  tableName TYPE TABLE.
ENDCLASS.


Синтаксис неправильный. Нужно, как минимум, указать тип строки таблицы.
Code:
DATA tableName TYPE TABLE OF line_type.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS и таблица
СообщениеДобавлено: Чт, июл 26 2007, 12:42 
Гуру-эксперт
Гуру-эксперт

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

например:
Code:
CLASS ALV_DISPLAY DEFINITION.
PUBLIC SECTION.
      DATA  tableName TYPE TABLE.
ENDCLASS.


получаем ошибку:

type or field "table" is generic.No table row has been specifield...

что не так?

SAP написал(а):
DATA - TABLE OF


Syntax
DATA itab { {TYPE tabkind OF [REF TO] type}
| {LIKE tabkind OF dobj} } ...
При объявлении данных необходимо явно указывать какого типа будут эти данные.
Цитата:
мне нужна в классе таблица (внутр.) которую нужно туда (в класс) передать и над ней там потом "измываться".

Что я не так делаю?

Если Вы будите работать с таблицами произвольных типов, то используйте ссылки.

Code:
CLASS alv_display DEFINITION.
  PUBLIC SECTION.
    DATA  tablename_r TYPE REF TO data .
ENDCLASS.                    "ALV_DISPLAY DEFINITION

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS и таблица
СообщениеДобавлено: Чт, июл 26 2007, 14:26 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
[quote="sy-uname"]Если Вы будите работать с таблицами произвольных типов, то используйте ссылки.

Code:
CLASS alv_display DEFINITION.
  PUBLIC SECTION.
    DATA  tablename_r TYPE REF TO data .
ENDCLASS.                    "ALV_DISPLAY DEFINITION



да, действительно таблицы произвольных типов.

а как мне привести этот тип потом к определенному типу.

например.

я ж <я не знать русский языка> явно в классе указать таблицу (вернее могу ну тогда класс будет явно привязан к таблице). Я хочу передать классу название таблицы а в классе уже табличную переменную сделать нужного типа.

как это сделать?

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 26 2007, 14:33 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Code:
You can use type casting dynamically when you assign a data object to a field symbol.
For example:
PARAMETERS tabname TYPE dd02l-tabname.
DATA:
  dummy TYPE i,
  line(65535) TYPE c.
FIELD-SYMBOLS <fs_wa> TYPE ANY.

ASSIGN line TO <fs_wa> CASTING TYPE (tabname).
You can now access line through <fs_wa> as if this elementary data object had the same type as the line type of the transparent table passed using tabname. (You define the dummy data object only to ensure that line has the correct alignment).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS и таблица
СообщениеДобавлено: Чт, июл 26 2007, 14:51 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hermitap написал(а):
..да, действительно таблицы произвольных типов.
а как мне привести этот тип потом к определенному типу.
например.
я ж <я не знать русский языка> явно в классе указать таблицу (вернее могу ну тогда класс будет явно привязан к таблице). Я хочу передать классу название таблицы а в классе уже табличную переменную сделать нужного типа.

как это сделать?

Например так:
Code:
CREATE DATA tablename_r TYPE STANDARD TABLE OF (tablename).

Пример приведение типов vga написал.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 26 2007, 16:20 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
что-то я еще путаюсь в этом.

такой пример.

Обьявлен метод. нужно ему передать внешнюю (для класса) таблицу и слегка ее обработать.

Делаем.

Code:
METHODS: READ EXPORTING tblName TYPE TABLE.
 
..


METHOD READ.
  READ TABLE tblName with key UNIQID = iUNIQID.  < Тут ошибка

ENDMETHOD.


подскажите как правильно тут написать
READ TABLE tblName with key UNIQID = iUNIQID чтиобы я мог работать внутри класса с внешней таблицей.

вызов будет такой.

Code:
DATA mytbl type table of r3table with header line.
......

CALL METHOD MYCLASS->READ  IMPORTING tblname = mytbl[].

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 26 2007, 17:12 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hermitap написал(а):
Делаем.
Code:
METHODS: READ EXPORTING tblName TYPE TABLE.
..

METHOD READ.
  READ TABLE tblName with key UNIQID = iUNIQID.  < Тут ошибка

ENDMETHOD.

подскажите как правильно тут написать
READ TABLE tblName with key UNIQID = iUNIQID чтиобы я мог работать внутри класса с внешней таблицей.


Вам-же уже написали - используйте ASSIGN ... CASTING ... и/или вариант READ TABLE itab WITH KEY (name) = dobj1
Цитата:
вызов будет такой.

Code:
DATA mytbl type table of r3table with header line.
......

CALL METHOD MYCLASS->READ  IMPORTING tblname = mytbl[].
Кстати, в r3table нет поля UNIQID и объявлять таблицу с заголовком для использования с ABAP-OO не имеет большого смысла и даже вредно.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 26 2007, 17:43 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
sy-uname написал(а):
Hermitap написал(а):
Делаем.
Code:
METHODS: READ EXPORTING tblName TYPE TABLE.
..

METHOD READ.
  READ TABLE tblName with key UNIQID = iUNIQID.  < Тут ошибка

ENDMETHOD.

подскажите как правильно тут написать
READ TABLE tblName with key UNIQID = iUNIQID чтиобы я мог работать внутри класса с внешней таблицей.


Вам-же уже написали - используйте ASSIGN ... CASTING ... и/или вариант READ TABLE itab WITH KEY (name) = dobj1


если не трудно, напишите код живой. буду благодарен.. что то у меня не получается.

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 26 2007, 18:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hermitap написал(а):
...

если не трудно, напишите код живой. буду благодарен.. что то у меня не получается.

Думаю что проще посмотреть как работают с таблицами неопределённого типа например в том-же ALV (CL_GUI_ALV_GRID) и/или в ФМ RH_READ_INFTY (таблицы почти неопределённого типа)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 27 2007, 09:10 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
короче разобрался.. спасибо за наводки.

появился нубский вопрос

в чем отличие

Code:
ASSIGN hl_data to <hline>.


от
Code:
ASSIGN hl_data->* to <hline>.


что дает значек "->*" ?
У меня с этим значком сразу многое заработало. А что значит НЭПАНЫМАЮ :)

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Hermitap написал(а):
в чем отличие

Code:
ASSIGN hl_data to <hline>.


от
Code:
ASSIGN hl_data->* to <hline>.


что дает значек "->*" ?


Если hl_data - это указатель, то ->* разименование указателя.
В первом случае ссылаешься на указатель (4 байтовое целое), а во втором к данным, на которые этот указатель указывает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 27 2007, 10:02 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
понял.

порследний вопрос.


Code:
  FIELD-SYMBOLS      <table> TYPE STANDARD TABLE.
  FIELD-SYMBOLS      <hline> TYPE ANY.
  DATA  hl_data  TYPE REF TO data.


  ASSIGN tblName[] to <table>.
  CREATE DATA hl_data LIKE LINE OF <table>.
  ASSIGN hl_data->* to <hline>.

  .....


READ TABLE <table> INTO <hline> INDEX LS_ROW_ID.
     if sy-tabix <> 0.
       fieldvalue = <hline>-MyField.       "<-- Ошиибка
     endif.


в поле fieldvalue нужно считать значение определенного поля.
но выдается ошибка что <hline> не структура.
Хотя в отладчике я все вижу и структуру и значения.

Как правильно написать строчку <hline>-myField

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 27 2007, 10:12 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hermitap написал(а):
понял.

порследний вопрос.

Оптимизм - хорошо, но что-бы настолько.


Code:
  FIELD-SYMBOLS      <table> TYPE STANDARD TABLE.
  FIELD-SYMBOLS      <hline> TYPE ANY.
  FIELD-SYMBOLS      <field> TYPE ANY. "SY-UNAME
  DATA  hl_data  TYPE REF TO data.


  ASSIGN tblName[] to <table>.
  CREATE DATA hl_data LIKE LINE OF <table>.
  ASSIGN hl_data->* to <hline>.

  .....


READ TABLE <table> INTO <hline> INDEX LS_ROW_ID.
     if sy-tabix <> 0. "SY-UNAME: тут у Вас первая ошибочка - должно быть eq
*SY-UNAME:{
*       fieldvalue = <hline>-MyField.       "<-- Ошиибка
       ASSIGN COMPONENT 'MYFIELD' OF STRUCTURE <hline> TO <field>.
       if sy-subrc eq 0.
         fieldvalue = <field>.
       endif.
*SY-UNAME:}
     endif.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 27 2007, 10:18 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
Цитата:
Оптимизм - хорошо, но что-бы настолько.


Имелось в виду в этой теме последний вопрос. :oops:

Большое спасибо.. Вы очень помогли. :pivo:

_________________
Теперь я программлю на ABAP/4... правда пока еще только учусь.
Но я очень скучаю по С#


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

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


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

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


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

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