It's going to be a bit technical, and you will need to adjust to your own needs, but let's work through an example of a rather crude (but effective) sub program:
1) In Fusion, set your new WCS (G58 in this example) to a common point on the part in the top left of the fixture, such as the center of a hole. I'd suggest not using the same WCS as your main program.
2) Create an engraving program for the one part.
3) Post code.
4) At end of program we want to add:
#2505=[#2505+3.00] (where 3.00 is the distance between each part, change to suit)
4) Instead of an M30, we want to close with an M99
In your main program, we are going to have:
#501=#2505 (stores original location of G58 X value
#502=#2605 (stores original location of G58 Y value)
G0G90G58X0Y0(or whatever workoffset you choose)
G65Pxxxx L3 (where xxxx is the number of your engraving program and L3 is how many parts will run)
Once we get to the end of the row, we would give:
#2505=#501 (this resets G58 back to it's original value)
#2606=[#2606-2.0] (where 2.0 is the distance between parts in the Y axis, change to suit)
G65Pxxxx L3 (where xxxx is the number of your engraving program and L3 is how many parts will run)
#2505=#501
#2605=#502
M30
And that's about it. It takes the one engraving program, runs it on one part, increments the work offset an appropriate distance and runs it again and again until there are no more parts along the X axis to engrave. It then resets the G58 to original value and decrements the Y axis to where the next batch of parts are and the process repeats itself.
The above variables are all assuming Fanuc or similar controls. If you are on a Fadal any other machine, those values are possibly the same, but there's a reasonable chance that they aren't....
-EDIT-
Also, if you wish, and you have storage capacity, you could program one column of parts and just run the G65Pxxxx call through one loop instead, as all parts along the Y axis will be addressed. We still want one common work offset to start from though.
--EDIT#2--
I'd be remiss if I didn't mention this awesome resource:
Fanuc Macro B Programming
Seth Madore
Customer Advocacy Manager - Manufacturing