Crystal Report Возвращение пустого поля, когда ожидаемый возврат должен быть датой - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь использовать некоторые настраиваемые поля в своей базе данных, чтобы Crystal возвращал некоторые связанные даты. Logi c работает, когда каждая запись содержит данные. Но как только я оставляю произвольное поле одной записи пустым, оно прерывается.

IIF(    {PODetail.SpecialInstructions} = ""   , {PO.PromisedDate} + 45    , 
IIF(    {PODetail.SpecialInstructions} = "C1" , {PO._C1ETAPort} +10 , 
IIF(    {PODetail.SpecialInstructions} = "C2" , {PO._C2ETAPort} +10 ,
IIF(    {PODetail.SpecialInstructions} = "C3" , {PO._C3ETAPort} +10 ,
IIF(    {PODetail.SpecialInstructions} = "C4" , {PO._C4ETAPort} +10 ,
IIF(    {PODetail.SpecialInstructions} = "C5" , {PO._C5ETAPort} +10 ,
DATE(0,0,0) ))))))

См. Ожидаемый доход ниже -

Expected Return -

However, If I would remove a single records "C" Value the below occurs. This same issue happens when a "Special Instruction" or _C*ETAPort field is left blank.

Issue -

Проблема

Я ожидал, что для этих пустых значений будет иметь место PromiseDate logi c, и что C1 Logi c все еще будет на месте. Однако, похоже, здесь он взломал sh.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Я бы подумал об изменении формулы на оператор CASE. Будет легче читать и устранять неполадки, упростив лог c.

Select {PODetail.SpecialInstructions}
   Case "C1" : {PO._C1ETAPort} + 10
   Case "C2" : {PO._C2ETAPort} + 10
   Case "C3" : {PO._C3ETAPort} + 10
   Case "C4" : {PO._C4ETAPort} + 10
   Case "C5" : {PO._C5ETAPort} + 10
   Default   : {PO.PromisedDate} + 45 

Это избавляет от необходимости проверять NULL. Когда данные в поле SpecialInstructions оцениваются с помощью этого оператора CASE, если они не равны одному из ваших пяти C# значений, тогда просто по умолчанию используется ваш PromisedDate плюс 45. Однако, если вам нужен logi c, который обрабатывает значение по умолчанию отличается от значения NULL, тогда я бы рекомендовал использовать поле формулы для проверки значений NULL и возврата уникального значения, отличного от NULL, а затем использовать это поле формулы в операторе Select в этом операторе CASE. Операторы CASE в Crystal Report выполняют прямые сравнения, поэтому значения NULL не будут работать должным образом из-за несоответствия типов данных.

0 голосов
/ 17 июня 2020

Я не уверен, что это лучший ответ. Однако иногда при использовании функции IIF я не получаю ожидаемого дохода. Вместо этого - используя оператор IF THEN ELSE, который я делаю.

IF ISNULL ( {PODetail.SpecialInstructions} ) 
THEN {PO.PromisedDate} + 45 
ELSE

IF {PODetail.SpecialInstructions} = "C1"
THEN {PO._C1ETAPort} + 10
ELSE

IF {PODetail.SpecialInstructions} = "C2"
THEN {PO._C2ETAPort} + 10
ELSE

IF {PODetail.SpecialInstructions} = "C3"
THEN {PO._C3ETAPort} + 10
ELSE

IF {PODetail.SpecialInstructions} = "C4"
THEN {PO._C4ETAPort} + 10
ELSE

IF {PODetail.SpecialInstructions} = "C5"
THEN {PO._C5ETAPort} + 10
ELSE

DATE (0,0,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...