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

УРОК 202. Окно ввода средствами QINPUT
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: 06 Nov 2007 17:38    Post subject: Reply with quote

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

Т.е. у нас будет три запроса и к каждому напишем
строку запроса для ввода и имя поля куда будем кла
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 06 Nov 2007 17:46    Post subject: Reply with quote

nordk wrote:

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

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


М-м-м ... не понял ... заведем еще одну таблицу БД ? ... Массив ?
Если просто текстом, то так:
Тип партнера P_TYP
Вид партнера P_VID
E-mail P_POST
Back to top
View user's profile Send private message
nordk



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

PostPosted: 06 Nov 2007 18:17    Post subject: Reply with quote

Теперь вместо
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()
и настроить нужную цветовую гамму.
Конечно можете менять координаты и размеры

Если не будет получаться вложите полученный текст, я у себя откомпилирую и еще раз посмотрю что не так. Должно получить
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 06 Nov 2007 18:52    Post subject: Reply with quote

Ну что-же, вот в таком виде в целом уже работает.
Остались некоторые моменты:
- при открытии второго справочника (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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 06 Nov 2007 19:32    Post subject: Reply with quote

vla wrote:
Ну что-же, вот в таком виде в целом уже работает.
Остались некоторые моменты:
- при открытии второго справочника (s_v) не работает фильтр по первому справочнику (по s_t);
- если текущее значение в s_t =1, то при нажатии на Ф2 или кей даун справочник открывается на значении 2:
- s_v ведет себя аналогично - открывается на последнем значении;

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

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

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

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

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

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

Если в поле адреса не задумаем распихивать то без надобност
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 06 Nov 2007 19:52    Post subject: Reply with quote

Quote:

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

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

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

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

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

Это nTypRefer (параметр 3)?
Back to top
View user's profile Send private message
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 06 Nov 2007 20:26    Post subject: Reply with quote

Вставил принудительное создание индексов перед 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 можно ввести вручную и нажать кей даун и справочник не раскроется. А если ввести несовпадающее - откроется принудительно. И виден весь список, можно выбрать любое значени
Back to top
View user's profile Send private message
nordk



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

PostPosted: 06 Nov 2007 21:23    Post subject: Reply with quote

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

Да можно с помощью bScrInit
Описание блока кода смотри в описании Инитлист
В нем можно сделать поиск по коду в БД и через SayScreen прописать
или заранее определеить в переменную и ее прописать.
Тогда после выхода из справочника надо также менять значение
этой переменной и прорисовывать на экране
Что касается скопа - если он так и не отрабатывает.
Вероятно с запятыми напутал.
Надо будет откомпилировать и посмотреть.
Вы на самом деле можете убедиться быстрее.
Вставьте перед скопом SayAndWait('ok') и если перед входом в
справочник надпись появиться - запятые не напутал, не появиться - напутал.
Это должен быть параметр bPreDisp
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 06 Nov 2007 21:56    Post subject: Reply with quote

Quote:

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

Вот ломаю голову, как в блок кода вставить команду ...
Они же должны чем-то разделяться, команды-то
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 07 Nov 2007 06:55    Post subject: Reply with quote

vla wrote:
Quote:

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

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


Индекс лучше поставить в bases_00.dbf
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 07 Nov 2007 07:00    Post subject: Reply with quote

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

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


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


Last edited by Дениска on 07 Nov 2007 07:43; edited 1 time in total
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 07 Nov 2007 07:16    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 07 Nov 2007 07:40    Post subject: Reply with quote

vla wrote:

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

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


Да.

P.S. Посмотрите тему Вопросы по MakeRefer
Back to top
View user's profile Send private message
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 07 Nov 2007 10:22    Post subject: Reply with quote

Дениска wrote:
vla wrote:
Quote:

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

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


Может так:
Code:

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

?

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

Не-а... Не работает такая конструкция. Параметр вроде семнадцатый - пересчитал раз 5 ...
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 07 Nov 2007 11:13    Post subject: Reply with quote

vla wrote:

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


В чем выражается "не работает"? Сообщение не выдается или не компилируется или ...?
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