Текущее время: Сб, авг 02 2025, 23:39

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Динамические источник и приемник
СообщениеДобавлено: Пн, авг 06 2007, 13:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
Добрый день, у меня такой вопрос к знающим людя:

Создал динамически внутреннюю таблицу:
Code:
FORM f_create_dyn_table .
  PERFORM f_dyn_list USING 'LEDNR'.
  PERFORM f_dyn_list USING 'OBJNR'.
  PERFORM f_dyn_list USING 'GJAHR'.
  PERFORM f_dyn_list USING 'KSTAR'.
  PERFORM f_dyn_list USING 'WRTTP'.
  PERFORM f_dyn_list USING 'HRKFT'.
  PERFORM f_dyn_list USING 'VRGNG'.
  PERFORM f_dyn_list USING 'PARGB'.
  PERFORM f_dyn_list USING 'PAROB'.
  PERFORM f_dyn_list USING 'USPOB'.
  PERFORM f_dyn_list USING 'BEKNZ'.
  PERFORM f_dyn_list USING 'TWAER'.
  PERFORM f_dyn_list USING 'PERBL'.
  PERFORM f_dyn_list USING 'MEINH'.
  PERFORM f_increment USING p_periv p_perib.
  WHILE p_n LE p_k.
    CLEAR: fieldname.
    CASE p_curtp.
      WHEN '10'.
        CONCATENATE 'WOG' p_n INTO fieldname.
        PERFORM f_dyn_list USING fieldname.
      WHEN '30'.
        CONCATENATE 'WKG' p_n INTO fieldname.
        PERFORM f_dyn_list USING fieldname.
    ENDCASE.
    ADD 1 TO p_n.
  ENDWHILE.
  PERFORM f_increment USING p_periv p_perib.
  WHILE p_n LE p_k.
    CLEAR: fieldname.
    CONCATENATE 'MEG' p_n INTO fieldname.
    PERFORM f_dyn_list USING fieldname.
    ADD 1 TO p_n.
  ENDWHILE.
  ASSIGN it_data TO <fs_data>.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = it_dyn
    IMPORTING
      ep_table                  = <fs_data>
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.
  ASSIGN <fs_data>->* TO <dyn_table>.
* Create dynamic work area and assign to FS
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.                    " f_create_dyn_table

Создал динамичски список полей:
Code:
FORM f_build_field_list USING value(tabname) TYPE any.
  REFRESH field_list.
  CLEAR field_list.
  PERFORM f_list USING 'LEDNR'."FROM COSS and COSP
  PERFORM f_list USING 'OBJNR'."FROM COSS and COSP
  PERFORM f_list USING 'GJAHR'."FROM COSS and COSP
  PERFORM f_list USING 'KSTAR'."FROM COSS and COSP
  PERFORM f_list USING 'WRTTP'."FROM COSS and COSP
  PERFORM f_list USING 'HRKFT'."FROM COSS and COSP
  PERFORM f_list USING 'VRGNG'."FROM COSS and COSP
  IF tabname = 'COSP'.
    PERFORM f_list USING 'PARGB'."FROM COSS
  ENDIF.
  IF tabname = 'COSS'.
    PERFORM f_list USING 'PAROB'."FROM COSP
    PERFORM f_list USING 'USPOB'."FROM COSP
  ENDIF.
  PERFORM f_list USING 'BEKNZ'."FROM COSS and COSP
  PERFORM f_list USING 'TWAER'."FROM COSS and COSP
  PERFORM f_list USING 'PERBL'."FROM COSS and COSP
  PERFORM f_list USING 'MEINH'."FROM COSS and COSP
  PERFORM f_increment USING p_periv p_perib.
  WHILE p_n LE p_k.
    CLEAR: fieldname.
    CASE p_curtp.
      WHEN '10'.
        CONCATENATE 'WOG' p_n INTO fieldname.
        PERFORM f_list USING fieldname.
      WHEN '30'.
        CONCATENATE 'WKG' p_n INTO fieldname.
        PERFORM f_list USING fieldname.
    ENDCASE.
    ADD 1 TO p_n.
  ENDWHILE.
  PERFORM f_increment USING p_periv p_perib.
  WHILE p_n LE p_k.
    CLEAR: fieldname.
    CONCATENATE 'MEG' p_n INTO fieldname.
    PERFORM f_list USING fieldname.
    ADD 1 TO p_n.
  ENDWHILE.
