Like most things in a module, it will need a GIT entry to actually spawn in the level, along with the UTP that defines it.
For testing purposes you are probably better to start with spawning it via script so that you can quickly adjust the position as needs be. For this you will typically want to hijack the module's OnEnter script with a new script that spawns the placeable before loading the original OnEnter. Here is an example of one I used for the Nar Shaddaa landing zone module:
void main()
{
if ((GetEnteringObject() == GetFirstPC()))
{
if( GetObjectByTag( "PLC_301SignPad" ) == OBJECT_INVALID )
{
CreateObject(OBJECT_TYPE_PLACEABLE, "PLC_301SignPad", Location(Vector(-85.25,19.45,9.66545), 131.0));
CreateObject(OBJECT_TYPE_PLACEABLE, "PLC_301SignShp", Location(Vector(-55.5,-6.15,9.722), 90.0));
CreateObject(OBJECT_TYPE_PLACEABLE, "PLC_301DckEnt", Location(Vector(5.7,41.65,9.66551), 180.0));
CreateObject(OBJECT_TYPE_PLACEABLE, "PLC_301CanEnt", Location(Vector(38.25,0.00,9.66545), 180.0));
CreateObject(OBJECT_TYPE_PLACEABLE, "PLC_301RefEnt", Location(Vector(0.0,-44.25,10.0), 90.0));
}
ExecuteScript("k_301_enter_ORIG", OBJECT_SELF);
}
}
The important difference to note is that scripts specify rotation in degree, but the GIT specifies the bearing of placeables in radians. From memory they also use differing origins, so it can take some trial and error getting it right.
As far as actually determining the position values goes, you can either run around in the level in-game and use one of the armband mods that will spit out your current position, or you can load the level up in Max/GMax and derive it that way.