Страница 1 из 1

Групповой выбор дескрипторов

Добавлено: 18 июн 2007, 09:21
hope
Добрый день!

Нужно выбрать несколько дескрипторов - подскажите стандартный интерфейс.

Спасибо!

Добавлено: 18 июн 2007, 10:49
ira
поищите GetGrDescr - позволяет выбрать несколько групп
Parameters
s4, // код группы пользователей (по умолчанию и возвращаемый)
IsMultyPick, // TRUE - множественный выбор
NotNeedKill, // TRUE - не очищать маркер
pGrDescr // nRec группы пользователей (по умолчанию и возвращаемый)
;

Добавлено: 18 июн 2007, 10:54
ira
для выбора нескольких пользователей GetSomeDescr
Parameters
NotNeedKill; // TRUE - очищать маркер

Добавлено: 18 июн 2007, 11:15
hope
А как использовать этот маркер?

Добавлено: 18 июн 2007, 11:42
ira
посмотрите ...\Vip\FIN\REP\SEEPLATS.VIP - там есть пример обработки обоих этих интерфейсов.

Добавлено: 18 июн 2007, 11:56
Den
Ira все правильно написала...
GetSomeDescr - Выбор дескриптора. Сохранение выбранных элементов идет в маркер. Если не нравится с маркером работать, то можно так :

Interface forexample 'Перегон из маркера в pick' DoAccept,EscClose,cyan;
create view
var
Markerd, IndexMark : longint;
NotNeedKill :boolean;

as select * from pick
where ((word(2507)==wlist));


parameters NotNeedKill;

procedure Marker2Pick(Marker: longint; wL: word);
var
i, MarkerCount: longint;
pickrec: comp;
{
MarkerCount:=GetMarkerCount(Marker);
for(i:=0;i<MarkerCount;i:=i+1)
{ if GetMarker(Marker,i,pickrec)
{
if ( insert Pick set Pick.wList := wL,
Pick.PickKol := i,
Pick.PickNum := i,
Pick.cRec := pickrec ) <> tsOK {};
}
NextVisual;
}
}

HandleEvent
CmInit:{

delete all from pick where ((word(2507)==wlist)) ;
if RunInterface('GetSomeDescr',NotNeedKill)=CmCancel
{
Abort;
exit;
}
markerd:=initmarker('UserTuneDescr', 8, 100, 10);
Marker2Pick(MarkerD, word(2507));
DoneMarker(markerd,'UserTuneDescr');
PutCommand(cmDefault);
}
end;
end.

Добавлено: 18 июн 2007, 14:32
hope
Спасибо! Буду разбираться!

Добавлено: 18 июн 2007, 14:37
hope
Ira! А где это можно найти ...\Vip\FIN\REP\SEEPLATS.VIP ?

Добавлено: 18 июн 2007, 15:28
hope
Извинясь, если вопрос тупой... Но пока логики маркеров не пойму...

Интерфейсом GetSomeDescr я запоминаю выбранные значения в маркер.

Далее в своем интерфейсе мне нужно эти значения достать.

Как я должна добраться именно до этого маркера?

Ведь я могла запустить не только интерфейс GetSomeDescr, который работает с маркером. Но и еще что-нибудь выбрать, и тоже в маркер. Как определить, что вот это маркер - это для дескрипторов.

Или записи от обеих таблиц запишутся в один маркер? Как тогда выбрать записи для конкретной таблицы?

Добавлено: 18 июн 2007, 15:36
Maverick
Надя, собственно, каждый маркер имеет собственный уникальный идентификатор . Ну или считайте, что вы имеете в системе набор поименованных массивов, которые сохраняются системой на момент закрытия интерфейса в DSK-файле.
сл-но Ваша задача - в собственном интерфейсе проинициализировать этот массив и считать из него все данные.
В приведенном выше коде, маркер (массив) имеет имя UserTuneDescr и хранятся в нем (судя по размеру одного элемента) записи типа Comp, т.е. NRec-и из x$users, если мне память не изменяет...

Добавлено: 18 июн 2007, 16:36
hope
Не пойму, при вызове GetSomeDescr я ведь нигде не указываю, в какой маркер ложить?

Или в Галактике строго зашито, что помеченные дескрипторы ложатся всегда в маркер с именем UserTuneDescr?

Или так:
Т.е. я должна сначала проинициализовать маркер, например М1. Потом запустить интерфейс GetSomeDescr, который запишет в мой маркер М1 выбранные значения. Затем закрыть маркер М1 с сохранением данных.
Затем проинициализировать маркер М2. Затем запустить другой интерфейс, который положит в маркер М2 выбранные значения другой таблицы. Затем закрыть маркер М2 с сохранением данных.

А дальше уже считывать значения из нужного мне маркера?