Actuellement, quand on veut avoir l'URL public d'un objet SPIP on utilise #URL_PATATE. Et pour les documents ça aboutit à l'URL de son fichier, tant qu'on a pas déclaré (dans un plugin par ex, je l'ai déjà fait) qu'il y avait un URL de page.
MAIS pour l'admin. Pour l'admin !
Dans l'admin on utilise à peu près toujours la fonction generer_url_entite() qui est censée renvoyer l'URL de l'objet *suivant l'espace où on se trouve*. Donc l'URL d'admin si on est dans l'admin, et l'URL public si on est dans le site.
Sauf que pour les documents, cette fonction continue de renvoyer l'URL du fichier !
Du coup dans un squelette ou liste générique d'objets/id_objets, impossible d'avoir la page d'admin des documents en lien. 
<BOUCLE_objets(patates_liens){par objet,id_objet}>
<a href="[(#ID_OBJET|generer_url_entite{#OBJET})]">
#INFO_TITRE{#OBJET,#ID_OBJET}
</a>
</BOUCLE_objets>
Avec ça, dès que c'est un document, on a juste l'URL du fichier.
Cette fonction devrait renvoyer
?exec=document_edit&document=123
quand on est dans /ecrire (et continuer de renvoyer pareil que #URL_DOCUMENT quand on est dans le site).
Concrètement il y a 3 cas :
- si je suis dans l'admin :
ecrire/?exec=document_edit&document=123 (TOUJOURS !)
- si je suis dans le site :
/IMG/jpg/machin.jpg
- si je suis dans le site et que j'ai surchargé l'objet pour dire que les documents ont des pages :
/spip.php?document123