УРОК 202. Окно ввода средствами QINPUT
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
-> Программирование в БЭСТ-4

#31:  Author: nordkLocation: Горбунов Константин PostPosted: 06 Nov 2007 17:38
    —
Последний вопрос...уж извините.
Давайте составим табличку
Комментарий имя поля
Например
Тип адреса P_type

Т.е. у нас будет три запроса и к каждому напишем
строку запроса для ввода и имя поля куда будем кла

#32:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 06 Nov 2007 17:46
    —
nordk wrote:

Давайте составим табличку
Комментарий имя поля
Например
Тип адреса P_type

Т.е. у нас будет три запроса и к каждому напишем
строку запроса для ввода и имя поля куда будем класть


М-м-м ... не понял ... заведем еще одну таблицу БД ? ... Массив ?
Если просто текстом, то так:
Тип партнера P_TYP
Вид партнера P_VID
E-mail P_POST

#33:  Author: nordkLocation: Горбунов Константин PostPosted: 06 Nov 2007 18:17
    —
Теперь вместо
Code:
 partner->(RECLOCK())
        partner->p_typ:=p_typ
        partner->p_vid:=p_vid
        partner->p_post:=p_post
      partner->(F_DBUNLOCK())


Вставьте

Code:
PARTNER->( QINPUT(10,15,12,65,                         ;
           {{"Введите тип партнера:","P_TYPE"},        ;
            {"Введите вид партнера:","P_VID"},         ;
            {"Введите E-Mail......:","P_POST"}         ;
           },                                          ;
           1,{"s_t","s_v"},{,,REPLICATE("X",30)},      ;
            ,,,,,,                                     ;
           'RESTOFF') )

И попробуйте работу ввода
Вначале не забудьте для красоты применить DISPBOX()
и настроить нужную цветовую гамму.
Конечно можете менять координаты и размеры

Если не будет получаться вложите полученный текст, я у себя откомпилирую и еще раз посмотрю что не так. Должно получить

#34:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 06 Nov 2007 18:52
    —
Ну что-же, вот в таком виде в целом уже работает.
Остались некоторые моменты:
- при открытии второго справочника (s_v) не работает фильтр по первому справочнику (по s_t);
- а можно-ли до открытия справочника по Ф2 видеть не только код, но и название пункта ?
- при попытке пройти s_t без выбора из справочника (просто стрелка вниз) справочник открывается принудительно;
- если текущее значение в s_t =1, то при нажатии на Ф2 или кей даун справочник открывается на значении 2:
- s_v ведет себя аналогично - открывается на последнем значении;
- переменные для хранения текущих значений теперь, однако, без надобности ?
Code:

function main()
Local p_vid,p_typ,p_post
Local aRef
Local aSet,aSetKey
altd()
aSet:=SaveSet()
aSetKey:=SaveSetKey()
NETUSE("PART_T","part_t.dbf",,.F.) //справочник типов партнеров
NETUSE("PART_V","part_v.dbf",,.F.) //справочник видов партнеров
PART_T->(OrdSetFocus("PART_T"))
PART_V->(OrdSetFocus("PART_V"))
  p_typ:=partner->p_typ   //подтянули текущее значение типа
  p_vid:=partner->p_vid   //подтянули текущее значение вида
  p_post:=partner->p_post //подтянули текущее значение емэйла
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},;
  {3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',;
  {{||FIELD->CODE},{||FIELD->NAME}};
  ,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
  //определим справочник видов
  part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код  ","Населенный пункт "},;
   {3,5,16}, "n/w,w+/n",{"TYPE"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',;
   {{||FIELD->TYPE},{||FIELD->NAME}};
   ,,,,,,;
   {||part_v->( SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )},;
   {||part_v->( SETSCOPE() )},;
    ,,,,,,,,,'cFind$UPPER(NAME)'))
    if NoOrYes("Изменять информацию о партнере",2,{" Да "," Нет "})=1
       PARTNER->( QINPUT(10,15,14,70,                  ;
           {{"Введите тип партнера:","P_TYP"},         ;
            {"Введите вид партнера:","P_VID"},         ;
            {"Введите E-Mail......:","P_POST"}         ;
           },                                          ;
           1,{"s_t","s_v"},{,,REPLICATE("X",30)},      ;
            ,,,,,,                                     ;
           'RESTOFF') )
    endif
