SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Что означает оператор NOT в языке FORMCALC для PDF-формуляров? https://www.sapboard.ru/forum/viewtopic.php?f=13&t=99790 |
Страница 1 из 1 |
Автор: | skaa [ Ср, окт 06 2021, 17:43 ] |
Заголовок сообщения: | Что означает оператор NOT в языке FORMCALC для PDF-формуляров? |
Добрый день! Пытаюсь понять, что означает оператор 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 |
Автор: | andry_moz [ Чт, окт 07 2021, 10:06 ] |
Заголовок сообщения: | Re: язык FORMCALC для sfp формуляров |
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 |
Автор: | skaa [ Чт, окт 07 2021, 14:59 ] |
Заголовок сообщения: | Re: язык FORMCALC для sfp формуляров |
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. |
Автор: | baboon [ Пт, окт 08 2021, 16:18 ] |
Заголовок сообщения: | Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров? |
Зависит, по-видимому, от того, как значение из SHPMNT_DOC_NUM конвертится в boolean при попытке применить к нему NOT. |
Автор: | RoustR [ Вт, окт 12 2021, 13:28 ] |
Заголовок сообщения: | Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров? |
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 evaluates to 210 else 20 endif То есть, если в SHPMNT_DOC_NUM содержится число, то оно может быть приведено к boolean ( 0 - false, иначе - true). Если в SHPMNT_DOC_NUM не число, то оно всегда false. Оператор NOT просто инвертирует полученное значение. |
Автор: | skaa [ Вт, окт 12 2021, 15:22 ] |
Заголовок сообщения: | Re: Что означает оператор NOT в языке FORMCALC для PDF-формуляров? |
Спасибо RoustR за столь подробное объяснение! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |