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

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


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

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


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

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