Страница 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 писал(а):А закрывай 

Хотя я все равно не понял, почему бы автору не избавиться от фильтров  

 
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако.  

 
Дело вкуса, это понятно, но избавление от фильтров дает прирост скорости.
А вот на счет таблиц памяти, тоже грешу этим часто 
