Форма позволяет фильтровать Grid различными способами, но нам захотелось сделать свой – по нажатию кнопки открывать дочернюю форму, в которой задать определенные поля, которые сформируют нужный Query.
Первая попытка – сделать extends RunBase класс, в котором создавать DialogField. Всё было б ничего, но не получилось следующее – хотелось вывести в выпадающем меню фильтра Name, а передать в query родительской формы RecId.
Вторая попытка – вызывать из формы всё тот же класс, сделать от этого класса форму, в которой можно разместить ReferenceField, который реализует нужный нам функционал…
Оба эти примера не доделаны, сюда скинул промежуточный итог.
Рабочий и самый простой вариант – одна простая форма. Тут её код:
public class FormRun extends ObjectRun
{
Object caller;
boolean activate;
}
void closeOk()
{
super();
caller = element.args().caller();
caller.itemRangeValue(itemIdStringEdit.text());
caller.subitemNumberValue(subitemNumberIntEdit.value());
caller.subitemGroupValue(subitemGroupStringEdit.text());
caller.subitemgoValue(subitemgoReferenceGroup.value());
if (subitemgoYesNo.checked()) {
caller.subitemgoYesNo(true);
}
caller.1stplaceValue(1stplaceReferenceGroup.value());
caller.currentplaceValue(CurrentplaceReferenceGroup.value());
caller.activateFilter(true);
caller.update();
));
}
public class FormRun extends ObjectRun
{
boolean active;
boolean subitemgoyn;
itemId itemRangeValue;
subitemNumber subitemNumberValue;
Int64 subitemgoValue;
placeRecId currentplaceValue;
placeRecId 1stplaceValue;
String255 subitemGroupValue;
QueryBuildRange itemRange;
QueryBuildRange arrStatRange;
QueryBuildRange curStatRange;
QueryBuildRange subitemNumRange;
QueryBuildRange subitemgoRange;
QueryBuildRange subitemGroupRange;
}
public boolean activateFilter(boolean _active=active)
{
active = _active;
return active;
}
public Int64 1stplaceValue(placeRecId _rangeValue = 1stplaceValue)
{
1stplaceValue = _rangeValue;
return 1stplaceValue;
}
public Int64 subitemgoValue(Int64 _rangeValue = subitemgoValue)
{
subitemgoValue = _rangeValue;
return subitemgoValue;
}
public boolean subitemgoYesNo(boolean _subitemgoyn=subitemgoyn)
{
subitemgoyn = _subitemgoyn;
return subitemgoyn;
}
public str subitemGroupValue(String255 _rangeValue = subitemGroupValue)
{
subitemGroupValue = _rangeValue;
return subitemGroupValue;
}
public Integer subitemNumberValue(subitemNumber _rangeValue = subitemNumberValue)
{
subitemNumberValue = _rangeValue;
return subitemNumberValue;
}
private void createFilters()
{
itemRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, itemId)));
if (itemRange==null) {
itemRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, itemId));
}
arrStatRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, 1stplace)));
if (arrStatRange==null) {
arrStatRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, 1stplace));
}
curStatRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, Currentplace)));
if (curStatRange==null) {
curStatRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, Currentplace));
}
subitemNumRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, subitemNumber)));
if (subitemNumRange==null) {
subitemNumRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, subitemNumber));
}
subitemgoRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, subitemgo)));
if (subitemgoRange==null) {
subitemgoRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, subitemgo));
}
subitemGroupRange = (MyTable_ds.query().dataSourceTable(tableNum("MyTable")).findRange(fieldNum(MyTable, subitemGroup)));
if (subitemGroupRange==null) {
subitemGroupRange = MyTable_ds.query().dataSourceTable(tableNum("MyTable")).addRange(fieldNum(MyTable, subitemGroup));
}
}
public Int64 currentplaceValue(placeRecId _rangeValue = currentplaceValue)
{
currentplaceValue = _rangeValue;
return currentplaceValue;
}
public void init()
{
active = false;
subitemgoyn = false;
super();
element.createFilters();
}
public str itemRangeValue(itemId _rangeValue = itemRangeValue)
{
itemRangeValue = _rangeValue;
return itemRangeValue;
}
public void update()
{
MyTable_ds.executeQuery();
}
public void updateFilters()
{
if (active) {
if (itemRangeValue!="") {
itemRange.value(queryValue(itemRangeValue));
}
if (currentplaceValue!=0) {
curStatRange.value(queryValue(currentplaceValue));
}
if (1stplaceValue!=0) {
arrStatRange.value(queryValue(1stplaceValue));
}
if (subitemNumberValue!=0) {
subitemNumRange.value(queryValue(subitemNumberValue));
}
if (subitemgoyn) {
subitemgoRange.value(queryValue(subitemgoValue));
}
if (subitemGroupValue!="") {
subitemGroupRange.value(queryValue(subitemGroupValue));
}
}
else {
itemRange.value(SysQuery::valueUnlimited());
curStatRange.value(SysQuery::valueUnlimited());
arrStatRange.value(SysQuery::valueUnlimited());
subitemNumRange.value(SysQuery::valueUnlimited());
subitemgoRange.value(SysQuery::valueUnlimited());
subitemGroupRange.value(SysQuery::valueUnlimited());
subitemgoyn = false;
}
}
Комментариев нет:
Отправить комментарий