Визуализация работы...

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Vitaliy
Постоянный обитатель
Сообщения: 101
Зарегистрирован: 27 апр 2005, 09:52
Откуда: Сибирь

Сообщение Vitaliy »

А может было бы правильнее пользователю дать выбирать группы из интерфейса-выбоа, который бы передавал данные в PICK и уже в запросе по PICK ограничивать GroupMC?
что-то типа:

Код: Выделить всё

...
and word(...)==Pick.wList
and Pick.cRec==GroupMC.nrec
...
интерфейс выбора можно прикрутить в окне с запросом параметров или вызывать сразу в cmInit.
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

хех, давайте не будем додумывать за постановщика вопроса )))
мы ведь до сих пор не добились объяснения? чего человек хочет вааще )))
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Vitaliy писал(а):А может было бы правильнее пользователю
тоже вариант :D
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Нужен интерфейс по МЦ, в котором было бы только МЦ из 2-х группМЦ. Можно ограничится стандартным GetMC, но при наличии очень большого кол-ва МЦ - это слишком неудобно.
Работать на выгрузке быстрее, да и визуализацию проще подключить, одно но: Если интерфейс открыт, то cmInit больше не будет проходить!!!! А если МЦ постоянно добавляются, то тогда как быть? Они не попадут в интерфейс!!!
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение 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, но отстутсвующие в ТВОЕЙ таблице записи...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vitaliy
Постоянный обитатель
Сообщения: 101
Зарегистрирован: 27 апр 2005, 09:52
Откуда: Сибирь

Сообщение 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 не снесли :)
Vitaliy
Постоянный обитатель
Сообщения: 101
Зарегистрирован: 27 апр 2005, 09:52
Откуда: Сибирь

Сообщение Vitaliy »

Maverick, а вот вопрос, что же DarkAngel27 хочеть записать в MY_TABLE?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

И понелись различные реализации :D :D :D
Вот что значит - "дай программеру нормальный форум, он и в нем кодить начнет" 8)
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Vitaliy писал(а):Maverick, а вот вопрос, что же DarkAngel27 хочеть записать в MY_TABLE?
Вот и я не понял :lol:
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

В MyTable Дополнительная информация по МЦ заносится... При этом она изменяется 1-3 раза в месяц. Эта доп. инфа должна быть только по 2 Группам МЦ.
И корневая таблица всё же KatMC, если не GroupMC должна быть.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение 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 сек.
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

ну что, атцы, закрываем темку?
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vitaliy
Постоянный обитатель
Сообщения: 101
Зарегистрирован: 27 апр 2005, 09:52
Откуда: Сибирь

Сообщение Vitaliy »

А закрывай :)
Хотя я все равно не понял, почему бы автору не избавиться от фильтров :lol:
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Vitaliy писал(а):А закрывай :)
Хотя я все равно не понял, почему бы автору не избавиться от фильтров :lol:
У каждого свой стиль программирования, у меня через таблицы в памяти, у тебя через временные, а у кого-то через фильтры.
Дело вкуса и времени, однако. 8)
Vitaliy
Постоянный обитатель
Сообщения: 101
Зарегистрирован: 27 апр 2005, 09:52
Откуда: Сибирь

Сообщение Vitaliy »

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