Цитата:
Сообщение от
S.Kuskov
Если так, то почему бы просто ещё раз не открыть ту же форму с тем же Args?
Именно! Плюс скопировать текущие фильтры и сортировки первой формы, т.е. queryRun:
X++:
static void Job_CreateCopyForm(Args _args)
{
Args args;
FormRun formRun;
FormRun formRunCopy;
FormDataSource fds;
FormDataSource fdsCopy;
QueryBuildRange qbr;
RAssetTable rassetTable;
RecId prevRecId = intMin(); // -2 147 483 648;
Set setRecId = new Set(Types::Integer);
int i;
;
// генерируем строку критерия по RecId (10 первых значений из таблицы)
for (i=1;i<=10;i++)
{
select firstonly rassetTable order by RecId where rassetTable.RecId > prevRecId;
prevRecId = rassetTable.RecId;
setRecId.add(prevRecId);
}
// запускаем первую форму - основную
args = new Args(formstr(RAssetTable));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.design().caption(strFmt('ПЕРВАЯ ФОРМА: %1',formRun.design().caption()));
formRun.design().visible(false);
formRun.run();
// фильтруем и сортируем записи
fds = formRun.dataSource('RAssetTable');
qbr = fds.queryRun().query().dataSourceNo(1).addRange(fieldNum(RAssetTable,RecId));
qbr.value(strRem(setRecId.toString(),'{ }'));
fds.queryRun().query().dataSourceNo(1).addSortField(fieldNum(RAssetTable,AccountNum),SortOrder::Descending);
fds.research();
// отображаем первую форму
formRun.design().visible(true);
// запускаем вторую форму - "копию первой"
formRunCopy = classFactory.formRunClass(formRun.args());
formRunCopy.init();
formRunCopy.design().caption(strFmt('КОПИЯ - ВТОРАЯ ФОРМА: %1',formRunCopy.design().caption()));
formRunCopy.design().visible(false);
formRunCopy.run();
// "копируем" текущий фильтр и сортировку первой формы во вторую
fdsCopy = formRunCopy.dataSource('RAssetTable');
fdsCopy.queryRun(fds.queryRun());
fdsCopy.research();
// отображаем вторую форму
formRunCopy.design().visible(true);
formRunCopy.wait();
formRun.wait();
}