Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 293
  • Last Modified:

Test condition and convert number to negative

I would like to check a field IF AttendDet.ActClockIn = 12:00 or 22:30 and AttendDet.TotActTime = 0.50 THEN convert the 0.50 to a negative number, ELSE null or nothing.
0
Lee Ingalls
Asked:
Lee Ingalls
  • 3
2 Solutions
 
Lee IngallsDirector of IT/TS, Quality and FinanceAuthor Commented:
I figured out how to get the number to negative by multiplying it by (-1)... now for the rest of it.
0
 
James0628Commented:
You said "null or nothing".  Will 0 (zero) do?  If not, you may need to explain in more detail what you're trying to do.

 What type of field is ActClockIn?  Time or datetime or something else?

 Assuming that it's a time, you could use something like this:

if ({AttendDet.ActClockIn} = Time (12, 00, 00) or
 {AttendDet.ActClockIn} = Time (22, 30, 00)) and
 {AttendDet.TotActTime} = 0.50 then
  0 - {AttendDet.TotActTime}
else
  0


 You could use {AttendDet.TotActTime} * -1 if you prefer.  Subtraction is more efficient than multiplication, but depending on how CR performs the calculations, it may end up performing the same operations either way.

 FWIW, technically, since you're looking for one specific value (.5), you could replace "0 - {AttendDet.TotActTime}" with -0.5.  That would theoretically be more efficient, but using the calculation may more clearly express what the formula is doing.

 James
0
 
mlmccCommented:
Is clockin a time?

If not you will have to pull the time out of it.  Most databases don't have a TIME datatype but simulate it with a datetime with the date set to a default value like 1 Jan 1900

Using James formula

if (Time({AttendDet.ActClockIn}) = Time (12, 00, 00) or
 Time({AttendDet.ActClockIn}) = Time (22, 30, 00)) and
 {AttendDet.TotActTime} = 0.50 then
    - {AttendDet.TotActTime}
else
    0

Open in new window


The other possibility is that CLockIn is a string

if ({AttendDet.ActClockIn} = '12:00' or
 {AttendDet.ActClockIn} = '22:30') and
 {AttendDet.TotActTime} = 0.50 then
    - {AttendDet.TotActTime}
else
    0

Open in new window


You really don't need to subtract from 0

mlmcc
0
 
Lee IngallsDirector of IT/TS, Quality and FinanceAuthor Commented:
OK, sorry for the delay.
The ActClockIn field type is string.
I realized that by changing the sign of the {AttendDet.TotActTime} amount of 0.50 to negative it was doubling the effect I was looking. So I simply changed it to, THEN 0

IF {AttendDet.ActClockOutTime}='12:30' OR {AttendDet.ActClockOutTime}='23:00' AND
{AttendDet.TotActTime}=0.50 THEN 0
ELSE {AttendDet.TotActTime}

'12:30' and '23:00' are the times that the automatic break calculations end. I erroneously had the second break end time set at '22:30' changed to '23:00'...
I needed to filter out the automatic break time.

Thank you James0628 and mlmcc for your always valuable assistance!

BudELee
0
 
Lee IngallsDirector of IT/TS, Quality and FinanceAuthor Commented:
You both answered the original question; then I changed it once I realized I had misstated my requirement. As always I value your input.

Cheers, Lee
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now