I'm just about getting there with Structs and Arrays but clearly have missed something along the way. Assistance would be appreciated.

At the start of my program I have:

Struct Controls_Data
String sPlate_384_C
Integer iWell_384_C
Number nbglob_ct_C
Integer iControl_C
String sControl_Pass_C
End_Struct

Controls_Data[] Controls_Array
Global_Variable Integer giArray_Counter

I call a procedure to fill the array:

Send Fill_Array sBC iBW
The procedure looks like this:
Procedure Fill_Array String sBC Integer iBW
String sMonitor_Screen_384_Bar
String sMonitor_Message sBW
Controls_Data[] Controls_Array

Clear Screen
Move sBC to Screen.Plate_384_BarCode
Move iBW to Screen.Plate_384_Well
Move iBW to sBW

Find eq Screen by Index.2 // Plate_384_BarCode; Well

If (FindErr) Begin
Move ("Screen 384 " + sBC + " " + sBW + " Not Found " ) to sMonitor_Message
Send AppendTextLn to oEdit1 sMonitor_Message
Send AppendTextLn to oEdit1 ""
Procedure_Return
End


Move ("Screen 384 " + sBC + " " + sBW) to sMonitor_Message
Send AppendTextLn to oEdit1 sMonitor_Message

Increment giArray_Counter
Move Screen.Plate_384_Barcode to Controls_Array[giArray_Counter].sPlate_384_C
Move Screen.Plate_384_Well to Controls_Array[giArray_Counter].iWell_384_C
Move Screen.bglob_ct to Controls_Array[giArray_Counter].nbglob_ct_C
Move Screen.Controls to Controls_Array[giArray_Counter].iControl_C
If (Screen.Controls = 1) Move Screen.Control_1_pass to Controls_Array[giArray_Counter].sControl_Pass_C
If (Screen.Controls = 2) Move Screen.Control_2_pass to Controls_Array[giArray_Counter].sControl_Pass_C
If (Screen.Controls = 3) Move Screen.Control_3_pass to Controls_Array[giArray_Counter].sControl_Pass_C
If (Screen.Controls = 4) Move Screen.Control_4_pass to Controls_Array[giArray_Counter].sControl_Pass_C
End_Procedure

This all seems to work well - but - when I return from the procedure:
For iCounter_A from 1 to giArray_Counter
Write channel 1 Controls_Array[iCounter_A].sPlate_384_C
Write channel 1 Controls_Array[iCounter_A].iWell_384_C
Write channel 1 Controls_Array[iCounter_A].nbglob_ct_C
Write channel 1 Controls_Array[iCounter_A].iControl_C
Write channel 1 Controls_Array[iCounter_A].sControl_Pass_C
Writeln channel 1 "..."
Loop
it worketh not! The debugger just stops with no error message, so that doesn't help. I'm unsure if it's my lack of understanding of arrays or procedures - or both - that's the problem. I'm sure someone will point out the error of my ways!

Kind regards,

Sandy.