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

Часовой пояс: 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 часа


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

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


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

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