part_t->( DBCLOSEAREA() )
part_v->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil

#35:  Author: nordkLocation: Горбунов Константин PostPosted: 06 Nov 2007 19:32
    —
vla wrote:
Ну что-же, вот в таком виде в целом уже работает.
Остались некоторые моменты:
- при открытии второго справочника (s_v) не работает фильтр по первому справочнику (по s_t);
- если текущее значение в s_t =1, то при нажатии на Ф2 или кей даун справочник открывается на значении 2:
- s_v ведет себя аналогично - открывается на последнем значении;

Все эти три пункта завязаны на индекс
Вероятно он кривой. Надо бы его построить средствами БЭСТа.

Quote:
- а можно-ли до открытия справочника по Ф2 видеть не только код, но и название пункта ?

А вот это честно говоря не понял - а что слева комментария разве нет ?

Quote:
- при попытке пройти s_t без выбора из справочника (просто стрелка вниз) справочник открывается принудительно;

Это правильно - так MakeRefer настроили - там стоит параметр 2
в описании есть что это параметр принудительного справочника

Quote:
- переменные для хранения текущих значений теперь, однако, без надобности ?

Если в поле адреса не задумаем распихивать то без надобност

#36:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 06 Nov 2007 19:52
    —
Quote:

Все эти три пункта завязаны на индекс
Вероятно он кривой. Надо бы его построить средствами БЭСТа.

Щаас я его ... создание в программу вставлю и посмотрю ...
Quote:

- а можно-ли до открытия справочника по Ф2 видеть не только код, но и название пункта ?
А вот это честно говоря не понял - а что слева комментария разве нет ?

До открытия справочника виден только код. Без расшифровки. А в БЭСТе в таких случаях справа расшифровка есть. Можно ли так-же ?

Quote:
Это правильно - так MakeRefer настроили - там стоит параметр 2
в описании есть что это параметр принудительного справочника

Это nTypRefer (параметр 3)?

#37:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 06 Nov 2007 20:26
    —
Вставил принудительное создание индексов перед NETUSE. Изменения есть.
Code:
//это для проверки предположения о кривости индекса
NetUseExc('PART_T',"part_t.dbf")
INDEX ON UPPER(CODE) TAG PART_T TO ("part_t.cdx")
PART_T->(dbclosearea())
NetUseExc('PART_V',"part_v.dbf")
INDEX ON UPPER(CODE+TYPE) TAG PART_V TO ("part_v.cdx")
PART_V->(dbclosearea())

Что не так:
- фильтр по прежнему не работает. Просто значения с совпадающим CODE можно ввести вручную и нажать кей даун и справочник не раскроется. А если ввести несовпадающее - откроется принудительно. И виден весь список, можно выбрать любое значени

#38:  Author: nordkLocation: Горбунов Константин PostPosted: 06 Nov 2007 21:23
    —
vla wrote:
До открытия справочника виден только код. Без расшифровки. А в БЭСТе в таких случаях справа расшифровка есть. Можно ли так-же ?

Да можно с помощью bScrInit
Описание блока кода смотри в описании Инитлист
В нем можно сделать поиск по коду в БД и через SayScreen прописать
или заранее определеить в переменную и ее прописать.
Тогда после выхода из справочника надо также менять значение
этой переменной и прорисовывать на экране
Что касается скопа - если он так и не отрабатывает.
Вероятно с запятыми напутал.
Надо будет откомпилировать и посмотреть.
Вы на самом деле можете убедиться быстрее.
Вставьте перед скопом SayAndWait('ok') и если перед входом в
справочник надпись появиться - запятые не напутал, не появиться - напутал.
Это должен быть параметр bPreDisp

