Текущее время: Пн, июл 21 2025, 22:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: refresh для всех переменных?
СообщениеДобавлено: Чт, сен 20 2012, 15:23 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Добрый день, коллеги.. :)
Вопрос скорее из разряда невероятного, но все-таки может кто подскажет:
Есть ли в abap оператор или еще что, вызвав который можно привести все переменные в программе в начальный вид?
Ну т.е. :
Code:
DATA: a TYPE i VALUE 1,
      b TYPE i,
      v TYPE i.
b = 1.
v = a + b.
WRITE: / v, '= ', a, '+', b. " выводим: 2 =  1 + 1
чудо оператор.               " приводим переменные в начальный вид: CLEAR: b,v. a = 1.
WRITE: / v, '<>', a, '+', b. " выводим: 0 <> 1 + 0


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Чт, сен 20 2012, 15:36 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
интересно откуда такие мысли :shumlol:

в каком языке что-то похожее реализовано?
скриптовые без строгой типизации в расчет не берем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Чт, сен 20 2012, 15:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
Если совсем извращаться, а в вашем случае по другому нельзя:)
Простейшее решение написать обертку или реализовать через класс, где в конструкторе инициализируете все переменные.... и в один прекрасный момент вызываете его повторно.

П.С. А зачем вам такое нужно?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 06:32 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Можно вызвать тот же отчет через submit или вспомогательный отчет сделать и его через submit вызывать. А лучше в таком случае использовать локальные переменные вместо глобальных


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 07:12 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Например:
Пишем программу печати выходного документа Z_PRINT там form entry. До него объявляем переменные нужные для работы.
Если вызывать выходной документ по отдельности то все нормально, но если вызвать печать нескольких документов (vf31), то из программы сап не выходит и переменные не обновляет, соответственно приходится в form entry. чистить все объявленные вначале переменные программы. Если в этой же программе есть вызов ФМ, то бывают случае что в ФМ переменные не чистятся.. Собственно столкнувшись несколько раз с проблемой очистки перемнных возник вопрос.. :)
С классами не очень знаком, поэтому если есть простейший пример.. Хочется универсальное средство, которое можно потом использовать во всех программах, ФМ и т.д.
ps. всем доброго пятничного утра :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 07:43 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Korvax написал:
Например:
Пишем программу печати выходного документа Z_PRINT там form entry. До него объявляем переменные нужные для работы.
Если вызывать выходной документ по отдельности то все нормально, но если вызвать печать нескольких документов (vf31), то из программы сап не выходит и переменные не обновляет, соответственно приходится в form entry. чистить все объявленные вначале переменные программы. Если в этой же программе есть вызов ФМ, то бывают случае что в ФМ переменные не чистятся.. Собственно столкнувшись несколько раз с проблемой очистки перемнных возник вопрос.. :)
С классами не очень знаком, поэтому если есть простейший пример.. Хочется универсальное средство, которое можно потом использовать во всех программах, ФМ и т.д.
ps. всем доброго пятничного утра :)

В таком случае проще всего в form entry вызывать этот же отчет submit-ом и в start-of-selection писать код. Номер документа можно передать через параметр сел. экрана


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:04 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
мм.. кажется могут возникнуть проблемы:
например при вызове form entry передаются два параметра (код обработки и индикатор предпросмотра), если их например тоже можно передавать через параметр сел. экрана, то вот обратно вернуть? т.е. это изменяемый параметр (первый), который должен вернуться. Ну и дополнительно могут появиться проблемы с обновлением журнала обработки документа и еще где-нибудь.
Как уже писал хочется универсального решения (может класс написать которые узнает все переменные в программе и через assign field-symbols их обновляет?).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
совсем универсальное что-то вряд ли получится
выделение памяти обычно глубоко системная вещь и вряд ли вот так просто можно получить список всех переменных программы и тем более их обнулить, чревато всякими интересными последствиями

а вобще посмотрите в хелпе data cluster, может этого хватит


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:31 
Ассистент
Ассистент

Зарегистрирован:
Ср, окт 06 2004, 12:06
Сообщения: 35
Пол: Мужской
Может просканировать исходный текст программы найти
все объявления типа DATA b и т.д и почистить поля, или может есть готовые функции, которые возвращают все переменные в программе.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:34 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Korvax написал:
Как уже писал хочется универсального решения (может класс написать которые узнает все переменные в программе и через assign field-symbols их обновляет?).

Единственное универсальное решение - запускать программу каждый раз в новой внутренней сессии, т.е. через submit либо call transaction, либо call function ... destination. По другому никак не вычистить память во всех группах функций и классах, которые используются в программе


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
zsap написал:
Korvax написал:
Как уже писал хочется универсального решения (может класс написать которые узнает все переменные в программе и через assign field-symbols их обновляет?).

Единственное универсальное решение - запускать программу каждый раз в новой внутренней сессии, т.е. через submit либо call transaction. По другому никак не вычистить память во всех группах функций и классах, которые используются в программе

скорее все-таки хочется в любой момент выполнения программы обнулить все переменные и продолжить выполнение с этого места
а не заново начать выполнение программы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 08:43 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
nick_mi написал:
По другому никак не вычистить память во всех группах функций и классах, которые используются в программе
Ну для начала хочется сделать средство, которое чистит переменные только отдельной порграммы. Пусть очистка переменных внутри вызываемых функций пока останется на совести разработчиков этих ФМ.
MantiCore1977 написал:
Может просканировать исходный текст программы найти..
Есть примеры реализации? или названия подобных ФМ?
nick_mi написал:
скорее все-таки хочется в любой момент выполнения программы ...
эх.. мечты..
ps data cluster посмотрел, спасибо, интересно. Возможно пригодится при реализации подобного средства, но переходить на постоянное использование отдельных областей памяти при хранении переменных как то уж совсем неохото..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 09:15 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
Korvax написал:
MantiCore1977 написал:
Может просканировать исходный текст программы найти..
Есть примеры реализации? или названия подобных ФМ?

это не я писал, но так конечно можно
только анализ сложноват будет
подпрограммы с локальными переменными, инклуды, локальные классы со своими переменными, макросы, динамически создаваемые переменные и прочие радости.
можно пропустить пару переменных при формировании списка, и потом при очистке через field-symbols они выживут
а это уже чревато чудесами отладки и угрозой запоя :shumlol:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 09:27 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Ну да, с тегами попутался.. )) Странный баг, если при ответе выделить кусок сообщения и нажать "Цитата" у соседнего сообщения, то автор ставится от соседнего, а текст который выделил.
MantiCore1977 написал:
а это уже чревато чудесами отладки и угрозой запоя :shumlol:
тут уже параноя скоро возникнет.. в начале порграммы терь очистка всех переменных.. ну и по ходу программы чистим еще несколько раз ))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: refresh для всех переменных?
СообщениеДобавлено: Пт, сен 21 2012, 10:01 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Korvax написал:
Хочется универсальное средство, которое можно потом использовать во всех программах, ФМ и т.д.

Вообще этот вопрос должен решаться скорее культурой программирования, чем техническим средствами
- используйте как можно меньше глобальных переменных
- подпрограммы делайте небольшими (со своими локальными переменными), чтоб они выполняли только одну операцию. Тогда просто отпадет необходимость чистить переменные для дальнейшей работы

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


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

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


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

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


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

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