This is if you are intending to use a non scripted round launched from the gun. Else disregard this reply. I wrote this intending it to be for indirect firing purposes where the player actually would still have to do the math to determine where the round trajectory.
the _tangent and _elevation are adjustable variables and the distance is for a point of reference. and it would eleminate the more than 1200 meters issue you are having. you can test it just by running the script from an addaction command in the init line of a soldier standing next to Ai manned M119. just need an interface to adjust the tangent and elevation. i ran some similar code in a loop and adjusted it with slider controls, kind of like a remote control turret. Just remember to delete the logic after you are done with the script or you will end up with a 100 logics floating around.
maybe you can come up with some math to determine the trajectory and set the elevation accordingly for things like clickconmap. Not sure what your overall intent is. Like Mandoble said you could just simulate the shots and create them over the target.
_tangent = 10; ///// adjustable variable to set the azimuth expressed in degrees.
_elevation = 45; //// this is the other adjustable variable expressed in degrees
_distance =1000; //// this is just a point of reference to get the math rolling. no need to adjust it
_M119 = position player nearestObject "M119";
_Fireposition = getposASL _M119;
_targetdir = [( _fireposition select 0) + sin (_tangent) * _distance, ( _fireposition select 1) + cos ( _tangent)*_distance];
_aimpoint = "logic" createvehicle _targetdir;
_aimingelev = (_fireposition select 2) + tan (_elevation)* _distance;
_aim =[(_targetdir select 0), (_targetdir select 1),_aimingelev];
_aimpoint setposASL _aim;
_M119 dowatch _aimpoint;