Создать условие для поля

отредактировано 12:55 Раздел: FastReport 3.0
Добрый лень. У меня есть поля которые содержат в некоторых случаях нули. По этим полям считаю в итогах среднюю цену, но из за нулей вылетает ошибка, так как 0/0 не нельзя. Как можно сделать условие что если 0 то 1 в противном случаи значение самого поля. Функция IIF не подходит. там только 2 варианта. Заранее спасибо за советы. С уважением, Илья.

Комментарии

  • отредактировано 12:55
    написал:
    IIF не подходит. там только 2 варианта
    Хм...
    Думаю стоит посмотреть на эту бесполезную функцию повнимательнее!
    [IIF(DataSet."Pole1" == 0, 1,DataSet."Pole1")]
    
    В данном условии написано: Если Pole1 набора данных DataSet равно 0, то возвращается 1, иначе возвращается значение самого поля.

    Чем это отличается от вашей задачи?
  • LexLex
    отредактировано September 2006
    ilya_ae написал:
    Добрый лень. У меня есть поля которые содержат в некоторых случаях нули. По этим полям считаю в итогах среднюю цену, но из за нулей вылетает ошибка, так как 0/0 не нельзя. Как можно сделать условие что если 0 то 1 в противном случаи значение самого поля. Функция IIF не подходит. там только 2 варианта. Заранее спасибо за советы. С уважением, Илья.
    Бред
    Насколько я помню, среднее значение это сумма/колчичество
    n/0 может возникнуть только если количество = 0.
  • LexLex
    отредактировано September 2006
    Текст ошибки
    aseroff написал:
    Чем это отличается от вашей задачи?
    и ты туда же ))
  • отредактировано 12:55
    Пытаюсь сделать так, но результат пустой. Что делаю не так?
    [IIF(<frxDBPlanZak."PL_SUMA">=0,0,[SUM(<frxDBPlanZak."pl_SUMA">,MasterData1)/SUM(<frxDBPlanZak."pl_pl">,MasterData1)])]
  • отредактировано 12:55
    написал:
    Пытаюсь сделать так, но результат пустой. Что делаю не так?
    Не правильно пишите выражение.
    Напишите так:
    [IIF(<frxDBPlanZak."PL_SUMA">= 0, 0, SUM(<frxDBPlanZak."pl_SUMA">,MasterData1) / SUM(<frxDBPlanZak."pl_pl">,MasterData1))]
    

    Были лишние [].
  • отредактировано 12:55
    Спасибо, но не работает. Для условие 0, выдает 0, а при иначе остается пусто. Хотя по столбцам есть значения
  • отредактировано 12:55
    [IIF(<frxDBPlanZak."PL_SUMA"> = 0, 0, SUM(<frxDBPlanZak."pl_SUMA">,MasterData1) / SUM(<frxDBPlanZak."pl_pl">,MasterData1))]
    
    Очень интересное выражение.

    Дело в том, что вы не избавитесь от нулевых вариантов.
    Что будет, если
    SUM(<frxDBPlanZak."pl_pl">,MasterData1)
    
    будет равно 0?
    Зачем проверять
    <frxDBPlanZak."pl_SUMA">
    
    на 0? В любом случае
    0 / <число> = 0
    
    без всяких ошибок.


    В итоге выше выражение выглядит следущим образом:
    Если последнее значение поля frxDBPlanZak."pl_SUMA" в наборе данных равно нулю, то возвращаем 0, иначе возвращаем <сумма всех frxDBPlanZak."pl_SUMA"> / <сумма всех frxDBPlanZak."pl_pl">
    
    Никаких проверок делителя нет + совсем ненужная проверка на входе.


    Если я правильно понял, то вам надо написать следущее:
    [
      IIF
      (
        SUM(<frxDBPlanZak."pl_pl">,MasterData1) = 0,
        SUM(<frxDBPlanZak."pl_SUMA">,MasterData1),
        SUM(<frxDBPlanZak."pl_SUMA">,MasterData1) / SUM(<frxDBPlanZak."pl_pl">,MasterData1)
      )
    ]
    
  • отредактировано 12:55
    написал:
    Спасибо, но не работает. Для условие 0, выдает 0, а при иначе остается пусто. Хотя по столбцам есть значения
    Только что попробовал следущую форму (у меня C++Script):
    [IIF(SUM(<m_pDataQuery."Prepay">) == 0, 0, SUM(<m_pDataQuery."Pay">, m_pMasterData)/SUM(<m_pDataQuery."Prepay">, m_pMasterData))]
    
    Все работает.

    Проверьте ваши данные, возможно они не численные.
  • отредактировано 12:55
    Если данные хз какого типа, попробуйте так:
    [
      IIF
      (
        SUM(StrToFloat(VarToStr(<frxDBPlanZak."pl_pl">)),MasterData1) = 0,
        SUM(StrToFloat(VarToStr(<frxDBPlanZak."pl_SUMA">)),MasterData1),
        SUM(StrToFloat(VarToStr(<frxDBPlanZak."pl_SUMA">)),MasterData1) / SUM(StrToFloat(VarToStr(<frxDBPlanZak."pl_pl">)),MasterData1)
      )
    ]
    
  • отредактировано 12:55
    Большое спасибо, вроде считает.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.