Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Урок 202 Пример написания плагина для начинающих
Goto page Previous  1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 22 May 2007 15:03    Post subject: Reply with quote

В том же описании функции посмотрите на массив aSortSeek
Откройте описание его структуры и внимательно познакомьтесь с ним, особенно с элементами начиная с 10-го и попробуйте написать свой вариант сортировк
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 22 May 2007 16:34    Post subject: Reply with quote

да вот я как раз по поводу этого массива и интересуюсь...
Quote:
aSortSeek:={{'- номерам ТМЦ внутри групп',{'Код группы?:','Ном. номер?: '},{'Grup','NNum'},'UPPER(aIn[1]+aIn[2])',,,{"grupss"},"MLABEL"},;
{'- наименованиям внутри групп',{'Код группы: ','Наименование:'},{'grup','Space(10)'},'UPPER(aIn[1]+aIn[2])',,,{"grupss"},"MKart_P2"}}
У меня уже давно работает, а...
Quote:
{'- Коду ценовой группы',{'Код ценовой группы:'},{'MLabel->gr_cen'},'UPPER(aIn[1])',,,{"C_gr"},"C_GR_Sort"}
следующим эллементом массива не хоче
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 22 May 2007 16:46    Post subject: Reply with quote

Не - так не получится...
У Вас mlabel это не основная таблица, по которой Инитлист сделан,
а дочерняя. Для сортировки по дочерней служат элементы после 10-го.
Насчет сортировки не знаю сам не пробовал, а вот поиск точно работает... Попробуйте немного самостоятельно плз.
Напишите как поняли а чуть позже поразбира
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 23 May 2007 00:56    Post subject: Reply with quote

Ну... ладно... попробую разобраться... а...
Quote:
Насчет сортировки не знаю сам не пробовал, а вот поиск точно работает...
=) Как раз поиск особо и не нужен=) Важна сортировка
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 23 May 2007 12:25    Post subject: Reply with quote

Посмотрите примеры в описании.
Заполните 10 и 14 элемент массива aSortSeek
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 23 May 2007 12:33    Post subject: Reply with quote

Блин, без поллитра не разберёшься! подскажите плиз... хотя бы про поиск в дочерней базе...
Quote:
{'- Коду ценовой группы',{'Код ценовой группы:'},{'Mlabel->gr_cen'},'aIn[1]',,,{"C_gr"},"C_GR_Sort",aGetBlock,"Mlabel","MKart_P2",'UPPER(aIn[2]+aIn[3])',.T.}}
вообще не догоняю... У меня путаница какая-то с "дочерней"/"родительской"...
InitList по Mkart. Дочерняя база - mlabel. В ней есть после "Gr_cen" в которое вбиваются группы. Ralation установлен по Grup+Nnum. Подскажите пожалуйста... что я должен указвать в параметрах 3,4,8,10,11,12...
3: то что мне надо искать в Mlabel??? {'Mlabel->gr_cen'} (или просто 'gr_cen') ???
4: Соответственно aIn[1], которым и будет передаваться то, что в поле gr_cen. Так?
8: имя тэга чего??? Mkart, или MLabel???
10: вот здесь, вроде, понятно... - MLabel... Так?
11: Тэг поиска в родительской - то есть в MKatr??? А зачем??? Мне же в Mlabel искать надо!
12: А здесь нада что??? Если у меня тэг "MKart_P2", то мне нало указывать aIn[1]+aIn[2] (Grup+NNum), но во первых aIn[1] у меня уже есть (gr_cen), а Grup и NNum у меня же не определены!? или как???
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 23 May 2007 14:36    Post subject: Reply with quote

Отвлекитесь на секунду от Инитлиста и попробуйте осознать механизм.

Вам нужно найти запись в родительской базе по результатам поиска в дочерней, а значит Вам нужно:
1.Осуществить поиск в дочерней базе
2.Считать в найденной записи значения полей для поиска в родительской
3.По параметрам из п.2 найти запись в родительской и высветить ее курсором.

Т.е. Вы находитесь в MKART и на экране у вас реестр из MKART и в результате Вам надо найти строку в MKART у которой в связанной таблице Mlabel есть интересующее Вас значение.