ENDFORM.                    " f_build_field_list

При выполнении запроса, программа валится в дамп:
Code:
FORM f_get_data .
*........build field list from COSP....................................*
  PERFORM f_build_field_list USING 'COSP'.
  SELECT (field_list)
         APPENDING CORRESPONDING FIELDS OF TABLE <dyn_table>         FROM cosp
         FOR ALL ENTRIES IN it_obj
         WHERE objnr = it_obj-objnr
         AND lednr = '00'
         AND gjahr = p_gjahr
         AND wrttp IN ('01', '04')
         AND versn = p_versn
         AND perbl = '016'.
*........build field list from COSP....................................*
  PERFORM f_build_field_list USING 'COSS'.
  SELECT (field_list)
      APPENDING CORRESPONDING FIELDS OF TABLE <dyn_table>
      FROM coss
      FOR ALL ENTRIES IN it_obj
      WHERE objnr = it_obj-objnr
        AND lednr = '00'
        AND gjahr = p_gjahr
        AND wrttp IN ('01', '04')
        AND versn = p_versn
        AND perbl = '016'.
ENDFORM.                    " f_get_data

Пишет ошибку:DBIF_RSQL_INVALID_RSQL
Сразу хочу сказать в field_list находятся только те поля, которые содержатся в БД.


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
ROKO написал:
Пишет ошибку:DBIF_RSQL_INVALID_RSQL

Хочется знать больше подробностей из дампа

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические источник и приемник
СообщениеДобавлено: Пн, авг 06 2007, 15:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
sy-uname написал(а):
Хочется знать больше подробностей из дампа

Прошу
Цитата:

Error in the module RSQL accessing the database interface.


Что произошло?


Error in ABAP application program.

The current ABAP program "Z_TEST" had to be terminated because one
of the
statements could not be executed.

This is probably due to an error in the ABAP program.



Что Вы можете сделать?


Print out the error message (using the "Print" function)
and make a note of the actions and input that caused the
error.

To resolve the problem, contact your SAP system administrator.
You can use transaction ST22 (ABAP Dump Analysis) to view and administer
termination messages, especially those beyond their normal deletion
date.




Анализ ошибки


An exception occurred. This exception is dealt with in more detail below
. The exception, which is assigned to the class 'CX_SY_OPEN_SQL_DB', was
neither
caught nor passed along using a RAISING clause, in the procedure "F_GET_DATA"
"(FORM)"
.
Since the caller of the procedure could not have expected this exception
to occur, the running program was terminated.
The reason for the exception is:
The data read during a SELECT access could not be inserted into the
target field.
Either conversion is not supported for the target field's type or the
target field is too short to accept the value or the data are not in a
form that the target field can accept



Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические источник и приемник
СообщениеДобавлено: Пн, авг 06 2007, 15:52 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
ROKO написал:
Прошу

Отлично, судя по:
Цитата:
...
The data read during a SELECT access could not be inserted into the
target field.
Either conversion is not supported for the target field's type or the
target field is too short to accept the value or the data are not in a
form that the target field can accept


следует внимательно проверить соответствие типов используемых полей.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические источник и приемник
СообщениеДобавлено: Пн, авг 06 2007, 16:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
sy-uname написал(а):
ROKO написал:
Прошу

Отлично, судя по:
Цитата:
...
The data read during a SELECT access could not be inserted into the
target field.
Either conversion is not supported for the target field's type or the
target field is too short to accept the value or the data are not in a
form that the target field can accept


следует внимательно проверить соответствие типов используемых полей.

Не могу понять при чем здесь типы полей?
Как опеределить типы полей, которые я не знаю до выборки?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические источник и приемник
СообщениеДобавлено: Пн, авг 06 2007, 16:28 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
ROKO написал:
Не могу понять при чем здесь типы полей?
Как опеределить типы полей, которые я не знаю до выборки?

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, авг 06 2007, 17:32 
Специалист
Специалист

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
sy-uname дело говорит. Огласи код f_dyn_list, а то непонятно как fieldcatalog заполняется, возможно поля в динамической таблице типа char(1) получаются.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, авг 06 2007, 17:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
EvgenySA написал(а):
sy-uname дело говорит. Огласи код f_dyn_list, а то непонятно как fieldcatalog заполняется, возможно поля в динамической таблице типа char(1) получаются.

Так и было, он уже разобрался. :)


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

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


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

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


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

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