You can correct the slight inaccuracies in a number of ways, the way I would use myself (am using in the game I'm currently designing anyway) is to populate an array of the layout with the X and Y values then move up and down the array index read then apply the appropriate value. I've found this to be the best way where accuracy is important and the game is quite complicated.
But you're new (welcome aboard) so I'll spare you that and show you an easier method which you can use to nail things into position via the bullet behaviour. It's basically the same method as in my earlier post but with a couple of extra steps.
Firstly your object I'll call it "block" needs an instance variable so create one we'll call it OldY and make it a number.
Then we need to give the variable a value so we do this at the start of the layout:
System }
On start of layout }
For each "block" } (add the action) Set OldY to block.Y
// this assigns the current Y value to all instances of the block in the level so you have a starting height.
Then we skip to the movement.
As before
Apply bullet behaviour to block if you haven't already.
Then:
Set bullet speed to 100
Set angle to 90 deg
Wait 0.5s
Set bullet speed to 0.
//Now the extra steps.
Set block Y to block.OldY+50
// This sets the new position of the block Y value to an absolute value of its starting position plus the 50 pixels vertical offset that you want. ie nails it into place
Add 50 to block.OldY
// Sets the "starting value" of block.Y to its new starting point ie 50 ppx below it's original starting point so if the block needs to move down again it adds another 50 to the correct value.
So what you're doing on your move is sending it downwards at 100px per second for half a second so it travels 50 pixels before it stops approximately in place then once stopped you shunt it into position the final 2-3 px so it finishes exactly 50 px below it's starting point.
(If horizontal values are critical just do the same with different angles and another instance var called OldX).
It's a bit more effort to set up but very easy to use once it is, you could further improve it by putting the movement part into a function and simply calling the function each time a block needs to make that movement.