Текущее время: Пт, мар 29 2024, 10:52

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Что означает оператор NOT в языке FORMCALC для PDF-формуляров?
СообщениеДобавлено: Ср, окт 06 2021, 17:43 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Добрый день! Пытаюсь понять, что означает оператор NOT в приведённом куске кода (язык FORMCALC), и понять не могу. Может, кто подскажет, что значит NOT к переменной "Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM". Вроде, оператор NOT должен использоваться к какому-то логическому выражению, а не к переменной. Если что, это кусок кода FORMCALC от стандартного SAP-формуляра.
Code:
IF ( NOT(Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM) and tab_row_count <= 1 ) then
   $ = "№      от   "
else   
   $ = Left(shpmnt_line,Len(shpmnt_line)-2)
   
ENDIF


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: язык FORMCALC для sfp формуляров
СообщениеДобавлено: Чт, окт 07 2021, 10:06 
Специалист
Специалист

Зарегистрирован:
Вт, дек 30 2008, 18:10
Сообщения: 171
Пол: Мужской
not The logical negation of the operand.

NOTE: The arithmetic negation of a null operand yields the result null, whereas the logical negation of
a null operand yields the Boolean result true. This is justified by the common sense statement: If null
means nothing, then “not nothing” should be something.

Проверка Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM на null


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: язык FORMCALC для sfp формуляров
СообщениеДобавлено: Чт, окт 07 2021, 14:59 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
andry_moz написал:
not The logical negation of the operand.

NOTE: The arithmetic negation of a null operand yields the result null, whereas the logical negation of
a null operand yields the Boolean result true. This is justified by the common sense statement: If null
means nothing, then “not nothing” should be something.

Проверка Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM на null


Спасибо!
Но работает очень странно этот оператор. Переменная Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM имеет тип char255. И когда в этой переменой содержится числовое значение, то NOT(Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM) = false. Если в переменной содержится буквенное значение, то NOT(Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM) = true.
Получается это не проверка Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM на null.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров?
СообщениеДобавлено: Пт, окт 08 2021, 16:18 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Зависит, по-видимому, от того, как значение из SHPMNT_DOC_NUM
конвертится в boolean при попытке применить к нему NOT.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров?
СообщениеДобавлено: Вт, окт 12 2021, 13:28 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1392
skaa написал(а):
Вроде, оператор NOT должен использоваться к какому-то логическому выражению, а не к переменной.

Да, но в качестве логического выражения может выступать переменная. Запись вида IF ( A ) эквивалентна выражению IF ( A = true ). В стартовом сообщении следует считать выражение как
Code:
IF ( NOT(Shipments.ShipmentsTab.DATA[0].SHPMNT_DOC_NUM) = true and tab_row_count <= 1 ) then

В языках с неявным преобразованиям к логическому типу писать выражение полностью ( A = true ) смысла нет, поэтому получается просто ( A ).

В описанном фрагменте выражение неоднозначность не с оператором NOT, а в приведении выражения к boolean. В том же описании к FormCalc:

When performing Boolean operations on non-Boolean operands, the non-Boolean operands are first promoted to their Boolean equivalent. If the non-Boolean operand does not successfully convert to a nonzero value, its value is true (1); otherwise its value is false (0). When promoting null-valued operands to a Boolean value, that value is always false (0). For example, the expression:
Code:
"abc" | 2
evaluates to 1. That is, false | true = true, whereas
Code:
if ("abc") then
  10
else
  20
endif
evaluates to 2


То есть, если в SHPMNT_DOC_NUM содержится число, то оно может быть приведено к boolean ( 0 - false, иначе - true). Если в SHPMNT_DOC_NUM не число, то оно всегда false. Оператор NOT просто инвертирует полученное значение.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров?
СообщениеДобавлено: Вт, окт 12 2021, 15:22 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Спасибо RoustR за столь подробное объяснение!


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

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


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

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


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

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