Показать сообщение отдельно
Старый 24.11.2010, 11:14   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от 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();
}