Страница 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 писал(а):А может было бы правильнее пользователю
тоже вариант :D

Добавлено: 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
И понелись различные реализации :D :D :D
Вот что значит - "дай программеру нормальный форум, он и в нем кодить начнет" 8)

Добавлено: 28 апр 2005, 11:45
Maverick
Vitaliy писал(а):Maverick, а вот вопрос, что же DarkAngel27 хочеть записать в MY_TABLE?
Вот и я не понял :lol:

Добавлено: 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
А закрывай :)
Хотя я все равно не понял, почему бы автору не избавиться от фильтров :lol:

Добавлено: 28 апр 2005, 14:48
Max_Fin
Vitaliy писал(а):А закрывай :)
Хотя я все равно не понял, почему бы автору не избавиться от фильтров :lol:
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако. 8)

Добавлено: 28 апр 2005, 14:54
Vitaliy
Max_Fin писал(а):
Vitaliy писал(а):А закрывай :)
Хотя я все равно не понял, почему бы автору не избавиться от фильтров :lol:
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако. 8)
Дело вкуса, это понятно, но избавление от фильтров дает прирост скорости.
А вот на счет таблиц памяти, тоже грешу этим часто :)