Насколько я понимаю, столбец ProductName отображается с помощью методов отображения. По крайней мере, для моей реализации здесь и этого метода заключается в InventSum таблице:Фильтровать по названию товара в - Управление запасами/Запросы/На руках
display public ItemNameDisplay itemName()
{
// Fields might not have been selected on the specified buffers, or might have been updated since selection
this.checkInvalidFieldAccess(false);
if (this.InventDimId)
{
return this.inventTable().itemName(InventDim::find(this.InventDimId));
}
return this.inventTable().itemName();
}
Когда я ударил Ctrl + G и попытаться отфильтровать данные, эта опция отключена для выше колонки, и я думаю, что это происходит благодаря тому, что дисплей способ. Есть ли способ достичь этой функциональности?
Должен ли я попробовать (щелкнуть правой кнопкой мыши), чтобы добавить еще один MenuItem и выполнить фильтрацию с помощью нового диалогового окна (где я напишу имя элемента), каким-то образом после чего появится обновление в форме?
Update 1:
Я нашел и редактировать этот подход для моего частного случая:
public void context()
{
InventTable inventTable;
int selectedMenu;
real test;
formrun fr;
Args ag;
Itemname strtext;
querybuilddataSource qb1;
queryrun qr;
query q;
PopupMenu menu = new PopupMenu(element.hWnd());
int a = menu.insertItem('Find');
int c = menu.insertItem('Remove Filter');
selectedMenu = menu.draw();
switch (selectedMenu)
{
case -1:
break;
case a:
ag = new args('SysformSearch');
fr = new formrun(ag);
fr.run();
fr.wait();
strtext = fr.design().controlName('FindEdit').valueStr();
if(strtext)
{
select ItemId from inventTable
where inventTable.NameAlias == strtext;
InventSum_DS.filter(FieldNum(InventSum,ItemId),Sysquery::value(inventTable.ItemId));
}
break;
case c :
InventSum_DS.removeFilter();
break;
Default:
break;
}
}
Тем не менее, я думаю, что это не правильный путь, чтобы просто показать новый PopupMenu. Я хотел бы подключиться к обычному меню и добавить новый «Найти и удалить фильтр» прямо там. И .. удалить фильтр занимает некоторое время, я должен сигнализировать об этом так, чтобы пользователь не паниковал.
Вы хотите отфильтровать по названию объекта (как указано в вашем вопросе) или по псевдониму имени (как реализовано в вашем обновлении 1)? Возможные решения для этих двух полей весьма различны. –
@ FH-Inway, я хотел бы отфильтровать по названию позиции. –
Кажется, я не могу контролировать это. Если пользователь хочет иметь много результатов, мне придется добавить множество диапазонов и выполнить strScan, чтобы проверить все значения, содержащие нужную строку, и, возможно, строка содержит * или! и т. д. Я иду в никуда .. –