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

makerefer и qinput
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 31 May 2007 15:31    Post subject: makerefer и qinput Reply with quote

Помогите сделать путний ввод группы и номенклатуры

пытаюсь так:
Private aHeads, aPict, aRef, _spec, _getbl,spsortseek,mgrref,spSortSeek,spSortSeek1
netuse ("mlabusl",loadpath()+"tovar\mlabel.dbf")
netuse ("mgruusl",loadpath()+"tovar\mgrup.dbf")
aHeads := {}
aPict := {}
aRef := {}
spSortSeek := {}
spSortSeek1 := {}
mgruusl->(MakeRefer("mgrref","Выберите группу",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("code")},{"aIn[1]"},"Upper(aIn[1])",{FieldBlock("code"),FieldBlock("Name")},spSortSeek1))
mlabusl->(MakeRefer("mlabref","Выберите номенклатуру",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("nnum")},{"aIn[2]"},"Upper(aIn[2])",{FieldBlock("nnum"),FieldBlock("Name")},spSortSeek))
AAdd(aHeads,{"Группа.:","strgrup"})
AAdd(aPict,REPLICATE('X',5))
AAdd(aRef,"mgrref")
AAdd(aHeads,{"Номенклатура..:","strnnum"})
AAdd(aPict,REPLICATE('X',13))
AAdd(aRef,"mlabref")

_spec:='RESTOFF'

strgrup:=''
strnnum:=''
QINPUT(10,25,14,55,aHeads,1,aRef,aPict,,,,,,,_spec,_getbl)


ругается.... .NIL. have no exported method
1) не могу сделать толковый поиск по наименованиям, т.к. индекс по наименованиям в mlabel содержит до наименования поле STATUS
2) Понятия не имею можно ли сделать контекстный поиск в справочниках, а хотелось бы
3) Не знаю как отфильтровать номенклатуру после выбора grup, чтобы номенклатуру показывал только ту, что из выбранной группы
Помогите пожалуйст
Back to top
View user's profile Send private message
nordk



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

PostPosted: 31 May 2007 15:59    Post subject: Reply with quote

У Вас в примере _getbl не объявлен.
Вернее объявлен но равен NIL.
А это массив - попробуйте для начала убрать его из QINPUT
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 31 May 2007 16:01    Post subject: Reply with quote

По поводу поиска mlabel по наименованию.
Поле STATUS это не помеха.
Рассматривайте его как константу и вместо него в строку поиска вписывайте " "
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 31 May 2007 16:05    Post subject: Reply with quote

За контекстный поиск в справочнике отвечает переменная
cFinMacro (о ней есть описание в HELP)
Правила оформления один в один как и в InitList
Для поиска в номенклатуре по наименованию пишем

Code:
'cFind$UPPER(Name)'
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 31 May 2007 16:09    Post subject: Reply with quote

По вопросу фильтрации номенклатуры делать надо вот по такому сценарию:
1.Вы определили группу
2.Код группы лежит в aIn[x]
3.При входе в справочник вы должны пользоваться индексом
начинающися с кода группы или статус+код группы
и на этот индекс надо наложить скоб
который стоит описать в блоке кода bPreDisp
Дальше в строке поиска указать поиск с использованием
aIn[x],который в этот момент программе будет известен.
При выходе из справочника в блоке кода bPostDisp скоб лучше снять
Back to top
View user's profile Send private message Send e-mail
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 01 Jun 2007 05:17    Post subject: Reply with quote

nordk wrote:
У Вас в примере _getbl не объявлен.
Вернее объявлен но равен NIL.
А это массив - попробуйте для начала убрать его из QINPUT

Попробовал присвоить пустой массив - не помогло
Попробовал убрать из qinput - не помогло
Если убрать из проги все строки касаемо группы, то выбор номенклатуры работает... а вот на группу ругается .NIL. has no exported method
Back to top
View user's profile Send private message
nordk



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

PostPosted: 01 Jun 2007 08:52    Post subject: Reply with quote

Попробуйте написать
Code:
strgrup:='000000'

вместо strgrup:=''
Он вообще-то по длине переменной делает длину поля ввода
И не пытайтесь плз делать SPACE(6) - по переменной а не по
полю БД почему-то ALLTRIM отрабатывает.
Я не анализировал до конца этот момент, но сталкивался

И еще надеюсь эти переменные у Вас объявлены
В списке объявлений я их не нашел и они не LOCAL
Back to top
View user's profile Send private message Send e-mail
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 01 Jun 2007 09:21    Post subject: Reply with quote

Quote:
strgrup:='000000'

Попробовал и 6 знаков, как у вас и 5 знаков - это реальная длина поля
таже ошибка... это не может быть связано с aIn? Я вообще не понимаю что там и в каком виде хранится... просто с какого-то примера переписал.
Переменные естественно объявлены.
Back to top
View user's profile Send private message
nordk



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

PostPosted: 01 Jun 2007 09:37    Post subject: Reply with quote

Я тогда вечерком попробую откомпилить Ваш пример и напишу.
С QINPUT бывают сложности когда с переменными имеешь дело а не с БД. Надо на практике Ваш пример будет посмотреть с отладчико
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 04 Jun 2007 19:51    Post subject: Reply with quote

