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

Простой интерфейс с множ. выбором

Добавлено: 22 сен 2003, 16:09
sol
Коллеги, поделитесь, пожалуйста, исходником любого простого интерфейса с множ. выбором и записью в Pick. (Лучше всего, конечно, "Выбор сотрудников")

Re: Простой интерфейс с множ. выбором

Добавлено: 23 сен 2003, 08:25
Spvl
Вот пример....
Не знаю, поможет ли ....
Дело в том что стандартного интерфейса выбора сотрудников я ненашел есть только
GETSOMEMOL - гурпповой выбор МОЛ
возврат выбранных - через Pick с ((8 == pick.wList))
.form 'RD31'
.ard
.nameinlist 'Пример интерфейса с множественным выбором'
.var
mcOrg:comp;
.endvar
.create view t1 as
select Name,
barkod
from Katmc
where ((Pick.crec==KatMc.nrec and 7==pick.wlist));
.fields
T1.katmc.name
t1.katmc.barkod
.endfields
.begin

RunInterface('GetSOMEMC',12345);

end.

.{ table 't1'

^ ^
.}
.endform

Re: Простой интерфейс с множ. выбором

Добавлено: 23 сен 2003, 10:49
sol
Это все у меня есть. Я имел в виду исходник интерфейса. Как заполнить Pick? Или может кто из знатоков поделится исходником, использующим маркеры. Не хочется изобретать велосипед...

Re: §±§в§а§г§д§а§Ы §Ъ§Я§д§Ц§в§ж§Ц§Ы§г §г §Ю§Я§а§Ш. §У§н§Т§а§

Добавлено: 23 сен 2003, 12:06
Max_Fin
/*
ЁXЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁ[
ЁU §Ї§С§Щ§Я§С§й§Ц§Я§Ъ§Ц : §®§Я§а§Ш§Ц§г§д§У§Ц§Я§Я§н§Ы §У§н§Т§а§в §г§а§д§в§е§Х§Я§Ъ§Ь§а§У ЁU
ЁU §°§д§У§Ц§д§г§д§У§Ц§Я§Я§н§Ы : §¬§а§в§з§а§Я§Ц§Я §®§С§Ь§г§Ъ§Ю §­§Ц§а§Я§Ъ§Х§а§У§Ъ§й ЁU
ЁU §±§С§в§С§Ю§Ц§д§в§н : TypePers - §і§а§д§в§е§Х§Я§Ъ§Ь, §в§а§Х§г§д§У§Ц§Я§Я§Ъ§Ь, §б§в§Ъ§Ь§С§Щ, §С§в§з§Ъ§У ЁU
ЁU §Ї§С§Щ§Я§С§й§Ц§Я§Ъ§Ц : §±§Ц§в§Ц§Ф§а§Я §У§н§Т§а§в§С §Ъ§Щ §Ю§С§в§Ь§Ц§в§С §У Pick (wList = 1111) ЁU
Ё^ЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁTЁa
*/
Interface MF_GetPersons '§Ј§н§Т§а§в §г§а§д§в§е§Х§Я§Ъ§Ь§а§У' (,,sci1InsPM) doaccept,cyan,EscClose;
show at (,,,);
Create View
var
iNo: LongInt;
Mark: LongInt;
cRec: Comp;
TypePers: Char;
(
MarkerStr
)
As select
if (SearchMarker(Mark, Persons.nRec, iNo), ' ЎМ ', ' '),
Persons.TabNmb,
Persons.FIO
From
Persons
Where
((
TypePers == Persons.IsEmployee
));

Parameters
TypePers; // §і - §г§а§д§в§е§Х§Я§Ъ§Ь

Panel P1;
Table Persons;

