makerefer и qinput
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
-> Программирование в БЭСТ-4

#1: makerefer и qinput Author: AVELITLocation: OOO PostPosted: 31 May 2007 15:31
    —
Помогите сделать путний ввод группы и номенклатуры

пытаюсь так:
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, чтобы номенклатуру показывал только ту, что из выбранной группы
Помогите пожалуйст

#2:  Author: nordkLocation: Горбунов Константин PostPosted: 31 May 2007 15:59
    —
У Вас в примере _getbl не объявлен.
Вернее объявлен но равен NIL.
А это массив - попробуйте для начала убрать его из QINPUT

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 31 May 2007 16:01
    —
По поводу поиска mlabel по наименованию.
Поле STATUS это не помеха.
Рассматривайте его как константу и вместо него в строку поиска вписывайте " "

#4:  Author: nordkLocation: Горбунов Константин PostPosted: 31 May 2007 16:05
    —
За контекстный поиск в справочнике отвечает переменная
cFinMacro (о ней есть описание в HELP)
Правила оформления один в один как и в InitList
Для поиска в номенклатуре по наименованию пишем

Code:
'cFind$UPPER(Name)'

#5:  Author: nordkLocation: Горбунов Константин PostPosted: 31 May 2007 16:09
    —
По вопросу фильтрации номенклатуры делать надо вот по такому сценарию:
1.Вы определили группу
2.Код группы лежит в aIn[x]
3.При входе в справочник вы должны пользоваться индексом
начинающися с кода группы или статус+код группы
и на этот индекс надо наложить скоб
который стоит описать в блоке кода bPreDisp
Дальше в строке поиска указать поиск с использованием
aIn[x],который в этот момент программе будет известен.
При выходе из справочника в блоке кода bPostDisp скоб лучше снять

#6:  Author: AVELITLocation: OOO PostPosted: 01 Jun 2007 05:17
    —
nordk wrote:
У Вас в примере _getbl не объявлен.
Вернее объявлен но равен NIL.
А это массив - попробуйте для начала убрать его из QINPUT

Попробовал присвоить пустой массив - не помогло
Попробовал убрать из qinput - не помогло
Если убрать из проги все строки касаемо группы, то выбор номенклатуры работает... а вот на группу ругается .NIL. has no exported method

#7:  Author: nordkLocation: Горбунов Константин PostPosted: 01 Jun 2007 08:52
    —
Попробуйте написать
Code:
strgrup:='000000'

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

И еще надеюсь эти переменные у Вас объявлены
В списке объявлений я их не нашел и они не LOCAL

#8:  Author: AVELITLocation: OOO PostPosted: 01 Jun 2007 09:21
    —
Quote:
strgrup:='000000'

Попробовал и 6 знаков, как у вас и 5 знаков - это реальная длина поля
таже ошибка... это не может быть связано с aIn? Я вообще не понимаю что там и в каком виде хранится... просто с какого-то примера переписал.
Переменные естественно объявлены.

#9:  Author: nordkLocation: Горбунов Константин PostPosted: 01 Jun 2007 09:37
    —
Я тогда вечерком попробую откомпилить Ваш пример и напишу.
С QINPUT бывают сложности когда с переменными имеешь дело а не с БД. Надо на практике Ваш пример будет посмотреть с отладчико

#10:  Author: nordkLocation: Горбунов Константин PostPosted: 04 Jun 2007 19:51
    —
Честно говоря проблему Вашу не понял.
Откомпилировал

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+

#11:  Author: AVELITLocation: OOO PostPosted: 05 Jun 2007 09:54
    —
Константин, простите, морочал вам голову, при объявлении переменных затер последнюю букву strgrup запятой, из-за этого вся проблема....
Но остался вопрос, как отфильтровать список номенклатуры, чтобы отражалась только выбранная группа?

#12:  Author: nordkLocation: Горбунов Константин PostPosted: 05 Jun 2007 11:31
    —
Ответ в сообщении выше от 31 мая в 16.09

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

написать в makerefer?
т.е. какой командой можно наложить скоб
{||aIN[1]=grup} или какой синтаксис.... просто в help'ах настолько скудно всё описано, а в уроках я подобного примера не наше

#14:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Jun 2007 22:46
    —
Нет надо
Code:
{||mlabel->(SETSCOPE("Upper(...)",UPPER(Ain[1]....),,{'Имя индекса'})}

Описание функции Setscope() в HELP достаточно нормальное
Но если непонятно - напишите как поняли, давайте разбере

#15:  Author: AVELITLocation: OOO PostPosted: 25 Jul 2007 07:48
    —
Все впринципе получилось таким вот образом:
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



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group