4D v16

Current selection

Home

 
4D v16
Current selection

Current selection    


 

 

In addition to the manipulations explained in the video, you should also note that:  

The following diagram illustrates how 4D works, in other words the SELECTION-ACTION mode:

The concept of the Current selection is one of the fundamentals of 4D that is a little different than the usual ones, especially SQL.

A current selection is a list of records obtained by querying the table (equivalent to the WHERE clause in SQL)

In 4D, we continually have a current selection per table. This selection can contain anywhere from 0 to X records.

The current selection consists of the list of records on which we’ll perform processes. You can change the current selection between two processes.

The code below corresponds to the exercise carried out in this video (2 lines for declaring simple variables are added at the top):

 C_DATE($StartYear;$EndYear)
 C_LONGINT($Year)
 
 $Year:=2011
 $YearStart:=Date("01/01/"+String($Year))
 $YearEnd:=Add to date($YearStart;1;0;-1)
 
 ALL RECORDS([Technicians])
 $Num:=Records in selection([Technicians])
 
 ARRAY TEXT(ArrTechnicians;$Num)
 ARRAY LONGINT(Arr_NumInterventions;$Num)
 
 FIRST RECORD([Technicians])
 While(Not(End selection([Technicians])))
    QUERY([Interventions];[Interventions]Technician_Initials=[Technicians]ID) // we have the list of interventions for the technician in memory.
    QUERY SELECTION([Interventions];[Interventions]Intervention_Date>=$YearStart;*)
    QUERY SELECTION([Interventions];&;[Interventions]Intervention_Date<=$YearEnd)
 
    $Index:=Selected record number([Technicians])
    ArrTechnicians{$Index}:=[Technicians]LastName
    Arr_NumInterventions{$Index}:=Records in selection([Interventions])
 
    NEXT RECORD([Technicians])
 End while

To avoid setting the size of arrays before performing the loop and assigning a value to the $Index variable during the process (which lets us discover the Selected record number function), you can use the APPEND TO ARRAY command.

Today, we're going to learn what the current selection consists of and what kinds of interactions occur between selections and arrays.

We’re going to get started by creating a statistical array presented in a List box. It will obtain the number of services per technician for a given period.

For this purpose, we've created a STATS form containing a list box with 2 columns and a button used to perform the calculation.

In the button's method, we're initially going to select all the technicians.
This way we can determine the number of corresponding records found and use this number to set the size of our arrays.

So we have:

  • a text array which will be the array of technicians that have $Num rows
  • and a longint array that also has $Num rows.

We just got the names of these arrays in the list box:

  • technicians array => text array
  • number of interventions array => longint array

Once these initializations are done, we position ourselves on the 1st technician; then as long as there are still technicians, we're going to search for the interventions by these technicians.

So we'll be searching in the interventions for:

  • interventions where the initials of the technician
  • are the same as the ID of the technician

At this point, we have the list of interventions for the technician loaded in memory.

In order to determine the row of the arrays to fill in, we're going to ask 4D to provide the number of the technician being processed.

Once we have this information, we can fill in:

  • the array of technicians at the $Index row and indicate that this is the last name of the technician
  • as well as the number of interventions, still at the $Index row, which will correspond to the number of records found in the Interventions table.

At this point, we've finished the statistical part except for one small detail, we just need to remember to change records when we finish processing the first one.

We can test the form and check whether we actually get a certain number of interventions for each technician.

To limit this to a given period, we're going to modify the method here and indicate, for instance, that we want to set the period to a single year, for example 2011.
So we're going to set:

  • the start of a year as being the date of January 1st of that year
  • and another variable for the end of the year that adds one year, 0 months and -1 day to the start date of the year.
    Why -1 day? Because otherwise that will put us at January 1st of the following year.

Once we have indicated these 3 items of information, we can now complete the search by a search in the selection of interventions and we're looking for all the interventions where:

  • the date is above or equal to the start of the year
  • and less than or equal to the end of the year.

We can test the form again and see what has changed.
So we do have a decrease in the period.
Now we can just change the year to 2010, for instance, and test it again.
Try 2012 and we again have a new calculation which is performed routinely based on the information contained in the search.

 
 

 
PROPERTIES 

Product: 4D
Theme: Current selection

 
HISTORY 

 
ARTICLE USAGE

Self-training ( 4D v16)