Страница 2 из 3
Добавлено: 27 апр 2005, 16:42
Vitaliy
А может было бы правильнее пользователю дать выбирать группы из интерфейса-выбоа, который бы передавал данные в PICK и уже в запросе по PICK ограничивать GroupMC?
что-то типа:
Код: Выделить всё
...
and word(...)==Pick.wList
and Pick.cRec==GroupMC.nrec
...
интерфейс выбора можно прикрутить в окне с запросом параметров или вызывать сразу в cmInit.
Добавлено: 27 апр 2005, 17:40
Maverick
хех, давайте не будем додумывать за постановщика вопроса )))
мы ведь до сих пор не добились объяснения? чего человек хочет вааще )))
Добавлено: 27 апр 2005, 17:46
Max_Fin
Vitaliy писал(а):А может было бы правильнее пользователю
тоже вариант
Добавлено: 28 апр 2005, 10:48
DarkAngel27
Нужен интерфейс по МЦ, в котором было бы только МЦ из 2-х группМЦ. Можно ограничится стандартным GetMC, но при наличии очень большого кол-ва МЦ - это слишком неудобно.
Работать на выгрузке быстрее, да и визуализацию проще подключить, одно но: Если интерфейс открыт, то cmInit больше не будет проходить!!!! А если МЦ постоянно добавляются, то тогда как быть? Они не попадут в интерфейс!!!
Добавлено: 28 апр 2005, 11:29
Maverick
DarkAngel27 писал(а):Нужен интерфейс по МЦ, в котором было бы только МЦ из 2-х группМЦ. Можно ограничится стандартным GetMC, но при наличии очень большого кол-ва МЦ - это слишком неудобно.
Работать на выгрузке быстрее, да и визуализацию проще подключить, одно но: Если интерфейс открыт, то cmInit больше не будет проходить!!!! А если МЦ постоянно добавляются, то тогда как быть? Они не попадут в интерфейс!!!
Ок, это понятно...
Тогда ребята правы...
По сути будет правильным такой интерфейс:
Код: Выделить всё
INTERFACE TestMCGroup 'Заполнение собственной таблицы' (,,sci1Esc) cyan;
Create View
Var
Yr,Ms : word;
As Select *
From
KatMC,GroupMC,MyTable
KatMc SynKatMC
Where
((
Yr==MyTable.myYear And
Ms==MyTable.myMonth And
MyTable.cMc == KatMc.NRec And
KatMC.cGroupMC == GroupMC.NRec And
word(2) == Pick.wList And
Pick.cRec == SynKatMc.cGroupMC
));
Procedure RebuildRecords;
Begin
If RunInterface ( GETSOMGM )<> cmCancel // вызов ст.инт. множ.выбора групп МЦ
{
StartNewVisual (...);
Delete All MyTable;
_Loop Pick
{
_Loop SynKatMC
{
NextVisual;
Insert Current MyTable Set MyTable.cMC:=SynKatmc.nrec,
MyTable.Yr:=...,
MyTable.Ms:=...;
};
};
StopVisual(...);
};
End;
Panel pnlMain;
Table MyTable;
Browse brwmain
KatMC.Name : [40], Protect;
GroupMC.Name : [40], Protect;
End;
End;
HANDLEEVENT
// инициализация
cmInit : {
RebuildRecords;
};
// реакция на Alt+B - типа Фильтр поменять
cmFilterSave : {
//можно задать дату
....
// перестраиваем свобственную таблицу
RebuildRecords;
};
END;
END.
в принципе - реализация - такая, может быть только ньюансы другие, но суть такая:
1. тебе нужно отображать данные СВОЕЙ таблицы - значит ОНА должна быть корневой в подцепках логической таблы
2. тебе нужно динамически перестраивать содержимое СВОЕЙ таблицы - отсюда отдельная процедура, которая вызывается при инициализации, а сл-но и в любом другом событии...
По идее, если не нужно удалять все записи из собственной таблы, можно адаптировать процедуру, изменив ее таким образом , чтобы она просто добавляла появившиеся в KatMC, но отстутсвующие в ТВОЕЙ таблице записи...
Добавлено: 28 апр 2005, 11:36
Vitaliy
DarkAngel27 писал(а):Нужен интерфейс по МЦ, в котором было бы только МЦ из 2-х группМЦ. Можно ограничится стандартным GetMC, но при наличии очень большого кол-ва МЦ - это слишком неудобно.
Работать на выгрузке быстрее, да и визуализацию проще подключить, одно но: Если интерфейс открыт, то cmInit больше не будет проходить!!!! А если МЦ постоянно добавляются, то тогда как быть? Они не попадут в интерфейс!!!
Max_fin уже писал, но если все же через Pick делать, то:
Код: Выделить всё
select
var
wL: word;
...
from
katmc mc (KATMC03), GroupMC GMC, Pick pk, ...
where
((
wL==pk.wList
and pk.cRec==GMC.nrec //если действительно надо где-то выводить
and pk.cRec==mc.cGroupMC
and word(0)==mc.isarch (NoIndex)
and katmc.nrec == MY_TABLE.f1
and word(Year(cur_date)) == MY_TABLE.f2
and word(Month(cur_date)) == MY_TABLE.f3
));
Если не разберешься с интерфейсом выбора, тогда напиши в cmInit:
cmInit:
{
wL:=12;
if GetFirst FastFirstRow GroupMC where ((comp(281474976710748) == GroupMC.nRec)) = tsOK insert in Pick set wList:=wL, cRec:=GroupMC.nrec;
if GetFirst FastFirstRow GroupMC where ((comp(281474976710688) == GroupMC.nRec)) = tsOK insert in Pick set wList:=wL, cRec:=GroupMC.nrec;
...
}
Хотя в принципе проще пользовать фейс:
GETSOMEMC, в нем можно спокойно устанавливать фильтры, к примеру по группе МЦ, по первым символам наименования МЦ, по первым симовлам группы МЦ и т.д.
возвращает выбранные МЦ в Pick с wList=7.
параметр один:
-12345, если не нужно запрашивать кол-во
-12346, то же + пометить все по умолчанию
-12347 без кол-ва, без удаления Pick
-12348 с инвертированием Pick-а
-12349 без кол-ва, выбирать только МЦ из маркера 'GetSomeParty_NRecSaldoMC'
-12350 подсвечиваются серым МЦ не являющиеся комлектом
На сколько помню, установленные фильтры сохраняются в dsk, поэтому при повторной загрузке этого фейса заного фильтры устанавливать не надо будет, если dsk не снесли
Добавлено: 28 апр 2005, 11:44
Vitaliy
Maverick, а вот вопрос, что же DarkAngel27 хочеть записать в MY_TABLE?
Добавлено: 28 апр 2005, 11:44
Maverick
Добавлено: 28 апр 2005, 11:45
Maverick
Vitaliy писал(а):Maverick, а вот вопрос, что же DarkAngel27 хочеть записать в MY_TABLE?
Вот и я не понял
Добавлено: 28 апр 2005, 12:27
DarkAngel27
В MyTable Дополнительная информация по МЦ заносится... При этом она изменяется 1-3 раза в месяц. Эта доп. инфа должна быть только по 2 Группам МЦ.
И корневая таблица всё же KatMC, если не GroupMC должна быть.
Добавлено: 28 апр 2005, 12:41
DarkAngel27
Спасибо всем за советы... Обошёлся без внешней выгрузки, просто немножко код поправил. Я совсем забыл про (noIndex).
Код: Выделить всё
where
((
groupmc.nrec == katmc.cgroupmc
and word(0) == katmc.isarch (noIndex)
and katmc.nrec == MyTable.f1
and word(Year(cur_date)) == MyTable.f2
and word(Month(cur_date)) == MyTable.f3
))
and (groupmc.nrec = comp(281474976710748)
or groupmc.nrec = comp(281474976710688))
В результате интерфейс срабатывает в среднем за 2-3 сек.
Добавлено: 28 апр 2005, 14:22
Maverick
ну что, атцы, закрываем темку?
Добавлено: 28 апр 2005, 14:45
Vitaliy
А закрывай
Хотя я все равно не понял, почему бы автору не избавиться от фильтров
Добавлено: 28 апр 2005, 14:48
Max_Fin
Vitaliy писал(а):А закрывай
Хотя я все равно не понял, почему бы автору не избавиться от фильтров
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако.
Добавлено: 28 апр 2005, 14:54
Vitaliy
Max_Fin писал(а):Vitaliy писал(а):А закрывай
Хотя я все равно не понял, почему бы автору не избавиться от фильтров
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако.
Дело вкуса, это понятно, но избавление от фильтров дает прирост скорости.
А вот на счет таблиц памяти, тоже грешу этим часто