Кристалл Отчет: Как использовать оператор ‘in’ с условиями if

Вопрос или проблема

Я добавил эту формулу отчета Crystal, но она не выполняется и вместо этого отображает ошибку. Пожалуйста, смотрите ниже для справки.

введите описание изображения здесь


Если {?@btype} = “Все”
то {Sp_StockEndingInventory_Batches;1.BATCH_TYPE_} в (‘ПАКЕТ’, ‘НЕ ПАКЕТ’)
иначе {?@btype}={?@btype}={Sp_StockEndingInventory_Batches;1.BATCH_TYPE_}

Есть идеи? Заранее спасибо.

Я попытался изменить кавычки с одинарных на двойные, но это по-прежнему не работает.

Ответ или решение

Вопрос о том, как использовать оператор ‘in’ с условиями ‘if’ в Crystal Reports, является распространенной проблемой среди разработчиков отчетов. При анализе представленного вами кода и описания ошибок, давайте шаг за шагом разберем, в чем может заключаться проблема, и предложим корректное решение.

Анализ проблемы

Ваш код содержит несколько ошибок синтаксиса и логики. Рассмотрим ваш оригинальный код:

If {?@btype} = "All"
then {Sp_StockEndingInventory_Batches;1.BATCH_TYPE_} in ('BATCHED', 'NON-BACTHED')
else {?@btype}={?@btype}={Sp_StockEndingInventory_Batches;1.BATCH_TYPE_}
  1. Синтаксис структурирования выражений: В вашем выражении отсутствует правильная структура логической проверки. Оператор in не может быть использован так, как это сделано в вашем коде.

  2. Логика сравнения: В части условия else присутствует ошибка. Выравнивание операторов сравнения приводит к неопределённой логике.

Исправленное выражение

Для правильного применения оператора ‘in’ с условиями ‘if’, следует переписать ваш код. Вот пример того, как может выглядеть исправленный код:

If {?@btype} = "All" 
then {Sp_StockEndingInventory_Batches;1.BATCH_TYPE_} in ['BATCHED', 'NON-BATCHED'] 
else {Sp_StockEndingInventory_Batches;1.BATCH_TYPE_} = {?@btype}

Подробное объяснение изменений

  1. Использование квадратных скобок: В Crystal Reports для объявления массивов или наборов значений следует использовать квадратные скобки [], которые предназначены для определения списка значений.

  2. Правильная логика выполнения ‘else’: Следует убедиться, что условие ‘else’ правильно сравнивает поле BATCH_TYPE_ с переменной ?@btype. Удалите лишний оператор = и упростите это условие до:

    {Sp_StockEndingInventory_Batches;1.BATCH_TYPE_} = {?@btype}

Общие рекомендации

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

Заключение

Следуя этим рекомендациям, вы сможете успешно использовать оператор ‘in’ вместе с условием ‘if’ в Crystal Reports. Если у вас возникнут дополнительные вопросы или вы столкнетесь с другими проблемами, не стесняйтесь обращаться за помощью. Удачи в разработке ваших отчетов!

Оцените материал
Добавить комментарий

Капча загружается...