Честно говоря проблему Вашу не понял.
Откомпилировал

Code:
FUNCTION MAIN()
PRIVATE strgrup,strnnum
Private aHeads, aPict, aRef, _spec, _getbl,spsortseek,mgrref,spSortSeek,spSortSeek1
netuse ("mlabusl",loadpath()+"tovar\mlabel.dbf")
netuse ("mgruusl",loadpath()+"tovar\mgrup.dbf")
aHeads := {}
aPict := {}
aRef := {}
spSortSeek := {}
spSortSeek1 := {}
mgruusl->(MakeRefer("mgrref","Выберите группу",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("code")},{"aIn[1]"},"Upper(aIn[1])",{FieldBlock("code"),FieldBlock("Name")}) )
mlabusl->(MakeRefer("mlabref","Выберите номенклатуру",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("nnum")},{"aIn[2]"},"Upper(aIn[2])",{FieldBlock("nnum"),FieldBlock("Name")}))
AAdd(aHeads,{"Группа.:","strgrup"})
AAdd(aPict,REPLICATE('X',5))
AAdd(aRef,"mgrref")
AAdd(aHeads,{"Номенклатура..:","strnnum"})
AAdd(aPict,REPLICATE('X',13))
AAdd(aRef,"mlabref")

_spec:='RESTOFF'

strgrup:='00000'
strnnum:='0000000000000'
QINPUT(10,25,14,55,aHeads,1,aRef,aPict,,,,,,,_spec)
RETURN NIL


У меня все прекрасно отработало без проблем...
Ну кривой экран - это подрисуете а в остальном проблем 0
Делал в Б4+
Back to top
View user's profile Send private message Send e-mail
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 05 Jun 2007 09:54    Post subject: Reply with quote

Константин, простите, морочал вам голову, при объявлении переменных затер последнюю букву strgrup запятой, из-за этого вся проблема....
Но остался вопрос, как отфильтровать список номенклатуры, чтобы отражалась только выбранная группа?
Back to top
View user's profile Send private message
nordk



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

PostPosted: 05 Jun 2007 11:31    Post subject: Reply with quote

Ответ в сообщении выше от 31 мая в 16.09
Back to top
View user's profile Send private message Send e-mail
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 07 Jun 2007 11:15    Post subject: Reply with quote

Не смог понять.
т.е. в моем примере код группы aIn[1]
использовать его надо в mlabusl->makerefer?
каким образом вот это:
Quote:
При входе в справочник вы должны пользоваться индексом
начинающися с кода группы или статус+код группы
и на этот индекс надо наложить скоб
который стоит описать в блоке кода bPreDisp
Дальше в строке поиска указать поиск с использованием
aIn[x],который в этот момент программе будет известен.
При выходе из справочника в блоке кода bPostDisp скоб лучше снять

написать в makerefer?
т.е. какой командой можно наложить скоб
{||aIN[1]=grup} или какой синтаксис.... просто в help'ах настолько скудно всё описано, а в уроках я подобного примера не наше
Back to top
View user's profile Send private message
nordk



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

PostPosted: 07 Jun 2007 22:46    Post subject: Reply with quote

Нет надо
Code:
{||mlabel->(SETSCOPE("Upper(...)",UPPER(Ain[1]....),,{'Имя индекса'})}

Описание функции Setscope() в HELP достаточно нормальное
Но если непонятно - напишите как поняли, давайте разбере
Back to top
View user's profile Send private message Send e-mail
AVELIT



Joined: 12 May 2004
Posts: 69
Location: OOO
Occupation: ООО "Авелит" Программист
Interests: Кемерово

PostPosted: 25 Jul 2007 07:48    Post subject: Reply with quote

Все впринципе получилось таким вот образом:
mgruusl->(MakeRefer("mgrref","Выберите группу",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("code")},{"aIn[1]"},"Upper(aIn[1])",{FieldBlock("code"),FieldBlock("Name")}) )
mlabusl->(MakeRefer("mlabref","Выберите номенклатуру",1,{"Код","Наименование"},{5,5,10},,{FieldBlock("nnum")},{"aIn[2]"},"Upper(aIn[2])",{FieldBlock("nnum"),FieldBlock("Name")},,,,,,,{||mlabusl->(setscope("GRUP",aIn[1]))},,,,,,,,,,'cFind$UPPER(Name)', ,,,,,,,, ,'',,,,,,,,,,))
AAdd(aHeads,{"Группа........:","strgrup"})
AAdd(aPict,REPLICATE('X',5))
AAdd(aRef,"mgrref")
AAdd(aHeads,{"Номенклатура..:","strnnum"})
AAdd(aPict,REPLICATE('X',13))
AAdd(aRef,"mlabref")
strgrup:='00001'
strnnum:='0000000000002'
_spec:='RESTOFF'

QINPUT(10,25,14,55,aHeads,1,aRef,aPict)



НО, есть один вопрос:
По умолчанию значения установлены, но если я пытаюсь пройти их по Enter всё равно открывается справочник, причем указатель в справочнике всегда на первой записи.... как сделать так, что если пользователь нажимает Enter в поле - справочник не открывался.... т.е. только по F2
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 1, 2  Next
Page 1 of 2

 
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