Для этого Вам надо найти сначала в mlabel нужную строку а для этого нужен тег для поиска и собственно ввод значений для этого тега
А потом уже поскольку связка у Вас из MKART в MLABEL а Вам нужна наоборот в данный момент - Вам надо по данным строки в MLABEL найденной найти строку в MKART для этого и служит 12 элемент - для поиска в MKART поскольку реляция работает только сверху вниз.
А для того чтобы найти чего-то опять нужно понимать по какому тегу и какие брать значения для этого Тега.

И на секунду при таком механизме попробуйте представить сортировку и Вы поймете почему она медленная
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 24 May 2007 12:13    Post subject: Reply with quote

Quote:
И на секунду при таком механизме попробуйте представить сортировку и Вы поймете почему она медленная
Да я представляю... А есть какой-нибудь другой способ??? Ну... Например временная база...
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 24 May 2007 12:56    Post subject: Reply with quote

Скорее всего временный индекс, но и он и временная база означает что всякий раз при входе в прайс-лист пользователь вынужден будет ждать как минимум 2-3 минуты пока откроется экран (пока построится это дело)
На практике это очень сильно достает пользователей
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 24 May 2007 18:24    Post subject: Reply with quote

ммм... а... если написать отдельный инитлист для Mlabel??? Пользователь хочет такую сортировку. Можно-ли вытащить по hotkey инит лист поверх существующего???
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 24 May 2007 20:56    Post subject: Reply with quote

Да можно то можно - можно весь инит-лист по mlabel сделать. Потеряете тока стандартные возможности позиций включенных в прайс-лист...Придется свои делать
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 28 May 2007 16:57    Post subject: Reply with quote

