Показать сообщение отдельно
Старый 03.07.2007, 19:33   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от blokva Посмотреть сообщение
Бывали таки моменты, когда напрмер некорректно грузились справочники, например спецификации, конфигурации и т.д. в другую базу, например из рабочей базы, в тестовую, при этом "забывали" обновить и номенклатурный справочник!
При попытке перейти из строки спецификации по номенклатуре, которой нет в справочнике, переход осуществлялся, но выбирала первуюопавшуюся!
Возможно, конкретно maze не помогу, но тем не менее позвольте запоститься тоже.

У нас были такие случаи пользовательского недовольства. В таблице "Номера серий/лотов" существует запись с инв.номером ОС, которого нет в справочнике основных средств (ну, бывают и такие "издержки"). При попытке перейти по правой кнопке мышки в меню "Перейти к основной таблице" из поля "Инв. номер ОС" переход осуществляется в таблицу "Основные средства", но не на этот несуществующий код ОС , а на следующий существующий в этой таблице. Причем, коды ОС могут отличаться лишь в последнем знаке, и пользователь, наметивший конкретное действие для несуществующего ОСа, не обратив внимания, начинает осуществлять это действие совсем с другим ОС.

Покумекав, сваял такое нехитрое перекрытие для jumpRef поля "Инв.номер ОС" формы "Номера серий/лотов" (\Forms\InventSerial\Data Sources\InventSerial\Fields\RassetId\Methods\jumpRef):
X++:
public void jumpRef()
{
    Args args;
    FormRun formRun;
    RAssetTable assetTable;
    ;

    select assetTable where assetTable.AccountNum == element.design().controlName('Add_RassetId').valueStr();

    args = new Args(formstr(RAssetTable));

    if (assetTable)
    {
        args.lookupField(fieldNum(RAssetTable, AccountNum));
        args.lookupValue(assetTable.AccountNum);
    }
    else
    {
        box::warning('В основной таблице отсутствует значение, на которое можно было бы перейти!','Нет совпадения');
        args.record(assetTable); // будет пустая форма
    }

    formRun = classFactory.formRunClass(args);

    formRun.init();
    formRun.run();
    formRun.detach();

    //super();
}
Т.е. если запись существует, то позиционируемся на нее, а если нет, то предъявляется пустая форма, как индикатор отсутствия записи. Пользователи удовлетворены (в этом конкретном случае).

Для себя вынес следующее. К сожалению, управлять этой фичей нужно в каждом отдельном случае. Невозможно создать такую универсальную процедуру, которая бы срабатывала в каждой такой ситуации. Наверное, можно попробовать создать подобную процедуру, но прописывать ее вызов нужно будет во всех интересующих местах по отдельности.

P.S. Еще на заметку по теме (и для себя тоже):
JumpRef в диалоге
Спозиционироваться на запись
Как реализовать опцию Go to the Main Table

Последний раз редактировалось Gustav; 04.07.2007 в 09:27. Причина: добавил ссылки