Say you have a DINT array called My_Array that has 3 elements:
My_Array
|-My_Array[0]
|-My_Array[1]
|-My_Array[2]
If you want to use the value of the third element you address it as: My_Array[2].
Now say you have another single DINT called My_Pointer and My_Pointer = 1.
My_Array[My_Pointer] would 'point' the value of My_Array[1]. Changing the value of My_Pointer to 0 would now give you the value of My_Array[0].
This is indirect addressing.
PLCHacker was suggesting that every time your walking beam moves everything to a new location you increment the value of a pointer and use this to refrence you product data in a table.
Now suppose you have a UDT called Box_Dimensions. It has 3 elements. All three are DINTS:
Box_Dimensions
|-Length
|-Width
|-Height
Now create an array of this UDT called Box with 3 elements
Box
|-Box[0]
|-Length
|-Width
|-Height
|-Box[1]
|-Length
|-Width
|-Height
|-Box[2]
|-Length
|-Width
|-Height
If you need to know the lenth of the second box:
Box[1].Length
The constant 1 can be replaced with a pointer and indirect addressing as shown above can be used.