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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как изменить (тип, длину) поля динамической таблицы ?
СообщениеДобавлено: Пн, июл 11 2011, 12:03 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 26 2008, 17:09
Сообщения: 34
Добрый день, такой вопрос возник.

Создаю динамическую таблицу
Code:
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fields
    IMPORTING
      ep_table = t_table.

  ASSIGN t_table->* TO <f_table>.
  CREATE DATA t_row LIKE LINE OF <f_table>.
  ASSIGN t_row->* TO <f_row>.


перед созданием динам. таблицы указываю названия полей, тип, длину
Code:
loop at it_components.
    assign it_components-compname to <f>.
    wa_field-fieldname = <f>.
    assign it_components-type to <f>.
    wa_field-datatype = <f>.
    assign it_components-olen to <f>.
    wa_field-intlen = <f>.
    assign it_components-decs to <f>.
    wa_field-decimals = <f>.
   APPEND wa_field TO it_fields.
endloop.

потом мне нужно перебросить часть данных из обычной внутренней таблицы в динамическую
Code:
  loop at itab assigning <f_row>.
    append <f_row> to <f_table>.
  endloop.


Проблема в том что некоторые поля в itab имеют тип 'P' и DECIMALS 2.
Когда я смотрю на эти поля в динамической таблице <f_table> они имеют тип 'С' 21.
Соответственно когда происходит append, все поля где не совпадает тип у меня смещены и отображают ерунду, с обычными полями все гуд.

Вопрос что мне сделать чтобы в динамическую таблицу нормально передать данные?
Или как можно изменить тип поля динамической таблицы, перед тем как сделать append в нее.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить (тип, длину) поля динамической таблицы ?
СообщениеДобавлено: Пн, июл 11 2011, 12:32 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Цитата:
Проблема в том что некоторые поля в itab имеют тип 'P' и DECIMALS 2.
Когда я смотрю на эти поля в динамической таблице <f_table> они имеют тип 'С' 21.
Соответственно когда происходит append, все поля где не совпадает тип у меня смещены и отображают ерунду, с обычными полями все гуд.

Вопрос что мне сделать чтобы в динамическую таблицу нормально передать данные?
Или как можно изменить тип поля динамической таблицы, перед тем как сделать append в нее.

Что это значит когда смотрю? Вы ведь сами изначально создаете поля с типом с21 или нет? Ерунда - это пробелы впереди? Что дальше собираетесь делать с этой диначески заполненной динамической таблицей?
Объясните для чего проводить такие манипуляции.
Какая у Вас версия системы?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить (тип, длину) поля динамической таблицы ?
СообщениеДобавлено: Пн, июл 11 2011, 13:58 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 26 2008, 17:09
Сообщения: 34
Besa написал:
Цитата:
Проблема в том что некоторые поля в itab имеют тип 'P' и DECIMALS 2.
Когда я смотрю на эти поля в динамической таблице <f_table> они имеют тип 'С' 21.
Соответственно когда происходит append, все поля где не совпадает тип у меня смещены и отображают ерунду, с обычными полями все гуд.

Вопрос что мне сделать чтобы в динамическую таблицу нормально передать данные?
Или как можно изменить тип поля динамической таблицы, перед тем как сделать append в нее.

Что это значит когда смотрю? Вы ведь сами изначально создаете поля с типом с21 или нет? Ерунда - это пробелы впереди? Что дальше собираетесь делать с этой диначески заполненной динамической таблицей?
Объясните для чего проводить такие манипуляции.
Какая у Вас версия системы?


версия системы SAP ERP 6.0

Для чего все это, есть пользовательская настроечная таблица, в зависимости от добавления там новых настроек, будет расширяться динамическая таблица. А там уже буду с ней работать.

Стараюсь изначально задать такие параметры
Code:
    wa_field-datatype = 'P'.
    wa_field-intlen = 21.
    wa_field-outputlen = 21.
    wa_field-decimals = 002.
    APPEND wa_field TO it_fields.


ерунда это вот такая картина
Code:
00001975   ИВАНОВ ИВАН ИВАНЫЧ   92201401   К2301      ######(,#####'6<


а ITAB, и после присвоения <F_ROW> имеет такой вид
Code:
PERNR                                         00001975      N(8)
SNAME                                         ИВАНОВ ИВАН ИВАНЫЧ      C(30)
VDSK1                                         92201401      C(14)
KOSTL                                         К2301      C(10)
AUFNR                                               C(12)
TRZTR                                         12.82      P(8) DECIMALS 2
ZP                                         273.63      P(8) DECIMALS 2


я так понимаю изначально <f_table> имеет поля не того типа что мне нужны, тогда вопрос как правильно их задать?
ниже часть кода
Code:
field-symbols: <f_table> type standard table,
               <f_row>,
               <f_field>.

data: t_table type ref to data,
  t_row type ref to data,
  col_name(4) type c,
  wa_field type lvc_s_fcat,
  it_fields type lvc_t_fcat,
  cur_index type i,
  cur_value type i.

CALL FUNCTION 'GET_COMPONENT_LIST'
         EXPORTING
              program    = 'Z_********'
              fieldname  = 'ITAB'
         TABLES
              components = it_components.

  loop at it_components.
    assign it_components-compname to <f>.
    wa_field-fieldname = <f>.
    assign it_components-type to <f>.
    wa_field-datatype = <f>.
    assign it_components-olen to <f>.
    wa_field-intlen = <f>.
    assign it_components-decs to <f>.
    wa_field-decimals = <f>.
    APPEND wa_field TO it_fields.
  endloop.

  loop at t_zhrfi01.
    assign t_zhrfi01-grp to <f>.
    wa_field-fieldname = <f>.
    wa_field-datatype = 'P'.
    wa_field-intlen = 21.
    wa_field-decimals = 002.
    wa_field-outputlen = 21.
    APPEND wa_field TO it_fields.
  endloop.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fields
    IMPORTING
      ep_table = t_table.

  ASSIGN t_table->* TO <f_table>.
  CREATE DATA t_row LIKE LINE OF <f_table>.
  ASSIGN t_row->* TO <f_row>.

  loop at itab assigning <f_row>.
    append <f_row> to <f_table>.
  endloop.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить (тип, длину) поля динамической таблицы ?  Тема решена
СообщениеДобавлено: Пн, июл 11 2011, 14:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Система свежая, можете заюзать http://help.sap.com/abapdocu_70/en/ABENNEWS-640-RTTI.htm + поиск по форуму, много примеров и обсуждений.

Если Вам дальше потом работать с полями типа P, Вам никак не подойдет CHAR. Вы не правильно объявляете поля подобного рода.
По-моему так
Code:
DATATYPE CURR
INTTYPE P
INTLEN ...

Или указать просто ссылку на глобальный тип и все.
Code:
  WA_FCAT-REF_FIELD = 'DMBTR'.
  WA_FCAT-REF_TABLE = 'BSEG'.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить (тип, длину) поля динамической таблицы ?
СообщениеДобавлено: Пн, июл 11 2011, 14:55 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 26 2008, 17:09
Сообщения: 34
Besa

спасибо, реально помогли.


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

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


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

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


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

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