Добрый день.
У меня задача - разработать интерфейс с текущем наличием спецодежды (хотя это в принципе не важно). Проблема заключается в том, что должна быть возможность устанавливать фильтры с множественным выбором, например по подразделениям и по МОЛам. Получить эти фильтры проблемы нет (я использую 'L_MOL::GETSOMEMOL' и 'Z_KATPODR::GETSOMEPODR'), а вот как наложить эти ограничения на логическую таблицу не знаю. Делаю следующие ограничения:
bounds byMOL as
mbpin.cmol /== katmol.nrec and
Pick.crec == katmol.nrec and
8 == Pick.wlist
bounds bySklad as
mbpin.cpodr /== katpodr.nrec and
Pick.crec == katpodr.nrec and
11 == Pick.wlist
Но как-то криво (да и не работает )
Подскажите принцип, кто знает.
Разбил на несколько баундсов. Что-то так у меня вообще не фильтрует. Приведу основной код, может, в другом месте неправильно делаю:
as select *
from mbpin, katmbp, katpodr, katmol, grpodr
where
((
1 == mbpin.status
and mbpin.cmbp == katmbp.nrec
and mbpin.cpodr == katpodr.nrec
and mbpin.cmol == katmol.nrec
and katpodr.cgrpodr == grpodr.nrec
))
bounds byMOL1 as
mbpin.cmol /== katmol.nrec
bounds byMOL2 as
Pick.crec == katmol.nrec and
8 == Pick.wlist
bounds bySklad1 as
mbpin.cpodr /== katpodr.nrec
bounds bySklad2 as
Pick.crec == katpodr.nrec and
11 == Pick.wlist
order by mbpin.status, mbpin.cpodr, mbpin.cmol;
далее накладываю ограничения:
#MOL:
{
RunInterface('L_MOL::GETSOMEMOL');
if tsOk = GetFirst Pick where ((8 == pick.wlist))
{
PushBounds(tbbyMOL1);
PushBounds(tbbyMOL2);
}
else
{
PopBounds(tbbyMOL1);
PopBounds(tbbyMOL2);
}
RescanPanel(#mbpin);
}
#Sklad:
{
RunInterface('Z_KATPODR::GETSOMEPODR');
if tsOk = GetFirst Pick where ((11 == pick.wlist))
{
PushBounds(tbbySklad1);
PushBounds(tbbySklad2);
}
else
{
PopBounds(tbbySklad1);
PopBounds(tbbySklad2);
}
RescanPanel(#mbpin);
}
Цель вывести записи в браузер или использовать только внутри интерфейса при подсчёте циферек?
Если в барузер не надо, бежите по всей таблице и проверяете попадает ли та или иная запись под ваше ограничение, если да берёте ее, если нет пропускаете.
Если в барузер не надо, бежите по всей таблице и проверяете попадает ли та или иная запись под ваше ограничение, если да берёте ее, если нет пропускаете.
Вот так я и делал до этого последнего времени, а тут понадобилось в интерфейс.
where
((
1 == mbpin.status
and mbpin.cmbp == katmbp.nrec
and mbpin.cpodr /== katpodr.nrec
and mbpin.cmol /== katmol.nrec
and katpodr.cgrpodr == grpodr.nrec
))
bounds byMOL1 as
katmol.nrec/==Pick.crec
8 == Pick.wlist
bounds bySklad1 as
katpodr.nrec /== Pick.crec and
11 == Pick.wlist
Т.е. если я пишу Push, то все другие ограничения на эту таблицу снимаются? А при использования popbounds что происходит? (subbounds, видимо, снимает конкретное ограничение)