Browse brGetPersons
show at (,,,);
Fields
MarkerStr '+/-': [3], Protect, {Font = {Color = if (MarkerStr = ' ЎМ ', ColorMark, 0)}};
Persons.TabNmb '§ґ§С§Т§Ц§Э§о§Я§н§Ы §Я§а§Ю§Ц§в' ('§ґ§С§Т§Ц§Э§о§Я§н§Ы §Я§а§Ю§Ц§в'): [10], protect, {Font = {Color = if (MarkerStr = ' ЎМ ', ColorMark, 0)}};
Persons.FIO '§¶§С§Ю§Ъ§Э§Ъ§с §Є§Ю§с §°§д§й§Ц§г§д§У§а' ('§¶§С§Ю§Ъ§Э§Ъ§с §Є§Ю§с §°§д§й§Ц§г§д§У§а'): [35], protect, {Font = {Color = if (MarkerStr = ' ЎМ ', ColorMark, 0)}};
End;
End; // panel

HandleEvent
cmMarkUnMark:
{
InvertMarker(Mark, Persons.nRec);
if GetNext Persons = tsOk {};
RescanPanel(#Persons);
}
cmSelectAll:
{
StartNewVisual(vtRotateVisual, vfTimer, '§Є§Х§Ц§д §б§а§Ю§Ц§д§Ь§С', 5);

ClearMarker(Mark);
PushPos (#Persons);
If GetFirst Persons = tsOk then
Do
{
InsertMarker(Mark, Persons.nRec);
NextVisual;
};
While GetNext Persons = tsOk;
PopPos(#Persons);
RescanPanel(#Persons);
StopVisual('', 0);
}
cmUnSelectAll:
{
ClearMarker(Mark);
RescanPanel(#Persons);
}
cmInvertAll:
{
StartNewVisual(vtRotateVisual, vfTimer, '§Є§Х§Ц§д §Ъ§Я§У§Ц§в§д§Я§С§с §б§а§Ю§Ц§д§Ь§С', 5);

ClearMarker (Mark);
PushPos(#Persons);
if GetFirst Persons = tsOk then
Do
{
InvertMarker(Mark, Persons.nRec);
NextVisual;
};
While GetNext Persons = tsOk;
PopPos(#Persons);
RescanPanel(#Persons);
StopVisual('', 0);
};
cmInit:
{
Mark:=InitMarker('MF_MarkerPers', 8, 1000, 100);
}
cmDone:
{
DoneMarker(Mark, 'MF_MarkerPodr');
}
cmDefault:
{
Delete NoVisual Pick Where ((Word(1111) == Pick.wList));
if GetMarkerCount (Mark) = 0
{
Insert Pick Set
Pick.wList := 1111,
Pick.cRec := Persons.nRec;
}
else
{
for (iNo := 0; iNo < GetMarkerCount(Mark); iNo := iNo + 1)
{
if GetMarker (Mark, iNo, cRec)
{
Insert Pick Set
Pick.wList := 1111,
Pick.cRec := cRec;
};
}
}
}
cmAttrib:
{
CloseInterface(cmDefault);
}
end;

end.

Re: Поправка

Добавлено: 23 сен 2003, 12:10
Max_Fin
cmDone:
{
DoneMarker(Mark, 'MF_MarkerPodr');
}

заменить наcmDone:
{
DoneMarker(Mark, 'MF_MarkerPers');
}

Re: „K„Ђ„t„y„‚„Ђ„r„{„p ((

Добавлено: 23 сен 2003, 12:13
Max_Fin
/*
„s===========================================================================„ў
„  „N„p„x„~„p„‰„u„~„y„u : „M„~„Ђ„w„u„ѓ„„„r„u„~„~„Ќ„z „r„Ќ„q„Ђ„‚ „ѓ„Ђ„„„‚„…„t„~„y„{„Ђ„r „ 
„  „O„„„r„u„„„ѓ„„„r„u„~„~„Ќ„z : „K„Ђ„‚„‡„Ђ„~„u„~ „M„p„{„ѓ„y„} „L„u„Ђ„~„y„t„Ђ„r„y„‰ „ 
„  „P„p„‚„p„}„u„„„‚„Ќ : TypePers - „R„Ђ„„„‚„…„t„~„y„{, „‚„Ђ„t„ѓ„„„r„u„~„~„y„{, „Ѓ„‚„y„{„p„x, „p„‚„‡„y„r „ 
„  „N„p„x„~„p„‰„u„~„y„u : „P„u„‚„u„s„Ђ„~ „r„Ќ„q„Ђ„‚„p „y„x „}„p„‚„{„u„‚„p „r Pick (wList = 1111) „ 
L===========================================================================-
*/
Interface MF_GetPersons '„B„Ќ„q„Ђ„‚ „ѓ„Ђ„„„‚„…„t„~„y„{„Ђ„r' (,,sci1InsPM) doaccept,cyan,EscClose;
show at (,,,);
Create View
var
iNo: LongInt;
Mark: LongInt;
cRec: Comp;
TypePers: Char;
(
MarkerStr
)
As select
if (SearchMarker(Mark, Persons.nRec, iNo), ' v ', ' '),
Persons.TabNmb,
Persons.FIO
From
Persons
Where
((
TypePers == Persons.IsEmployee
));

Parameters
TypePers; // „R - „ѓ„Ђ„„„‚„…„t„~„y„{

Panel P1;
Table Persons;

Browse brGetPersons
show at (,,,);
Fields
MarkerStr '+/-': [3], Protect, {Font = {Color = if (MarkerStr = ' v ', ColorMark, 0)}};
Persons.TabNmb '„S„p„q„u„|„Ћ„~„Ќ„z „~„Ђ„}„u„‚' ('„S„p„q„u„|„Ћ„~„Ќ„z „~„Ђ„}„u„‚'): [10], protect, {Font = {Color = if (MarkerStr = ' v ', ColorMark, 0)}};
Persons.FIO '„U„p„}„y„|„y„‘ „I„}„‘ „O„„„‰„u„ѓ„„„r„Ђ' ('„U„p„}„y„|„y„‘ „I„}„‘ „O„„„‰„u„ѓ„„„r„Ђ'): [35], protect, {Font = {Color = if (MarkerStr = ' v ', ColorMark, 0)}};
End;
End; // panel

HandleEvent
cmMarkUnMark:
{
InvertMarker(Mark, Persons.nRec);
if GetNext Persons = tsOk {};
RescanPanel(#Persons);
}
cmSelectAll:
{
StartNewVisual(vtRotateVisual, vfTimer, '„I„t„u„„ „Ѓ„Ђ„}„u„„„{„p', 5);

ClearMarker(Mark);
PushPos (#Persons);
If GetFirst Persons = tsOk then
Do
{
InsertMarker(Mark, Persons.nRec);
NextVisual;
};
While GetNext Persons = tsOk;
PopPos(#Persons);
RescanPanel(#Persons);
StopVisual('', 0);
}
cmUnSelectAll:
{
ClearMarker(Mark);
RescanPanel(#Persons);
}
cmInvertAll:
{
StartNewVisual(vtRotateVisual, vfTimer, '„I„t„u„„ „y„~„r„u„‚„„„~„p„‘ „Ѓ„Ђ„}„u„„„{„p', 5);

ClearMarker (Mark);
PushPos(#Persons);
if GetFirst Persons = tsOk then
Do
{
InvertMarker(Mark, Persons.nRec);
NextVisual;
};
While GetNext Persons = tsOk;
PopPos(#Persons);
RescanPanel(#Persons);
StopVisual('', 0);
};
cmInit:
{
Mark:=InitMarker('MF_MarkerPers', 8, 1000, 100);
}
cmDone:
{
DoneMarker(Mark, 'MF_MarkerPers');
}
cmDefault:
{
Delete NoVisual Pick Where ((Word(1111) == Pick.wList));
if GetMarkerCount (Mark) = 0
{
Insert Pick Set
Pick.wList := 1111,
Pick.cRec := Persons.nRec;
}
else
{
for (iNo := 0; iNo < GetMarkerCount(Mark); iNo := iNo + 1)
{
if GetMarker (Mark, iNo, cRec)
{
Insert Pick Set
Pick.„€List := 1111,
Pick.cRec := cRec;
};
}
}
}
cmAttrib:
{
CloseInterface(cmDefault);
}
end;

end.

Огромное спасибо,

Добавлено: 24 сен 2003, 00:27
sol
жаль только, что русские шрифты не читаются, а там,наверное, есть интересные комментарии...

Re: Огромное спасибо,

Добавлено: 24 сен 2003, 21:23
Galpro_tut
1