August 26, 200421 yr I normally avoid repeating fields, but they can be handy in certain situations. Is it possible to assign (in Specify Calculation) each element of a repeating field (of calculation type) to a different calculation? For example, field_ru[1] = 1, field_ru[2] = 5, etc.
August 27, 200421 yr Author Forget using static values; in my example I should have used fields which update dynamically. So, for example, field_ru[1] = amount[1], field_ru[2] = amount[1] + amount[2], where the amount repeating field (each element) is changing.
August 27, 200421 yr Choose( Get(CalculationRepetitionNumber) - 1; Amount; GetRepetition( Amount; 1 ) + Amount )
August 30, 200421 yr Author It's very clear to me now that using this method enables arrays (i.e., repeating fields) to be used all over the place in FileMaker. Here's a snippet of code which uses Choose, Get, CalculationRepetitionNumber and Case: za_amount_le30_ru = Choose ( Get ( CalculationRepetitionNumber ) ; 0 ; Case ( za_dy_ru[1] <= 30 and za_pm_u < 0 ; za_iad_ru[1] ; za_dy_ru[1] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_iad_ru[1] ) ; za_iad_ru[1] - za_pm_u ; 0 ) ; Case ( za_dy_ru[2] <= 30 and za_pm_u >= 0 and za_pm_u <= za_iad_ru[1] ; za_iad_ru[2] ; za_dy_ru[2] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[2] ) ; za_isum_ru[2] - za_pm_u ; 0 ) ; Case ( za_dy_ru[3] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[2] ) ; za_iad_ru[3] ; za_dy_ru[3] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[3] ) ; za_isum_ru[3] - za_pm_u ; 0 ) ; Case ( za_dy_ru[4] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[3] ) ; za_iad_ru[4] ; za_dy_ru[4] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[4] ) ; za_isum_ru[4] - za_pm_u ; 0 ) ; Case ( za_dy_ru[5] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[4] ) ; za_iad_ru[5] ; za_dy_ru[5] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[5] ) ; za_isum_ru[5] - za_pm_u ; 0 ) ; Case ( za_dy_ru[6] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[5] ) ; za_iad_ru[6] ; za_dy_ru[6] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[6] ) ; za_isum_ru[6] - za_pm_u ; 0 ) ; Case ( za_dy_ru[7] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[6] ) ; za_iad_ru[7] ; za_dy_ru[7] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[7] ) ; za_isum_ru[7] - za_pm_u ; 0 ) ; Case ( za_dy_ru[8] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[7] ) ; za_iad_ru[8] ; za_dy_ru[8] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[8]) ; za_isum_ru[8] - za_pm_u; 0 ) ; Case ( za_dy_ru[9] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[8] ) ; za_iad_ru[9] ; za_dy_ru[9] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[9] ) ; za_isum_ru[9] - za_pm_u; 0 ) ; Case ( za_dy_ru[10] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[9] ) ; za_iad_ru[10] ; za_dy_ru[10] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[10] ) ; za_isum_ru[10] - za_pm_u; 0 ) ; Case ( za_dy_ru[11] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[10] ) ; za_iad_ru[11] ; za_dy_ru[11] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[11] ) ; za_isum_ru[11] - za_pm_u; 0 ) ; Case ( za_dy_ru[12] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[11] ) ; za_iad_ru[12] ; za_dy_ru[12] <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[12] ) ; za_isum_ru[12] - za_pm_u; 0 ) ; ) Edit: Fixed HTML less than/greater than or equal to symbols -Queue-
August 30, 200421 yr It seems to me you can simplify this greatly. Something like Let( R = Get(CalculationRepetitionNumber); Case( R = 1; Case ( za_dy_ru <= 30 and za_pm_u < 0; za_iad_ru; za_dy_ru <= 30 and za_pm_u >= 0 and za_pm_u <= za_iad_ru; za_iad_ru - za_pm_u; 0 ); Case( za_dy_ru <= 30 and za_pm_u >= 0 and za_pm_u <= ( za_isum_ru[R-1] ); za_iad_ru; za_dy_ru <= 30 and za_pm_u >= 0 and za_pm_u <= za_isum_ru; za_isum_ru - za_pm_u; 0 ) ) Note that if za_pm_u is a non-repeating field, you should use Extend(za_pm_u) when referencing it in a repeating field calculation or it will only work for the first repetition. Also, if you are calculating the nth repetition, then field[n] = n, when n is another repeating field.
August 31, 200421 yr Author Thanks very much. Here is the revised snippet of code, with the Extend function on za_pm_u. Let ( [ R = Get ( CalculationRepetitionNumber ) ] ; Case ( R = 1 ; Case ( za_dy_ru <= 30 and Extend ( za_pm_u ) < 0 ; za_iad_ru ; za_dy_ru <= 30 and Extend ( za_pm_u ) >= 0 and Extend ( za_pm_u ) <= za_iad_ru ; za_iad_ru - Extend ( za_pm_u ) ; 0 ) ; Case ( za_dy_ru <= 30 and Extend ( za_pm_u ) >= 0 and Extend (za_pm_u ) <= ( za_isum_ru[R-1] ) ; za_iad_ru ; za_dy_ru <= 30 and Extend ( za_pm_u ) >= 0 and Extend (za_pm_u ) <= za_isum_ru ; za_isum_ru - Extend ( za_pm_u ) ; 0 ) ) ) This is very elegant and very fast. As for my field naming convention, I use the "FileMaker Pro Development Standards" by Core Solutions, Inc. So, za means "developer field for user calculation, u = unstored, and r = repeating field.
Create an account or sign in to comment