У меня трабл=( Я вызываю горячими клавишами Function Init2() и Init3(), а у меня aHeads и aSortSeek от от Init1(). Переменные во всех 3-х Init() -ах - Private
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 28 May 2007 17:59    Post subject: Reply with quote

Сделайте переменные LOCAL
Тогда они будут видны тока внутри функции и кстати памяти
меньше съедать будут
Back to top
View user's profile Send private message Send e-mail
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 29 May 2007 12:56    Post subject: Reply with quote

Везде расставил... Всё равно тоже самое=( У меня из Маина запускается Инит1, а из Инит1 хоткеями запускются Инит 2 и Инит3... Чувствую, что чего-то не хватает... а вот чего...

И ещё...

У меня в конце Инит2 и Инит3 Стоит Rerurn Init1() - иначе почеу-то перестаёт работать cCurProc... соответственно, чтобы покинуть плагин надо нажать Esc 2 раза. С этим как?
Back to top
View user's profile Send private message
Notwar



Joined: 21 Sep 2005
Posts: 101
Location: Notwar Dan
Occupation: mlst(it)
Interests: Moscow

PostPosted: 29 May 2007 14:36    Post subject: Вот, выкладываю всё как есть Reply with quote

Вот полный код... может чё сразу увидете...
Quote:
#define K_ALT_A 286
#define K_ALT_S 287
#define K_ALT_E 274

FUNCTION Main()

Private Apply,MyFun,MyFunnction,GrSorta,Set,aSetKey
//altd()

aSet:=SAVESET()
aSetKey:=SAVESETKEY()

NetUse("_Mgrup",loadpath()+"\sclad\mgrup.dbf",,.F.)
NetUse("Mkart",LoadPath()+"\sclad\mkart.dbf",,.F.)
NetUse("Mlabel",loadpath()+"\sclad\mlabel.dbf",,.F.)
NetUse("CenGrups",loadpath()+"\sclad\CenGrups.dbf",,.F.)
_Mgrup->(OrdSetFocus("MGrup"))
_Mgrup->(MakeRefer("grupss","Справочник групп",3,{"Группа","Наименование"},{3,23,7},"n/w,w+/n",{"CODE"},{"aIn[1]"},,{{||FIELD->Code},{||FIELD->Name}}))
CenGrups->(dbcreateindex("C:\temp\CenGrups","upper(Gr_Cen+Name_gr)"))
CenGrups->(MakeRefer("C_gr","Справочник ценовых групп",3,{"Цен.Гр","Наименование"},{3,23,8},"n/w,w+/n",{"Gr_Cen"},{"aIn[1]"},,{{||FIELD->Gr_Cen},{||FIELD->Name_Gr}},,{{'Намиенование..:','Name_Gr'},{'Ценовая Группа:','Gr_Cen'}}))
MLabel->(DBCreateIndex("C:\temp\MLGC","Upper(Gr_Cen+Grup+NNum)"))

INIT1()

RESTSETKEY(aSetKey)
RESTSET(aSet)
//ALTD()
Erase("C:\temp\CenGrups.cdx")
Erase("C:\temp\MLGC.cdx")
ClearRefer("grupss")
ClearRefer("C_Gr")

_Mgrup->(DBCLOSEAREA())
MKart->(DBCLOSEAREA())
Mlabel->(DBCLOSEAREA())
CenGrups->(DBCLOSEAREA())

RETURN NIL

FUNCTION INIT1()
Local nTop,nBot,cColHead,aBlockCols,cCurproc,aHeads,aRef,aPic,aWhen,bDel,aSortSeek,aHotKey,GRCN
//Local cColHead2,aBlockCols2
//Local cColHead1,aBlockCols1,aHeads1,aSortSeek1

Private Apply,MyFun,GrSort,InitGr

MLabel->(OrdSetFocus("MLabel"))
MKart->(OrdSetFocus("MKart_P2"))
MKart->(OrdSetFocus("MKart_P10"))

mkart->(dbSetFilter({||!EMPTY(MKART->NNUM).AND.EMPTY(MKART->PARTIA)},"!EMPTY(MKART->NNUM).AND.EMPTY(MKART->PARTIA)"))

mkart->(F_SETRELATION("MLABEL","UPPER(GRUP+NNUM)"))
mkart->(F_SETRELATION("_MGrup","UPPER(GRUP+NNUM)"))

DispBox(2,0,4,79,(CHR(201)+CHR(205)+CHR(187)+CHR(186)+CHR(188)+CHR(205)+CHR(200)+CHR(186)+' ' ),"W+/B") // первый прямоугольник
SAYSCREEN("Группа: ")
DispBox(5,0,23,79,(CHR(201)+CHR(205)+CHR(187)+CHR(186)+CHR(188)+CHR(205)+CHR(200)+CHR(186)+' ' ),"W+/B") // первый прямоугольник
SAYSCREEN("Ценовая группа: ")
nTop:=5
nBot:=17

cColHead:={"Группа ном.№ Наименование На складе Резерв Склад№"}

aBlockCols:={{{||FIELD->grup},1},;
{{||RIGHT(FIELD->nnum,5)},8},;
{{||LEFT(FIELD->Name,25)},15},;
{{||RIGHT(STR(FIELD->koltek),10)},48},;
{{||RIGHT(STR(FIELD->kolres),10)},59},;
{{||FIELD->sclad},71} }

cCurProc:={||MyFun()}

aHeads:={;
{"Ценовая группа...........:","MLabel->gr_cen"},;
{"--------------------------------",""},;
{"Цена до 2-х тн(руб)......:","MLabel->vCena1"},;
{"Цена до 2-х тн(вал)......:","MLabel->oCena1"},;
{"--------------------------------",""},;
{"Цена c 2-х до 5-и тн(руб):","MLabel->vCena2"},;
{"Цена c 2-х до 5-и тн(вал):","MLabel->oCena2"},;
{"--------------------------------",""},;
{"Цена c 5-и тн(руб).......:","MLabel->vCena3"},;
{"Цена c 5-и тн(вал).......:","MLabel->oCena3"},;
{"--------------------------------",""},;
{"Специальная цена(руб)....:","MLabel->vCena4"},;
{"Специальная цена(вал)....:","MLabel->oCena4"}}

aHeads1:={ {"Ценовая группа:","CenGrups->gr_cen"},{"Наименование..:","CenGrups->Name_Gr"} }

aRef:={"c_gr",,,,,,,,,"grupss"}
aPic:={,,"999999.999","999999.999",,"999999.999","999999.999",,"999999.999","999999.999",,"999999.999","999999.999"}
aWhen:={,,{||aIn[3]:=aIn[4],.T.},,{||aIn[6]:=aIn[7],.T.},,{||aIn[9]:=aIn[10],.T.},,{||aIn[12]:=aIn[13],.T.}}
bDel:={||.T.}


aSortSeek:={{'- номерам ТМЦ внутри групп ',{'Код группы:','Ном. номер: '},{'Grup','NNum'},'UPPER(aIn[1]+aIn[2])',,,{"grupss"},"Mkart_P10"},;
{'- наименованиям внутри групп',{'Код группы.:','Наименование:'},{'grup','Space(10)'},'UPPER(aIn[1]+aIn[2])',,,{"grupss"},"MKart_P2"}}
//{'- кодам ценовых групп ',{'Код ценовой группы:'},{'gr_cen'},'aIn[1]',,,{"C_gr"},"C_GR_Sort",aGetBlock,"Mlabel","MKart_P2",,.T.}}

aHotKey:={{},{},{;
{'Alt+A:Применить к цен. группе',K_ALT_A,{||Apply()},1},;
{'Alt+S:Сортировка по цен.гр.',K_ALT_S,{||GrSort()},1},;
{'Alt+Е:Редактор спр.Цен.Гр',K_ALT_E,{||InitGr()},1}} }

@ 2,38 SAY "╦" COLOR "w+/b"
@ 3,38 SAY "║Цен.группа:" COLOR "w+/b"
@ 3,73 SAY "№" COLOR "w+/b"
@ 4,38 SAY "╩" COLOR "w+/b"
@ 18,0 SAY "╠═════════════Параметры══════════════════╦════Цены на сегоднешнее число════════╣" COLOR "w+/b"
@ 19,2 SAY REPLICATE("Марка.........:",1) COLOR "w/b"
@ 19,41 SAY REPLICATE("║",1) COLOR "w+/b"
@ 19,42 SAY REPLICATE("До 2-х тн......:",1) COLOR "w/b"
@ 20,2 SAY REPLICATE("Сорт..........:",1) COLOR "w/b"
@ 20,41 SAY REPLICATE("║",1) COLOR "w+/b"
@ 20,42 SAY REPLICATE("С 2-х до 5-и тн:",1) COLOR "w/b"
@ 21,2 SAY REPLICATE("Размер........:",1) COLOR "w/b"
@ 21,41 SAY REPLICATE("║",1) COLOR "w+/b"
@ 21,42 SAY REPLICATE("С 5-и тн.......:",1) COLOR "w/b"
@ 22,2 SAY REPLICATE("Завод изг-тель: ",1) COLOR "w/b"
@ 22,41 SAY REPLICATE("║",1) COLOR "w+/b"
@ 22,42 SAY REPLICATE("Спец. цена.....:",1) COLOR "w/b"

SHADOWBOX("ENTER:Правка═F3:Сортировка═F6:Фильтр╩F7:поиск",23,3,23,75,"W+/B")


MKart->(InitList(nTop,nBot,cColHead,aBlockCols,cCurProc,aHeads,aRef,aPic,aWhen,,,bDel,,aSortSeek,,,,,,,,,,,,,,,,aHotKey))

//ALTD()

RETURN NIL


Function MyFun()

GRCN:=MLabel->Gr_Cen

@ 3,8 SAY LEFT(_MGrup->Name,30) COLOR "BG+/b"
@ 3,51 SAY LEFT(CenGrups->Name_Gr,1 COLOR "RB+/b"
@ 3,75 SAY GRCN COLOR "GR+/b"
@ 19,18 SAY LEFT(Mlabel->Marka,23) COLOR "w/b"
@ 20,18 SAY LEFT(MLabel->Sort,23) COLOR "w/b"
@ 21,18 SAY LEFT(Mlabel->Razmer,23) COLOR "w/b"
@ 22,18 SAY LEFT(Mlabel->Profil,23) COLOR "w/b"
@ 19,58 SAY RIGHT(STR(Mlabel->oCena1),15) PICTURE "@E 9999999999"
@ 20,58 SAY RIGHT(STR(MLabel->oCena2),15) PICTURE "@E 9999999999"
@ 21,58 SAY RIGHT(STR(Mlabel->oCena3),15) PICTURE "@E 9999999999"
@ 22,58 SAY RIGHT(STR(Mlabel->oCena4),15) PICTURE "@E 9999999999"

Return 2

Function Apply()
Private sel,oc1,oc2,oc3,oc4,vc1,vc2,vc3,vc4

DBPush()
Mlabel->(reclock())
sel:=Mlabel->Gr_cen
oc1:=Mlabel->oCena1
vc1:=Mlabel->vCena1
oc2:=Mlabel->oCena2
vc2:=Mlabel->vCena2
oc3:=Mlabel->oCena3
vc3:=Mlabel->vCena3
oc4:=Mlabel->oCena4
vc4:=Mlabel->vCena4
if (NoOrYes({"Пименить цену ко всей ценовой группе №" +(Mlabel->Gr_cen)+ "???"})=.t.)
endif
mlabel->(dbgotop())
Do While !MLabel->(EoF())
if MLabel->Gr_Cen=sel
Mlabel->(RecLock())
Mlabel->Ocena1:=oc1
Mlabel->Ocena2:=oc2
Mlabel->Ocena3:=oc3
Mlabel->Ocena4:=oc4
Mlabel->vCena1:=vc1
Mlabel->vCena2:=vc2
Mlabel->vCena3:=vc3
Mlabel->vCena4:=vc4
mlabel->(f_dbunlock())
endif
MLabel->(dbskip(1))
EndDo

mlabel->(f_dbunlock())

dbpop()
Return

Function InitGr()
Local cColHead1,aBlockCols1,aHeads1 //,aSortSeek1

DispBox(5,22,15,62,(CHR(201)+CHR(205)+CHR(187)+CHR(186)+CHR(188)+CHR(205)+CHR(200)+CHR(186)+' ' ),"W+/B")
CenGrups->(OrdSetFocus("CenGrups"))
//DBSelectArea("CenGrups")
cColHead1:="Цен.Группа Наименование "
aBlockCols1:={ {{||FIELD->Gr_Cen},3},{{||FIELD->Name_Gr},12} }
aHeads1:={ {"Ценовая группа:","gr_cen"},{"Наименование..:","Name_Gr"} }
//aSortSeek1:={{'- наименованиям внутри групп',{'Код группы.:','Наименование:'},{'Gr_Cen','Space(1'},'UPPER(aIn[1]+aIn[2])',,,{"c_gr"},"CenGrups"}}

CenGrups->(InitList(5,14,cColHead1,aBlockCols1,,aHeads1,,,,,,{||.T.}))

Return //INIT1()

Function GrSort()
Local cColHead2,aBlockCols2
//ALTD()
MLabel->(OrdSetFocus("MLGC"))

MLabel->(dbSetFilter({||!EMPTY(MLabel->Gr_Cen).AND.!EMPTY(MLabel->Grup).AND.!EMPTY(MLabel->NNum)},"!!EMPTY(MLabel->Gr_Cen).AND.!EMPTY(MLabel->Grup).AND.!EMPTY(MLabel->NNum)"))
MLabel->(DBGoTop())
DispBox(6,13,17,65,(CHR(201)+CHR(205)+CHR(187)+CHR(186)+CHR(188)+CHR(205)+CHR(200)+CHR(186)+' ' ),"W+/B") //прямоугольник

cColHead2:="Цен.Гр. Группа Ном.№ Наименование "
aBlockCols2:={{{||FIELD->Gr_Cen},2},{{||FIELD->grup},10},{{||RIGHT(FIELD->nnum,5)},17},{{||LEFT(FIELD->Name,25)},24}}
MLabel->(InitList(7,16,cColHead2,aBlockCols2,,{{"Ценовая группа:","gr_cen"}},{"c_gr"},,,,,{||.T.}))

Return //Init1()
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5  Next
Page 3 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru