Страница 2 из 4
Добавлено: 22 окт 2008, 13:16
Алексей
edward_K э...
есть таблица т1, со ссылками на другую таблицу т2
по т2 прошелся маркером, забил допустим 2 значения.
Как проще наложить условие на т1 чтобы попадали только те записи, которые имеют ссылки на т2, находящиеся в маркере, неужели SearchMarker() = true ?
может можно проще?
Добавлено: 22 окт 2008, 13:54
Den
Ну например через condition не получится ?
condition mark searchmarker(....)=true ;
...
if GetMarkerCount(...)>0 // что то выбрано в маркер, то ложим фильтр на t2
then PushConditionforleave(tcmark)
...
т.е. после каждого "...забил допустим 2 значения..." проверяем на это условие..
Добавлено: 23 окт 2008, 06:23
Алексей
я так и сделал, через Condition
Просто я имел в виду, что можно использовать вместо фукнции SearchMarker? Вообще, она быстро отрабатывает или нет?
Добавлено: 23 окт 2008, 12:33
Den
Ты тыщами собрался что ль маркировать то )
function SearchMarker (markers : longInt;
item : anyType;
indexNo : longInt
) : boolean;
раз ANYTYPE, то, скорее всего, простой перебор....
Добавлено: 23 окт 2008, 16:18
edward_K
быстрее чем Pick.
Добавлено: 24 окт 2008, 10:20
Алексей
edward_K т.е. я правильно сделал? Кондишн на фукнцич SearchMarker = true ?
А вы сами тестировали быстродействие, или информация от разработчиков?
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 16 май 2012, 16:42
alfmaster
Приветствую всех! Вот поднял темку ископаемую.. Перерыл форум в поиске примера интерфейса группового выбора с использованием маркеров, из любой таблицы с дальнейшим использованием в отчете...не нашел... Может кто поможет начинающему, прислав пример такого интерфейса, чтоб на практике разбираться(по докам не очень понятен механизм выборки с маркерами) , Спасибо.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 17 май 2012, 09:31
RAJAH
alfmaster писал(а):из любой таблицы
Это вряд ли. Для разных таблицы - свои интерфейсы, разные способы пометки (через pick - надо знать код pick.wlist, либо через маркер - надо знать имя маркера). Примеры и на предыдущей странице данной темы есть.
Вот ещё (выбор видов оплат):
Код: Выделить всё
...
.var
...
MarkSt, MarkIn: longint;
...
.endvar
...
.begin
...
RunInterface('Z_ZAR::marknach');
MarkSt:=InitMarker ('VedNach_Marker_New1', 4, 200, 7);
for(MarkIn:=0; MarkIn<=GetMarkerCount(MarkSt)-1; MarkIn:=MarkIn+1)
begin
if GetMarker(MarkSt, MarkIn, VO) then
...
end;
ClearMarker(MarkSt);
DoneMarker(MarkSt, 'VedNach_Marker_New1');
...
end.
...
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 12:47
alfmaster
Попробовал преобразовать пример по маркерам из хелпа под другую таблицу, но что-то упускаю - записи в интерфейсе не помечаются Insert.
Код: Выделить всё
Interface MBPg 'Таблицы системы'
(,hcDictInterface,scExtFiles) EscClose, Cyan;
show at ( 3, 1, 76, 26);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) = True, 'v', ' '),
* from MBPMove;
Panel pnTablesList;
Table MBPMove;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
MBPMove.nrec 'Nrec' : Protect;
MBPMove.dmove 'дата акта' : Protect;
MBPMove.nom 'номер акта' : Protect;
end;
HandleEvent
cmMarkRec : begin
InvertMarker(Markers, MBPMove.nrec);
if ((GetNext MBPMove) = tsOk) {};
RescanPanel(tnMBPMove);
end;
cmMarkAll : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InsertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual('', 0);
RescanPanel(tnMBPMove);
end;
cmInvertMark : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InvertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual( '', 0);
RescanPanel(tnMBPMove);
end;
cmUnMarkAll : begin
ClearMarker(Markers);
RescanPanel(tnMBPMove);
end;
end;
end; // panel
HandleEvent
cmInit : begin
!RunInterface ('F_MBP::SPIS_MBP.GETMBPMOVESPIS') // 'F_MBP::SPIS_MBP.GETMBPMOVESPIS.KATPODR.NAME'
Markers:=InitMarker('SPIS_MBPViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 14:18
RAJAH
Так вы свой интерфейс хотите написать? Интересно, зачем?
По-моему, вначале надо вот так прописать:
Код: Выделить всё
#include GALNET.CCM
#include GALNET.CSC
end;
И команды, вроде бы, другие: cmdomarkunmark, cmselall, cmunselall
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 16:08
alfmaster
Да , конечно перед кодом кусок такой присутствует еще с описанием
Код: Выделить всё
#commands start at 50000
const
cmALTQ = 99999; scExtFiles=88888;
end;
StatGal statusline
{
(scExtFiles..scExtFiles)
{
'~F1~ Справка', cmHelp, kbF1;
'~Enter~ Карточка', cmDefault, kbEnter;
'~Ins,+/-, *~ Пометка', cmMarkRec, kbIns;
'', cmMarkAll, kbGrayPlus;
'', cmUnMarkAll, kbGrayMinus;
'', cmInvertMark, kbGrayMul;
'', cmMenu, kbF10;
'', cmZoom, kbF5;
'', cmResize, kbCtrlF5;
'', cmNext, kbF6;
'', cmPrev, kbShiftF6;
'', cmSysMenu, kbCtrlF10;
'', cmLastHelp, kbAltF1;
'', cmQuit, kbAltX;
'', cmMenu, kbF10;
}
}
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 16:39
KATZ
Размер элемента в маркере д. б. не 2, а 8. Если делать собственную статус-линию, то она перекроет стандартную, все остальные контексты пропадут, так что ищите подходящий контекст среди имеющихся, например, sci1EscIns=6960. И команды тоже стандартные берите cmDoMarkUnMark=1221, cmSelAll=1219, cmUnSelAll=1220.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 16:54
alfmaster
Но галактический же пример работает из описания языка VIP?- заменил только таблицу и поля вывода, и пометка инсертом пропала
Вот рабочий исходник с работающей пометкой записей
Код: Выделить всё
#commands start at 50000
const
cmALTQ = 99999; scExtFiles=88888;
end;
StatGal statusline
{
(scExtFiles..scExtFiles)
{
'~F1~ Справка', cmHelp, kbF1;
'~Enter~ Карточка', cmDefault, kbEnter;
'~Ins,+/-, *~ Пометка', cmMarkRec, kbIns;
'', cmMarkAll, kbGrayPlus;
'', cmUnMarkAll, kbGrayMinus;
'', cmInvertMark, kbGrayMul;
'', cmMenu, kbF10;
'', cmZoom, kbF5;
'', cmResize, kbCtrlF5;
'', cmNext, kbF6;
'', cmPrev, kbShiftF6;
'', cmSysMenu, kbCtrlF10;
'', cmLastHelp, kbAltF1;
'', cmQuit, kbAltX;
'', cmMenu, kbF10;
}
}
Interface katmc 'Таблицы системы'
(,hcDictInterface,scExtFiles) EscClose, Cyan;
show at ( 3, 1, 76, 26);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, x$Files.xf$Code, IndexNo) = True, 'v', ' '),
* from x$Files;
Panel pnTablesList;
Table x$Files;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
x$Files.xf$Code 'Код' : Protect;
x$Files.xf$Name 'Имя таблицы' : Protect;
x$Files.xf$Title 'Заглавие таблицы' : Protect;
end;
HandleEvent
cmMarkRec : begin
InvertMarker(Markers, x$Files.xf$Code);
if ((GetNext x$Files) = tsOk) {};
RescanPanel(tnx$Files);
end;
cmMarkAll : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InsertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual('', 0);
RescanPanel(tnx$Files);
end;
cmInvertMark : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InvertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual( '', 0);
RescanPanel(tnx$Files);
end;
cmUnMarkAll : begin
ClearMarker(Markers);
RescanPanel(tnx$Files);
end;
end;
end; // panel
HandleEvent
cmInit : begin
Markers:=InitMarker('ViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 17:10
KATZ
1). В примере ключевое поле x$Files.xf$Code типа word, и размер элемента маркера 2. Если вы хотите хранить в маркере NRec-ы, то надо задавать размер 8, а не 2.
2). Пример предполагает замену статус-линии, это возможно в экспериментально-познавательных целях, но никак не в реальной "Галактике".
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 21 май 2012, 17:26
alfmaster
Ну конечно! Спасибо большое - действительно, дело было в длине поля, теперь помечает записи... Теперь надо мне понять, как передать нреки из маркера во вьюху, по которой затем отчет вывести. Продолжаю рыться...