Цитата:
Сообщение от
mazzy
как лучше это сделать так, чтобы не сломать остальную функциональность аксапты?
Поделюсь опытом, как это делал я.
Вариант 1. Стандартная форма, нестандартный вызов. Например, вызываем форму InventTrans из своей формы, в которой есть строки с номенклатурами. В этом случае в своей форме в методе jumRef пишем что-то типа
X++:
Args args;
Query query;
QueryBuildDataSource qbds;
;
query = new Query();
qbds = query.addDataSource(tableNum(InventTransOrigin));
qbds.addRange(fieldNum(InventTransOrigin, InventTransId)).value(queryValue(_inventTransId));
args = new Args();
args.initialQuery(InitialQueryParameter::createByQuery(query));
MenuFunction::runClient(menuitemDisplayStr(InventTrans), MenuItemType::Display, true, args);
Класс InitialQueryParameter появился в АХ с тех пор, как появилось Избранное и стало возможно в избранном менять запрос. Т.е. с 4.0
Для некоторых случаев есть уже готовые методы типа
X++:
InventJournalFormTable::jumpRefReferenceId(inventJournalTable.JournalId);
Еще есть вариант (если нужно чего-то сделать с датасорсами) - написать код по аналогии с формой SysTableBrowser, там достучаться до датасорса и уже с ним чего-то делать
Вариант 2. Стандартная / малоизмененная форма, свой вызов. Добавили новое поле в форму CustTable и хотим по нему сделать свой переход. Тогда есть 2 решения - либо как в Варианте 1, либо на init формы / датасорса уже открываемой формы анализировать методы класса Args: caller / lookupField / record / lookupValue, которые уж несложно заполнить из jumpRef-а вызываемой формы