Показать сообщение отдельно
Старый 19.04.2007, 21:15   #14  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
Talking
Цитата:
Сообщение от maxsmirnov Посмотреть сообщение
а зачем вам, извините за любопытство, сабж?
Затем, что бараноподобные юзверы, как только видят доступное для ввода поле, скажем, значимый код номенклатуры - тут же лезут руками заполнять его той номенклатурой которую они ХОТЯТ, хотят видеть в данной строке (заявке, накладной и тп)! Будь то новая номенклатура или уже занесенная в справочник! Причем делают это ПОЧТИ ВСЕ.

Понятное дело, проблема снимается после 2-х минут обьяснений... но руководство убеждено, что система должна быть НАСТОЛЬКО интуитивно-понятной, защищенной от дурака и лакированной, что и без этих двухминутных разьяснений все должны сразу "сесть и работать". Без всякого обучения! Так что системное сообщение о том что "запись не найдена в связанной таблице" - не спасает.

Проблема решается на самом деле просто. Перекрывается метод TextChanged() контрола.
Допустим, некая таблица Request имеет поле ItemId с дататипом ItemId. Тогда код этого метода будет выглядеть так:

X++:
public void textChange()
{
    str xTxt;
    ;

    xTxt = this.text();
    if (xTxt)
    {
        element.lock();
        if (Request)
        {
            this.text(Request.ItemId);
        }
        info("Ввод нового товара в этом поле не предусмотрен. Для выбора существующего товара нажмите на кнопку выбора справа от поля.");
        element.unlock();
    }
    else
    {
        super();
    }

}
Юзверу оставлена возможность удалить выбранный в заявке товар (очистив ItemId).
Данный метод плох тем, что для нормальных пользователей закрывает возможность быстрого поиска (вводя в поле "Ауди*" - чтоб сразу открывался отфильтрованный лукап, ограниченный номенклатурами, начинающимися на слово "Ауди". Но увы... бесплатно ничего не бывает
__________________
Бесты и регарды!
За это сообщение автора поблагодарили: kashperuk (3), alex55 (1).