Текущее время: Вт, май 13 2025, 16:22

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 28 2004, 17:56 
Гость
Странно, при попытке выполнить любой из описанных выше примеров (пригодных для 4.6С) у меня на операторе ASSIGN ('(Z_TEST_PRG)dt') TO <fs>. неизменно sy-subrc = 4.
Может какие здесь хитрости есть (последовательность вызовов, тип программ, еще что-то)?


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Надо название переменной тоже писать большими буквами, проверено в 4.7:
Code:
ASSIGN ('(Z_TEST_PRG)DT') TO <fs>.

Может это только с базиса 6.10 работает? К сожалению сейяас негде проверить.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 28 2004, 19:40 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
CoMan написал(а):
Странно, при попытке выполнить любой из описанных выше примеров (пригодных для 4.6С) у меня на операторе ASSIGN ('(Z_TEST_PRG)dt') TO <fs>. неизменно sy-subrc = 4.
Может какие здесь хитрости есть (последовательность вызовов, тип программ, еще что-то)?


Если делаешь ASSIGN по имени переменной - имя переменной должно быть полностью ОБЯЗАТЕЛЬНО в верхнем регистре.
То же самое относится ко всем другим случаям, когда идет любое обращение по имени какого-либо объекта в литеральном виде (вызов ФМ, вызов перформа, и т.д., и т.п.).

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 06:36 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
У меня, например, 100% работает такая конструкция (хотя и используются не заглавные символы для обозначения переменной):

Т.е в расширении MIGO нужно получить данные по полям, введенным
на 1 экране:

data: i_godynpro type godynpro.

field-symbols: <x_godynpro> type any.

assign ('(SAPLMIGO)godynpro') to <x_godynpro>.

if sy-subrc eq 0.
move: <x_godynpro> to i_godynpro.
....
endif.

От чего это зависит, что в одном случае конструкция работает (как у меня), а в другом нет (как у CoMan) ?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 09:41 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
OlegDm написал(а):
От чего это зависит, что в одном случае конструкция работает (как у меня), а в другом нет (как у CoMan) ?


Написать слово в верхнем регистре несложно? Или перевести в верхний регистр значение строковой переменной?

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

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 10:34 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
111 написал(а):
OlegDm написал(а):
От чего это зависит, что в одном случае конструкция работает (как у меня), а в другом нет (как у CoMan) ?


Написать слово в верхнем регистре несложно? Или перевести в верхний регистр значение строковой переменной?

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


Ннндда, на грабли иной раз полезно наступать - лучше запоминается :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 11:19 
Гость
Пробовал я разные регистры - не вышел у меня "каменный цветок" ... :?
Еще вопрос - есть ФМ, в нем объявлены глобальные переменные (на уровне ФГ), если я гружу ФГ в память где работает программа (вызвав один из ФМ-ов), могу ли я получить ссылку указанным выше методом на одну из глобальных переменных ФГ в 4.6С?
Попутный вопрос можно ли грузануть ФГ в память не вызывая ФМ?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 11:33 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
CoMan написал(а):
Пробовал я разные регистры - не вышел у меня "каменный цветок" ... :?


Проверено не раз - все работает. Значит, ищи ошибки.

CoMan написал(а):
Еще вопрос - есть ФМ, в нем объявлены глобальные переменные (на уровне ФГ), если я гружу ФГ в память где работает программа (вызвав один из ФМ-ов), могу ли я получить ссылку указанным выше методом на одну из глобальных переменных ФГ в 4.6С?


ДА. Можно использовать переменные, если они объявлены на уровне группы функций (в области глобальных переменных группы функций).

CoMan написал(а):
Попутный вопрос можно ли грузануть ФГ в память не вызывая ФМ?


Вряд ли. Программу ФГ (группы функций) надо инициализировать хитрым способом. Проще всего это сделать автоматом при вызове какого-либо ФМ из этой ФГ.

Далее - программа ФГ живет, пока живет вызвавшая ФМ программа. Например, можно одним ФМ передавать в ФГ данные, а другим - читать эти же данные - они легко доживут от одного вызова ФМ до другого.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 12:17 
Гость
Мд-а, надо где-то руки поправить :oops:

С ФГ все получилось, боагодарю за ответ.

А вот с программами не катит :( делал так (эмулируя вызов стандартной программой пользовательского расширения, именно из-за чего и интересует ASSIGN):

REPORT Z1.
DATA: dt(4) type c value 'TEST'.
SUBMIT Z2 AND RETURN.

REPORT Z2.
DATA: dt(4) type c.

DATA dref TYPE REF TO data.
FIELD-SYMBOLS: <dt> TYPE c.

CREATE DATA dref TYPE sec_d_references.
ASSIGN dref->* TO <dt>.
ASSIGN ('(Z1)DT') TO <dt>.
"здесь sy-subrc = 4

Что не так сделал?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 12:28 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
CoMan написал(а):
Code:
  SUBMIT Z2 AND RETURN.

Что не так сделал?


Скорее всего, дело в том, что такие извраты возможны только в пределах одной сессии.
А
===================
The addition AND RETURN starts the executable program in a new internal session. The session for the calling program is retained. Once program access is completed, program execution for the calling program continues after the SUBMIT statement.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 13:45 
Гость
Ясно ...
Другой вопрос пытаюсь получить ссылку на объектную переменную, причем класс определен локально в стандартной програграмме, чтобы поличть аналогичный класс у себя включил соответсвующий инклуд.
Но при попытке сделать ASSIGN ('(SAPLFVW4)OBJ_CACHE') TO <obj_cache>. Программы уходит в дамп с сообщением "You attempted to assign a field to a typed field symbol, but the field does not have the required type."
Я пытаюсь сделать что-то невозможное?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 14:16 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Цитата:
Скорее всего, дело в том, что такие извраты возможны только в пределах одной сессии.

Совершенно верно. Попробуйте вместо SUBMIT использовать CALL FUNCTION.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 14:35 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
CoMan написал(а):
Но при попытке сделать ASSIGN ('(SAPLFVW4)OBJ_CACHE') TO <obj_cache>. Программы уходит в дамп с сообщением "You attempted to assign a field to a typed field symbol, but the field does not have the required type."
Я пытаюсь сделать что-то невозможное?


Попробуй сделать принудительный кастинг
ASSIGN ('(SAPLFVW4)OBJ_CACHE') TO <obj_cache> CASTING TYPE <ТвойКласс>.

Но не уверен.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 29 2004, 16:11 
Гость
111 написал(а):
Попробуй сделать принудительный кастинг
ASSIGN ('(SAPLFVW4)OBJ_CACHE') TO <obj_cache> CASTING TYPE <ТвойКласс>.

Но не уверен.


Отвечает - Field symbol "<obj_cache>" may not have a type.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, янв 04 2005, 12:34 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
Прошу прощения, что вопрос не совсем по данной теме. Но очень близко. Я посмотрел, что стандартные отчеты (вроде MC.5 и прочих) заполняют внутреннюю таблицу int_s000 посредством вызова подпрограмм в других программах. Я тоже хотел таким образом заполнить эту структуру (нужно было для отчета). Но я не знаю, как заставить другую программу заполнить мою структуру. Подскажите, может, кто делал подобное.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

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


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

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


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

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