Неожиданный результат от функции отображения - PullRequest
0 голосов
/ 14 февраля 2012

Моя значительная часть других использует Crystal Reports в ходе своих обязанностей и пришла ко мне за помощью.Она написала функцию отображения, как показано ниже, и удивлена, что получает значение сбоя, когда у клиента несколько карт (см. Диаграмму).

diagram

В этой модели, когда клиент посещает врача, карта клиента должна быть указана в записи о посещении клиента для целей правительственной отчетности.Хотя идентификатор карты не является концептуально необязательным, вполне возможно, что карта не находится в файле во время регистрации сведений о посещении, поэтому их система позволяет оставить ее временно незаполненной.Это состояние представлено условием «нет карты» в приведенной ниже функции сопоставления.

Неудовлетворенный моим ответом о том, что ни одно из ее условий не выполнено, она попросила меня отправить ее обращение за помощью.

Ниже приведен код Crystal Basic из ее функции отображения.Она знает, что в последнем условии есть необработанный случай, и в этом случае будет отображаться пробел, который не является наблюдаемым поведением.Имена на диаграмме не совпадают с именами в коде функции отображения, потому что диаграмма - это мой синтез большого количества размахиваний руками и объяснений, тогда как код вставляется непосредственно из отчета и содержит фактические имена полей.

if ({awt_temp.Service_code} = "DOM") and ({Card_Type.Card_Type_ID} = 21) then 
  {Card_Holder.Card_No}
else if ({awt_temp.Service_code} = "MANT") and ({Card_Type.Card_Type_ID} = 25) then
  {Card_Holder.Card_No}
else if ({awt_temp.Service_code} = "PC") and ({Card_Type.Card_Type_ID} = 22) then 
  {Card_Holder.Card_No}
else if ({awt_temp.Service_code} = "RES") and ({Card_Type.Card_Type_ID} = 24) then 
  {Card_Holder.Card_No}
else if ({awt_temp.Service_code} = "SOC") and ({Card_Type.Card_Type_ID} = 23) then
  {Card_Holder.Card_No}
else if not ({Card_Type.Description} startswith "vhc") then 
  "no card"

Нет смысла упоминать, что функцию отображения лучше всего обрабатывать с помощью соединения с таблицей поиска.Она не может изменить схему.

1 Ответ

0 голосов
/ 14 февраля 2012

Вероятно, это связано со значением NULL.В начале формулы всегда следует проверять наличие нулей:

if Isnull({awt_temp.Service_code}) OR Isnull({Card_Type.Card_Type_ID}) then 
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...