Dans la fenêtre de requête qui apparaît, si un droit d'utilisateurclique et choisit "1: n" et sélectionne une table, comment peut-on détecter et utiliser cette table? J'ai un bon exemple de travail et des captures d'écran qui devraient montrer ce que je suis en train d'accomplir.
J'ai écrit cet exemple de travail qui extrait les objets de la requête AOT, mais pas la table / plage / valeur jointe de manière dynamique.
static void InventSumQuery(Args _args)
{
Query query = new Query(queryStr(InventDimPhys));
QueryRun qr = new QueryRun(query);
QueryBuildRange queryRange;
DictField dictField;
int i, n;
if(qr.prompt())
{
for (n=1; n<=query.dataSourceCount(); n++)
{
for (i=1; i<=query.dataSourceNo(n).rangeCount(); i++)
{
queryRange = query.dataSourceNo(n).range(i);
dictField = new dictField(query.dataSourceNo(n).table(), fieldName2id(query.dataSourceNo(n).table(), queryRange.AOTname()));
info(strFmt("%1.%2", tableId2name(dictField.tableid()), dictField.name()));
}
}
}
info("Done");
}
Réponses:
3 pour la réponse № 1Bien sûr, je trouve ma propre réponse. Les objets de requête sont statiques et le formulaire de requête ne modifie en fait que la requête lorsque vous apportez la modification.
Vous devez donc modifier le code ci-dessus pour:
if(qr.prompt())
{
query = qr.query();
Cela obtient la requête modifiée. L'interrogation avancée n'est en réalité qu'une fonction de la forme elle-même qui modifie finalement l'interrogation.