Текущее время: Пн, июл 28 2025, 18:35

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


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

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


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

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