Jump to content

comment

Members
  • Content Count

    29,955
  • Joined

  • Days Won

    766

comment last won the day on January 14

comment had the most liked content!

Community Reputation

1,775 Excellent

About comment

  • Rank
    consultant

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Your SortKey field is defined as = GetField ( "SortSelection" ) This is wrong. It needs to be = GetField ( SortSelection ) Explanation: What you have populates the field with the values held in the field named SortSelection. This global field contains the value "CustomerName". Therefore ALL your records contain the value "CustomerName" in the SortKey field - and sorting by this field accomplishes nothing. Changing the formula as suggested will cause the field to populate with the values held in the field whose name is held in the SortSelection field. When this global fiel
  2. It is possible, but it will require two fields: a summary field defined as List of Field1 and a calculation field (result is Number) = ValueCount ( FilterValues ( sList ; "Apple" ) ) where sList is our summary field. The reason why this is not simple is that no single value in Field1 is supposed to be special. Filemaker provides a simple way to produce a separate count for each and every value: sort the found set by Field1 and place a summary field counting the records in a sub-summary by Field1 part.
  3. My own preference would be to: Keep everything in the same file; this is not a must, but it makes things much easier; Keep estimates and invoices in the same table; Add an Invoices table purely for numbering purposes. The way this would work is that turning an estimate into an invoice would create a new related record in the Invoices table, with the EstiimateID serving as the match between the two tables. Then the InvoiceID becomes available through the relationship.
  4. The following calculation will return the text before the first comma: Left ( text ; Position ( text ; "," ; 1 ; 1 ) - 1 ) Note that this assumes the given text does contain a comma - otherwise the result will be empty. To extract the text after the first comma, you can use: Right ( text ; Length ( text ) - Position ( text ; "," ; 1 ; 1 ) ) Note that "text after the first comma" includes the space immediately following the comma; if you don't want that, subtract 1 from the calculated position. Alternatively you could start by substituting the comma with a carriage
  5. I don't think it's that simple. You need to loop over the values and examine each one in turn. Try: While ( [ i = 1 ; result = "" ] ; i ≤ ValueCount ( Input ) ; [ line = GetValue ( Input ; i ) ; result = If ( WordCount ( line ) ≥ 4 ; List ( result ; line ) ; result ) ; i = i + 1 ] ; result )
  6. Let ( lastComma = Position ( text ; "," ; Length ( text ) ; - 1 ) ; If ( lastComma ; Replace ( text ; lastComma ; 1 ; " and" ) ; text ) )
  7. When defining a privilege set, you can set custom privileges for each field. Start by choosing 'Custom privileges…' for Records. Then select a table and choose 'limited…' for Field Access. Then choose 'no access' for each field you don't want the user to see. In addition, you will want to remove these fields from layouts that your user can access. But that's just cosmetics. Only the privilege set settings provide true security.
  8. You can have a calculation but as I said, it's not going to be as simple. Basically, you could always loop over the related records - but we are trying to avoid that. If the certifications are entered in chronological order, and the relationship is not sorted otherwise, then it would be sufficient to test for: Last ( Certifications::ExpiryDate ) ≥ Get (CurrentDate) If one of these assumptions is incorrect (or if certifications can have different periods), then: Max ( Certifications::ExpiryDate ) ≥ Get (CurrentDate) should accomplish the same thing, albeit a little less eff
  9. If all you need is a visual indication then no, you don't need a calculation. Place a one-row portal to Certifications on the layout of Client and filter it to show only records that haven't expired yet. Any object placed in the portal row will be visible only when there is at least one certification that passes the test.
  10. There are couple of ways this could be streamlined. Some of these are cosmetic, but one practically screams off the page: All of your values are retrieved from the same branch of the JSON. Instead of repeatedly parsing the entire tree for each individual value, you should isolate the target branch in a variable once, then parse out the individual values from this variable. IOW, instead of: #____________________________________________________________ #BUILD KEYS TO RETRIEVE VARIABLES Set Variable [ $myMark; Value:$lowerInstrument & "ExpDateMap." & $expiration & ":" &a
  11. Do you really need this as a calculation, or do you only need it for display? The latter is easy to accomplish using filtered portals, the former is more complicated.
  12. Here are some scenarios to consider: 1. User creates a new item and selects a contact. An SKU is created and assigned to the item. Then user notices she made a mistake and selects another contact. 2. Same as #1, but the mistake is discovered only after another item has been created for one or both of the contacts involved. 3. Same as #1, but the mistake is discovered only after the item was included in an invoice. 4. Two users create a new item for the same contact roughly at the same time. There is more, but I think these stress how important it is for a key to be (a)
  13. The best way to do this is not to do it. It is very difficult to generate separate series in the same table reliably. How badly do you need this? Why is it not sufficient to have a single consecutive series for all items, with the ContactID as a prefix - i.e.: 1-1 1-2 2-3 2-4 etc.
  14. I have modified the above calculation further to remove any hard-coded values, and added a demo file.
×
×
  • Create New...

Important Information

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