Показать сообщение отдельно
Старый 22.06.2006, 23:08   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от 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 и, по хорошему, выполнить компиляцию его наследников.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 22.06.2006 в 23:11.
За это сообщение автора поблагодарили: NataLee (1), Lemming (2), Hammer (1).