Цитата:
Сообщение от
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).
Данный метод плох тем, что для
нормальных пользователей закрывает возможность быстрого поиска (вводя в поле "Ауди*" - чтоб сразу открывался отфильтрованный лукап, ограниченный номенклатурами, начинающимися на слово "Ауди". Но увы... бесплатно ничего не бывает