Показать сообщение отдельно
Старый 12.01.2010, 14:28   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
? args.record - как заставить работать в форме PurchLine?
Аксапта 3.0, SP4, приложение GMCS, СУБД - Oracle

Хочу, чтобы корректно работал нижеследующий джоб. Собственно до него мои представления об args.record позволяли это вполне законно ожидать.
X++:
static void Job243_1(Args _args)
{
    PurchIdBase purchId = 'ПЗ0050395';

    PurchTable  purchTable = PurchTable::find(purchId);
    PurchLine   purchLine  = PurchLine::find(purchId, 2);
    Args        args = new Args();
    FormRun     formRun;
    ;
    args.name(formstr(PurchLine));
    args.record(purchLine);

    formRun = classFactory.formRunClass(args);

    formRun.init();
    formRun.run();
    formRun.wait();
}
Не работает, вместо одной ожидаемой записи форма PurchLine открывается со всеми записями (все строки всех закупок) и с активной первой строкой.

С какого-то перепуга (?), ломая мои представления об args.record, работает другой джоб, отбирая только строки заданной закупки:
X++:
static void Job243_2(Args _args)
{
    PurchIdBase purchId = 'ПЗ0050395';

    PurchTable  purchTable = PurchTable::find(purchId);
    PurchLine   purchLine  = PurchLine::find(purchId, 2);
    Args        args = new Args();
    FormRun     formRun;
    ;
    args.name(formstr(PurchLine));
    args.record(purchTable); // ЗДЕСЬ ИЗМЕНИЛОСЬ

    formRun = classFactory.formRunClass(args);

    formRun.init();
    formRun.run();
    formRun.wait();
}
Законен ли такой эффект, когда датасорсу типа PurchLine через args.record передается "неродная" переменная типа PurchTable? Или это очередная недокументированная возможность?

Наконец, если во второй джоб добавить findRecord (он получается по небольшому кол-ву уже отобранных записей одной закупки, а потому вполне быстр), то курсор позиционируется на нужную запись:
X++:
static void Job243_3(Args _args)
{
    PurchIdBase purchId = 'ПЗ0050395';

    PurchTable  purchTable = PurchTable::find(purchId);
    PurchLine   purchLine  = PurchLine::find(purchId, 2);
    Args        args = new Args();
    FormRun     formRun;
    ;
    args.name(formstr(PurchLine));
    args.record(purchTable); // ЗДЕСЬ ИЗМЕНИЛОСЬ

    formRun = classFactory.formRunClass(args);

    formRun.init();
    formRun.run();
    formRun.dataSource(1).findRecord(purchLine); // ЗДЕСЬ ДОБАВИЛОСЬ
    formRun.wait();
}
Нажмите на изображение для увеличения
Название: PurchLine.JPG
Просмотров: 480
Размер:	38.3 Кб
ID:	5499
Но мне-то нужно, чтобы запись в гриде появлялась только одна, как если бы правильно отработал первый джоб.

Что думаете, коллеги? Всем откликнувшимся заранее большое спасибо.