#39:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 06 Nov 2007 21:56
    —
Quote:

Вставьте перед скопом SayAndWait('ok') и если перед входом в
справочник надпись появиться - запятые не напутал, не появиться - напутал.
Это должен быть параметр bPreDisp

Вот ломаю голову, как в блок кода вставить команду ...
Они же должны чем-то разделяться, команды-то

#40:  Author: Дениска PostPosted: 07 Nov 2007 06:55
    —
vla wrote:
Quote:

Все эти три пункта завязаны на индекс
Вероятно он кривой. Надо бы его построить средствами БЭСТа.

Щаас я его ... создание в программу вставлю и посмотрю ...


Индекс лучше поставить в bases_00.dbf

#41:  Author: Дениска PostPosted: 07 Nov 2007 07:00
    —
nordk wrote:
vla wrote:
До открытия справочника виден только код. Без расшифровки. А в БЭСТе в таких случаях справа расшифровка есть. Можно ли так-же ?

Да можно с помощью bScrInit
Описание блока кода смотри в описании Инитлист
В нем можно сделать поиск по коду в БД и через SayScreen прописать
или заранее определеить в переменную и ее прописать.
Тогда после выхода из справочника надо также менять значение
этой переменной и прорисовывать на экране


Интересный вопрос! Надеюсь, что ответ мы скоро узнаем Я у себя эту расшифровку делал следующим полем. На сколько понимаю следующие поле можно поместить и справа, но это не так просто ...


Last edited by Дениска on 07 Nov 2007 07:43; edited 1 time in total

#42:  Author: Дениска PostPosted: 07 Nov 2007 07:16
    —
vla wrote:
Quote:

Вставьте перед скопом SayAndWait('ok') и если перед входом в
справочник надпись появиться - запятые не напутал, не появиться - напутал.
Это должен быть параметр bPreDisp

Вот ломаю голову, как в блок кода вставить команду ...
Они же должны чем-то разделяться, команды-то


Может так:
Code:

{||{SayAndWait("Ok"), part_v->(  SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )}}

?

Параметр bPreDisp должен быть 17-й. Проверить можно посчитав запятые или с помощью SayAndWait().


Last edited by Дениска on 07 Nov 2007 07:44; edited 1 time in total

#43:  Author: Дениска PostPosted: 07 Nov 2007 07:40
    —
vla wrote:

Quote:
Это правильно - так MakeRefer настроили - там стоит параметр 2
в описании есть что это параметр принудительного справочника

Это nTypRefer (параметр 3)?


Да.

P.S. Посмотрите тему Вопросы по MakeRefer

#44:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 10:22
    —
Дениска wrote:
vla wrote:
Quote:

Вставьте перед скопом SayAndWait('ok') и если перед входом в
справочник надпись появиться - запятые не напутал, не появиться - напутал.
Это должен быть параметр bPreDisp

Вот ломаю голову, как в блок кода вставить команду ...
Они же должны чем-то разделяться, команды-то


Может так:
Code:

{||{SayAndWait("Ok"), part_v->(  SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )}}

?

Параметр bPreDisp должен быть 17-й. Проверить можно посчитав запятые или с помощью SayAndWait().

Не-а... Не работает такая конструкция. Параметр вроде семнадцатый - пересчитал раз 5 ...

#45:  Author: Дениска PostPosted: 07 Nov 2007 11:13
    —
vla wrote:

Не-а... Не работает такая конструкция. Параметр вроде семнадцатый - пересчитал раз 5 ...


В чем выражается "не работает"? Сообщение не выдается или не компилируется или ...?



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


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

Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
Page 3 of 5

Powered by phpBB © 2001, 2005 phpBB Group