Текущее время: Вт, июл 29 2025, 01:58

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Отсутствие в абапе булевского типа
СообщениеДобавлено: Ср, янв 28 2009, 11:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, дек 17 2008, 19:38
Сообщения: 434
Откуда: Санкт-Петербург
Пол: Женский
Поскольку в АВАРе нет булевского типа (true/false), приходится изгаляться примерно так:
в таблице ZTABLE поле IS_DOPSOGL типа char, 1, значение 'X' - типо истина, ' ' - ложь.
Условие выбора в select определяется динамически:
Code:
data:  STRING TYPE STRING, str1(1), str2(1) .
  str1 = ' '.
  str2 = 'X'.
  DEFINE SELECTTURN.
    select * from ZTABLE into corresponding fields of table itabl
        where  bukrs = p_bukrs
          and TYPDG in p_TYPDG
          and (&1).
  END-OF-DEFINITION.
  case 'X'.
    when p_md1.
      STRING = '(IS_DOPSOGL = str1 or IS_DOPSOGL = str2)'.
    when p_md2.
      STRING = 'IS_DOPSOGL = str1'.
    when p_md3.
      STRING = 'IS_DOPSOGL = str2'.
  endcase.

  SELECTTURN STRING.

Но подобное решение просто коробит мой взор.
Как можно более изящно записать условие в случае, когда IS_DOPSOGL любое?
В других языках можно было в select добавить банально and true - и работало!

_________________
Silence v.2.0


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отсутствие в абапе булевского типа
СообщениеДобавлено: Ср, янв 28 2009, 11:21 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Silence1 написала:
Поскольку в АВАРе нет булевского типа (true/false), приходится изгаляться примерно так:
в таблице ZTABLE поле IS_DOPSOGL типа char, 1, значение 'X' - типо истина, ' ' - ложь.
ADD1: Для эстетов есть группа типов (TYPE-POOL) ABAP, где определен тип ABAP_BOOL и константы ABAP_FALSE и ABAP_TRUE.
Цитата:
Условие выбора в select определяется динамически:
Code:
data:  STRING TYPE STRING, str1(1), str2(1) .
  str1 = ' '.
  str2 = 'X'.
  DEFINE SELECTTURN.
    select * from ZTABLE into corresponding fields of table itabl
        where  bukrs = p_bukrs
          and TYPDG in p_TYPDG
          and (&1).
  END-OF-DEFINITION.
  case 'X'.
    when p_md1.
      STRING = '(IS_DOPSOGL = str1 or IS_DOPSOGL = str2)'.
    when p_md2.
      STRING = 'IS_DOPSOGL = str1'.
    when p_md3.
      STRING = 'IS_DOPSOGL = str2'.
  endcase.

  SELECTTURN STRING.

Но подобное решение просто коробит мой взор.
Как можно более изящно записать условие в случае, когда IS_DOPSOGL любое?
В других языках можно было в select добавить банально and true - и работало!


Читаем справку к SELECT:
Цитата:
... The result of the logical expression (cond_syntax) is determined by the result of the contained logical expression. If cond_syntax is initial when the statement is executed, the logical expression is true.
т.е. достаточно:
Code:
when p_md1.
      clear STRING.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отсутствие в абапе булевского типа
СообщениеДобавлено: Ср, янв 28 2009, 11:33 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, дек 17 2008, 19:38
Сообщения: 434
Откуда: Санкт-Петербург
Пол: Женский
sy-uname написал(а):
ADD1: Для эстетов есть группа типов (TYPE-POOL) ABAP, где определен тип ABAP_BOOL и константы ABAP_FALSE и ABAP_TRUE.

Cпасибо! :)

Цитата:
... т.е. достаточно:
Code:
when p_md1.
      clear STRING.

Сработало!
Я думала and c пустышкой не прокатит)))))

СПАСИБО!

_________________
Silence v.2.0


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отсутствие в абапе булевского типа
СообщениеДобавлено: Ср, янв 28 2009, 11:35 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
еще можно использовать RANGES:
Code:
ranges: rstr1 for ZTABLE-IS_DOPSOGL.

if p_md1 = ''.
   rstr1-sign = 'I'. rstr1-option = 'EQ'.
   rstr1-low = p_md3.
   append rstr1.
endif.

select * from ZTABLE into corresponding fields of table itabl
        where  bukrs = p_bukrs
          and TYPDG in p_TYPDG
          and IS_DOPSOGL in rstr1.

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


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

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


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

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


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

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