Цитата:
Сообщение от
Gustav
Причем, когда я делаю подобное под своим логином, мне позволено добавлять и удалять эти "Складские проводки". И у меня слева на этих "Проводках" присутствует "стрелочка" - как знак ярлыка. У пользователя такой "стрелочки" нет, и при щелчке правой кнопкой у него отсутствует пункт "Удаление", а присутствют только пункты "1:n" и "n:1".
Насчет возможности изменять под своим логином - это можно делать до тех пор, пока запрос не сохранится (не будет нажата кнопка OK в форме "Ввод в эксплуатацию"). Как только вы это сделаете - так же попадете в "ловушку".
Подкачала реализация работы с queryRun в классе RAssetProposal
Проблема в том, что форма SysQueryForm не может отделить датасоурсы, добавленные пользователем, от "оригинальных", т.е. добавленных в дизайне или программно.
Если посмотреть метод Init() класса SysQueryEdit, то видно, что для выделения этих датасоурсов используется
queryNextUniqueId = Query().nextUniqueId(). При этом Query() берется у текущего QueryRun, т.е. при загрузке из SysLastValue получится, что добавленные датасоурсы стали "оригинальными". Для того, чтобы эту ситуацию исправить, надо сохранить "оригинальный" запрос - а для этого необходимо использовать класс SysQueryRun (замечу, что в ClassDeclaration класса RAssetProposal queryRun определен как объект класса QueryRun, а при распаковке queryRun присваивается уже new SysQueryRun()).
Что необходимо сделать в классе RAssetProposal
1. Переопределить в Class Declaration queryRun как SysQueryRun
X++:
SysQueryRun queryRun;
2. Исправить метод new()
X++:
// поменять
queryRun = new QueryRun(querystr(RassetTable));
// на
queryRun = new SysQueryRun(querystr(RassetTable));
queryRun.origQueryPack(queryRun.query().pack());
3. Изменить метод unpack()
X++:
Query q;
;
...
if (queryIsPackedOk(packedQuery))
{
q = new Query(packedQuery);
QueryRun.Query(q);
}
...
4. Выполнить компиляцию этого класса из AOT и, по хорошему, выполнить компиляцию его наследников.