Текущее время: Вс, авг 03 2025, 15:05

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Баг или так и должен работать ranges помещенный в define ?
СообщениеДобавлено: Ср, июн 27 2007, 15:04 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Всем привет! ... я опечален

отработал такую классную вещь, а теперь когда она работает в цикле
я получаю бяку.
смысл таков

Code:
...
define coll_r
refresh my_ranges.
* потом наполняю его счетами
end-of-definition.

loop at it_scheta.
coll_r it_scheta-schet. " вызываю макрос передаю счета
write: / my_ranges-low. " всегда первый счет,
endloop.


если сделать CLEAR my_ranges то первый счет отрабатывает а потом
пусто, вроде как чистит так что ни чего не записывается.
в чем грабли, так работает define или ranges на столько устарел что юзать его нельзя?
вот думаю в form endform все это перенисти ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 27 2007, 15:06 
Гуру-модератор
Гуру-модератор
Аватара пользователя

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 27 2007, 15:15 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
определение
Code:
DEFINE parsing.
  REFRESH r_schet.
  WRITE: / 'после чистки ', r_schet-low.
  REFRESH prsChet.
  SPLIT &1 AT ';' INTO TABLE prsChet.
  if prsChet is INITIAL.
    loop AT prsChet.
      search prsChet-tekChet for '~'.
      if sy-subrc EQ 0.
        SPLIT prsChet-tekChet AT '~' INTO r_schet-low r_schet-high.
        r_schet-sign   = 'I'.
        r_schet-option = 'BT'.
        append r_schet.
      else.
        r_schet-sign   = 'I'.
        r_schet-option = 'EQ'.
        r_schet-low    = prsChet-tekChet.
        r_schet-high   = ''.
        append r_schet.
      endif.
    ENDLOOP.
  endif.
END-OF-DEFINITION.

вызов
Code:
loop at it_main.
*вызов "процедуры" парсинга в которую передаем поле со счетами
      parsing it_main-CHSKAT. " поле строка со списком счетов
      WRITE: / r_schet-low, r_schet-high.
endloop.


пример содержания поля со счетами
it_main-CHSKAT = '1210-01~1210-99;3110-01;1050-011US;999-10~999-99'


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 27 2007, 15:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Не надо путать внутреннюю таблицу и ее header-line:

REFRESH r_schet. - чистится таблица, header-line не очищен
WRITE: / 'после чистки ', r_schet-low. - вывод значения из header-line, неочищенного

if prsChet is INITIAL. - проверка header-line, не таблицы

if prsChet[] is INITIAL - вот теперь таблицы


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Salmaner написал:
Code:
DEFINE parsing.
  REFRESH r_schet.
  WRITE: / 'после чистки ', r_schet-low.
...


Refresh, насколько помню, чистит содержимое таблицы, не трогая её заголовок. для чистки заголовка пользуйтeсь clear.
Точно так-же проверять заполненность таблицы надо как
Code:
if prsChet[] is INITIAL.

т.к. if prsChet is INITIAL. проверит содержимое заголовка.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 27 2007, 19:23 
Начинающий
Начинающий

Зарегистрирован:
Пт, июн 22 2007, 13:28
Сообщения: 17
Откуда: Пермь
Что гадать то? Можно просто помотреть оп атладке, что как чиститься.
А вообще с заголовком уже не модно использовать внутренние таблицы - косяки левые появляются - типа этого.


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

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
stanabol написал(а):
Что гадать то? Можно просто помотреть оп атладке, что как чиститься.
А вообще с заголовком уже не модно использовать внутренние таблицы - косяки левые появляются - типа этого.


В отладке макрос не посмотришь.
Вообще, в виде макросов лучше оформлять только самый тривиальный и простой код. Все что сложнее - в подпрограммы.


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

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
stanabol написал(а):
... А вообще с заголовком уже не модно использовать внутренние таблицы - косяки левые появляются - типа этого.


дело не в том, модно или не модно - объекты/классы не поддерживают работу таблиц с хэдерлайном


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 28 2007, 07:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Сдлал вот так ...
Code:
DEFINE parsing.
  REFRESH r_schet.
  CLEAR r_schet.
  REFRESH prsChet.
  CLEAR prsChet.
  SPLIT &1 AT ';' INTO TABLE prsChet.
  if prsChet is INITIAL.
    loop AT prsChet.
      search prsChet-tekChet for '~'.
      if sy-subrc EQ 0.
        "if strlen( prsChet-tekChet ) = 15.
        SPLIT prsChet-tekChet AT '~' INTO r_schet-low r_schet-high.
        r_schet-sign   = 'I'.
        r_schet-option = 'BT'.
        append r_schet.
      else.
        "elseif strlen( prsChet-tekChet ) = 7.
        r_schet-sign   = 'I'.
        r_schet-option = 'EQ'.
        r_schet-low    = prsChet-tekChet.
        r_schet-high   = ''.
        append r_schet.
      endif.
    ENDLOOP.
  endif.
END-OF-DEFINITION.

и о щастье оно заработало всем всем башое пасибо!
Parazit'у отдельный сэнкс!
даже немного побаловался, работает только в этом таком варианте
Code:
REFRESH r_schet.
  CLEAR r_schet.
  REFRESH prsChet.
  CLEAR prsChet.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 28 2007, 08:13 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Salmaner написал:
Code:
REFRESH r_schet.
  CLEAR r_schet.
  REFRESH prsChet.
  CLEAR prsChet.

Можнл короче:
Code:
  CLEAR: r_schet. r_schet[], prsChet, prsChet[].
Цитата:
Code:
...  if prsChet is INITIAL.
...

А зачем здесь IF, непосредстаенно после Clear?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 28 2007, 08:22 
Менеджер
Менеджер

Зарегистрирован:
Вт, авг 17 2004, 13:14
Сообщения: 664
Откуда: Москва
Пол: Мужской
Salmaner, я смотрю, уже 2-й пост про макросы. САП не рекомендует их самому писать. Устаревшая технология.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 28 2007, 08:31 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
sy-uname и в правду так лучше. меньше кода и акуратненько.

Tim я в курсе что САП их не рекомендует юзать. но как мне быть если мне нужен механимз упращенных процедурок. а макросы как раз работают как простые процедурки с передачей параметров и изменением глобальных переменных.
просто с форм (подпраграмма) еще не разбирался.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 28 2007, 08:44 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
stanabol написал(а):
Что гадать то? Можно просто помотреть оп атладке, что как чиститься.
А вообще с заголовком уже не модно использовать внутренние таблицы - косяки левые появляются - типа этого.

Глюки от кривых рук и незнания инструмента, то бишь языка. Вы еще AT NEW/AT LAST/etc обругайте - тааакие глюки выдает...

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


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

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


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

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


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

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