Текущее время: Вс, июл 27 2025, 09: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 часа


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

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


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

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