Текущее время: Ср, июл 23 2025, 23:27

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 13:25 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 14 2004, 18:02
Сообщения: 415
Откуда: из HR
Пол: Мужской
Коллеги, добрый день,
прошу совета, мне нужно в методе класса, динамически по указанному ТН и номеру инфо-типа, читать любую таблицу PA.
Приведенный ниже код работает, если класс объявлен в программе, но как только я попытался реализовать это через SE24, падает с ошибкой:
The MOVE-CORRESPONDING statement can only be used on operands with a
structured type.
In the case at hand, this condition is not fulfilled: Operand "IS_INFTY" has
the type "SETST_TYPE_ANY".


в коде программы из DEFINITION класса параметр is_infty объявлен как: CHANGING is_infty TYPE any
Code:
  DATA : pannnn_ref_wa  TYPE REF TO data
       .
  FIELD-SYMBOLS : <pannnn_wa> TYPE any
      .
   ... < задаем тип dbname > ...
  CREATE DATA pannnn_ref_wa TYPE (dbname).
  ASSIGN pannnn_ref_wa->* TO <pannnn_wa>.
  SELECT SINGLE * FROM (dbname) INTO <pannnn_wa> WHERE < какое-то условие >.
  MOVE-CORRESPONDING <pannnn_wa> TO is_infty. <- здесь падает в ошибку

попытался в методе прописать присвоение параметру is_infty по другому:
Code:
  DATA : pannnn_ref_wa  TYPE REF TO data
           .
  FIELD-SYMBOLS : <pannnn_wa> TYPE any
                           , <is_infty>  TYPE any
                 .
   ... < задаем тип dbname > ...
  CREATE DATA pannnn_ref_wa TYPE (dbname).
  ASSIGN pannnn_ref_wa->* TO <pannnn_wa>.

  ASSIGN is_infty TO <is_infty> CASTING LIKE <pannnn_wa>. <- теперь здесь падает в ошибку

  SELECT SINGLE * FROM (dbname) INTO <pannnn_wa> WHERE < какое-то условие >.
  MOVE-CORRESPONDING <pannnn_wa> TO is_infty.

однако, падает с другой ошибкой:
The source field is too short.
In the running program "ZZZZZZZZZZ===================CP" a field should have
been assigned to a field
symbol, which is shorter than the type of the field symbol.
This is not possible.
It is a statement of the form ASSIGN f TO <fs> CASTING...
or ASSIGN f TO <fs> with a field symbol that was created with the
STRUCTURE addition.


буду рад услышать, Ваши советы.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 13:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
А к чему такие сложности? В приведенном коде проще было бы делать
Code:
SELECT SINGLE * FROM (dbname) INTO CORRESPONDING FIELDS OF is_infty WHERE < какое-то условие >.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 13:46 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 14 2004, 18:02
Сообщения: 415
Откуда: из HR
Пол: Мужской
не катит, вот дамп:
The program has tried to execute a SELECT statement which contains
an INTO clause with the addition "CORRESPONDING FIELDS". In such a
case, the target area of the INTO clause must be structured. However,
the target area has the unstructured (line) type "C".


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 13:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
А вот эта ваша is_infty она точно структурирована? а типы полей в ней - совпадают с типами полей таблицы, из которой вы пытаетесь взять данные? По сообщению об ошибке, очень похоже что вы пытаетесь запихнуть данные в поля с одинаковыми названиями, но разными типами.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 13:54 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 14 2004, 18:02
Сообщения: 415
Откуда: из HR
Пол: Мужской
да нет конечно, она типа ANY, иначе как мне считывать ЛЮБУЮ таблицу? НО в при объявлении в программе локального класса такая конструкция работает без проблем :?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса  Тема решена
СообщениеДобавлено: Вс, фев 05 2012, 13:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Мы друг друга не понимаем несколько: тип ANY - это тип параметра в методе. А фактически передаваемый параметр в метод - он структурирован? Я говорю о реальной переменной с которой вызывается метод. Посмотрите в отладке на содержимое и структуру вашей переменной в момент входа в метод перед дампом. Там все нормально с типами полей, которые вы берете из СУБД? В отладке. несмотря на тип параметра ANY Вы будете видеть настоящую структуру переменной.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


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

Зарегистрирован:
Чт, окт 14 2004, 18:02
Сообщения: 415
Откуда: из HR
Пол: Мужской
БОЛЬШОЕ спасибо, коллега, все работает, просто я пытался отладить метод напрямую, без присвоения типа :D


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: динамически селект работает в программе, но не работает в методе класса
СообщениеДобавлено: Вс, фев 05 2012, 16:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Не за что.
Кстати, для отладки сложных классов\методов и т.д. очень может помочь использование unit-test

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


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

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


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

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


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

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