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

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


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

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


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

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