Jump to content
View in the app

A better way to browse. Learn more.

FMForums.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Repeating Field with Individual Calculations

Featured Replies

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.

  • 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.

Choose( Get(CalculationRepetitionNumber) - 1; Amount; GetRepetition( Amount; 1 ) + Amount )

  • Author

Great--it works; thanks!

  • 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-

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.

  • 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

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.