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

#46:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 11:21
    —
Дениска wrote:
vla wrote:

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


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

Плохо запятые считал Конструкция работает Разберусь вот пока с bScrInit-ом и скопом ...

#47:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 12:28
    —
Что получилось в результате многократного подсчета запятых и экспериментов с bScrInit:
Скоп работает.
Справочники ведут себя как нужно - при ручной правке не открываются, если такое значение есть.
Не работает bScrInit. Совсем. Хотя в какой-то момент работал, но только после нажатия Ф2.
Ну и несколько забегая вперед - как организовать добавление в справочники на ходу ?
Code:

function main()
Local p_vid,p_typ,p_post
Local aRef,bScrInit_v,bScrInit_t
Local aSet,aSetKey
altd()
aSet:=SaveSet()
aSetKey:=SaveSetKey()
//это временно - чтобы точно иметь правильные индексы
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())
//временному конец
NETUSE("PART_T","part_t.dbf",,.F.) //справочник типов партнеров
NETUSE("PART_V","part_v.dbf",,.F.) //справочник видов партнеров
PART_T->(OrdSetFocus("PART_T"))
PART_V->(OrdSetFocus("PART_V"))
  //определим bScrInit 1
  bScrInit_t  :={|x| dispoutat( 11,45,left(Field->NAME,25),'N/BG') }
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},; //1-4
  {3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',; //5-9
  {{||FIELD->CODE},{||FIELD->NAME}},;                        //10
  ,,,,,,,,,,,,,,,, ;                                         //11-26
  'cFind$UPPER(NAME)',,bScrInit_t))                          //27-29
  //определим bScrInit 2
  bScrInit_v  :={|y| dispoutat( 12,45,left(Field->NAME,25),'N/BG') }
  //определим справочник видов
  part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код  ","Населенный пункт "},{3,5,16},; //1-5
   "n/w,w+/n",{"TYPE"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',; //6-9
   {{||FIELD->TYPE},{||FIELD->NAME}},;                      //10
   ,,,,,,{||part_v->( SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )},;  //11-17
   {||part_v->( SETSCOPE() )},, ;                                //18-19
    ,,,,,,,'cFind$UPPER(NAME)',,bScrInit_v))                     //20-29
    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

#48:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Nov 2007 12:46
    —
Нуу какие молодцы
Всего достигли
Итак осталось разобраться с bScrInit и пополнение справочников.
Начнем с bScrInit

Сценарий должен быть такой:
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа. Если не нашли заносим число пробелов равное длине имени.
Дальше в bScrInit мы выводим на экран значение именно этой переменной.
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.
А вот последнее я не пробовал.
Там где мы отменяем скоп, после запятой также надо опять
прорисовать на экране новое значение переменной после выбора из справочника. Вообще этот блок кода работает после выхода из справочника и стало быть должен прописывать.

#49:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 12:53
    —
nordk wrote:
Нуу какие молодцы
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа.

Вот про имя типа можно еще, как для прапорщиков (или даже как для генералов)
И вообще, я его правильно - в MakeRefer - определяю? А то в QInput, похоже, тоже такой параметр есть.
nordk wrote:
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.

И вот про исправление справочника - это где?

#50:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Nov 2007 14:37
    —
vla wrote:

Вот про имя типа можно еще, как для прапорщиков (или даже как для генералов)


Типы партнеров (part_t).
CODE N 6,0 (код типа)
NAME C 30 (название типа)

Делаем перед QINPUT по этой таблице поиск и если нашли
tname:=part_t->name

а в справочнике меняем
Code:
,{"CODE"},{"aIn[1]"},

на
Code:
,{"CODE","NAME"},{"aIn[1]","tname"},

#51:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Nov 2007 19:48
    —
Что-то притихли.
Не получается ?

#52:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 22:06
    —
nordk wrote:
Что-то притихли.
Не получается ?

Да вот, злые клиенты оторвали от компа, добрался обратно только к вечеру
Что-то ничего не получается. Подтянул текущее NAME в переменную tname. Поменял MakeRefer s_t как предложено:
Code:
,{"CODE","NAME"},{"aIn[1]","tname"},

Но у меня bScrInit как не работал вовсе, так и не начал.
А в какой момент он вообще отрабатывает - только при открытии справочника или должен сработать уже при выводе текущего значания поля?
Как должено выглядеть определение? Я нашел единственный пример его использования и по нему что-то нарисовал (путем научного тыка):
Code:

  bScrInit_t  :={|х| dispoutat( 11,45,left(field->name,25),'N/BG') }

Пока с запятыми не разобрался - как то это работало (но не работал скоп )
Караул ...

#53:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Nov 2007 22:09
    —
Выкладывайте что у Вас получилось буду анализировать

#54:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 07 Nov 2007 22:30
    —
Выкладываю:
Code:
function main()
Local p_vid,p_typ,p_post,tname:=''
Local aRef,bScrInit_v,bScrInit_t,bTest
Local aSet,aSetKey
altd()
aSet:=SaveSet()
aSetKey:=SaveSetKey()
//это временно - чтобы точно иметь правильные индексы
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())
//временному конец
NETUSE("PART_T","part_t.dbf",,.F.) //справочник типов партнеров
NETUSE("PART_V","part_v.dbf",,.F.) //справочник видов партнеров
PART_T->(OrdSetFocus("PART_T"))
PART_V->(OrdSetFocus("PART_V"))
  //подтянем
  if part_t->(dbseek(partner->p_typ))
    tname:=part_t->name
  endif
  //определим bScrInit 1
  bScrInit_t  :={|x|dispoutat( 11,45,left(field->name,25),'N/BG') }
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},; //1-4
  {3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',; //5-9
  {{||FIELD->CODE},{||FIELD->NAME}},;                        //10
  ,,,,,,,;                                                   //11-17
  ,,,,,,,,,,, ;                                              //18-26
  'cFind$UPPER(NAME)',,bScrInit_t,))                         //27-29
  //определим bScrInit 2
  bScrInit_v  :={|x| dispoutat( 12,45,left(Field->NAME,25),'N/BG') }
  //определим справочник видов
  part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код  ","Населенный пункт "},{3,5,16},; //1-5
   "n/w,w+/n",{"TYPE"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',;       //6-9
   {{||FIELD->TYPE},{||FIELD->NAME}},;                           //10
   ,,,,,,{||part_v->( SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )},; //11-17
   {||part_v->( SETSCOPE() )},, ;                                //18-19
    ,,,,,,,'cFind$UPPER(NAME)',,bScrInit_v,))                     //20-29
    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

По bScrInit_t - отрабатывает после нажатия Ф2.
bScrInit_v - не отрабатывает вообще.
Если пытаюсь определить tname как вы предлагали -
Code:
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},; //1-4
  {3,5,16}, "n/w,w+/n",{"CODE","NAME"},{"aIn[1]","tname"},'UPPER(aIn[1])',; //5-9
  {{||FIELD->CODE},{||FIELD->NAME}},;                        //10

то получаю ошибку при выходе из справочника "Переменная не определена"

#55:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 08 Nov 2007 08:31
    —
В очередной раз пересчитав запятые, нашел 2 лишних в определении s_t:
Code:
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},; //1-4
  {3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',; //5-9
  {{||FIELD->CODE},{||FIELD->NAME}},;                        //10
  ,,,,,,,;                                                   //11-17
  ,,,,,,,,,,, ;                                              //18-26
  'cFind$UPPER(NAME)',,bScrInit_t,))                         //27-29

Там, где д.б. параметры 18-26 были с 18 по 28.
Исправил. Название типа перестало отрисовываться и после нажатия на Ф2

#56:  Author: nordkLocation: Горбунов Константин PostPosted: 08 Nov 2007 12:22
    —
Владимир сегодня к сожалению только вечеро

#57:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 08 Nov 2007 12:25
    —
nordk wrote:
Владимир сегодня к сожалению только вечером
Понял. Жду. У меня пока тупик, идей нет, только тыком наугад.

#58:  Author: nordkLocation: Горбунов Константин PostPosted: 08 Nov 2007 21:26
    —
Владимир или я чего-то не понимаю или Вы явно запутались
Мы хотим прописывать в окне ввода - так ?
Окно ввода строится в QINPUT - так ?
Стало быть бло кода в нем и надо складывать.
Смотрим на текст и берем из него.
Code:
if part_t->(dbseek(partner->p_typ))
    tname:=part_t->name
  endif

Меняем на
Code:
if part_t->(dbseek(partner->p_typ))
    tname:=part_t->name
else
   tname:=SPACE(30)
  endif

помним что tname должна быть PRIVATE
Теперь берем
Code:
bScrInit_t  :={|x|dispoutat( 11,45,left(field->name,25),'N/BG') }

Я поменяю немножко по своему
Code:
bScrInit_t  :={||SayScreen(tname,11,45,'N/BG'),1 }

Последним параметром блока кода должно быть значение в соответствии с правилами bScrInit описанными в документации к Инитлист
Далее вставляем это в QINPUT
Code:
PARTNER->( QINPUT(10,15,14,70,                  ;
           {{"Введите тип партнера:","P_TYP"},         ;
            {"Введите вид партнера:","P_VID"},         ;
            {"Введите E-Mail......:","P_POST"}         ;
           },                                          ;
           1,{"s_t","s_v"},{,,REPLICATE("X",30)},      ;
            ,,,bScrInit_t,,,                                     ;
           'RESTOFF') )

И в окне ввода при входе уже наименование имеющееся пишется по
типу. Аналогично в этот же bScrInit_t добавляем прорисовку для вида
И останется решить задачу прорисовку после изменения значения через справочник.
Сначала добейтесь тут результата

#59:  Author: vlaLocation: Гаклин Владимир Ильич PostPosted: 08 Nov 2007 22:00
    —
ОК, пробую.
Вот такая конструкция - работает:
Code:
bScrInit:={||SayAndWait(tname),1}

А вот такая - нет:
Code:
bScrInit:={||SayScreen(tname,11,45,'N/BG'),1}

И такая - нет:
Code:
bScrInit:={||dispoutat( 11,45,tname,'N/BG'),1}

Ниччегго не понимаю ...
На всякий случай целиком:
Code:
function main()
Local aSet,aSetKey,bScrInit
altd()
Private tname,vname
aSet:=SaveSet()
aSetKey:=SaveSetKey()
//это временно - чтобы точно иметь правильные индексы
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())
//временному конец
NETUSE("PART_T","part_t.dbf",,.F.) //справочник типов партнеров
NETUSE("PART_V","part_v.dbf",,.F.) //справочник видов партнеров
PART_T->(OrdSetFocus("PART_T"))
PART_V->(OrdSetFocus("PART_V"))
  //подтянем текущие имена параметров
  if part_t->(dbseek(partner->p_typ))
    tname:=part_t->name
  else
    tname:=space(30)
  endif
  if part_v->(dbseek(partner->p_vid))
    vname:=part_v->name
  else
    vname:=space(30)
  endif
  //определим bScrInit 1
  bScrInit:={||SayAndWait(tname),1}
  //bScrInit:={||SayScreen(tname,11,45,'N/BG'),1}
  //bScrInit:={||dispoutat( 11,45,tname,'N/BG'),1}
  //определим справочник типов
  part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код  ","  Тип      "},; //1-4
  {3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',; //5-9
  {{||FIELD->CODE},{||FIELD->NAME}},;                        //10
  ,,,,,,,;                                                   //11-17
  ,,,,,,,,, ;                                                //18-26
  'cFind$UPPER(NAME)',,))                          //27-29
  //определим справочник видов
  part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код  ","Населенный пункт "},{3,5,16},; //1-5
   "n/w,w+/n",{"TYPE"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',;       //6-9
   {{||FIELD->TYPE},{||FIELD->NAME}},;                           //10
   ,,,,,,{||part_v->( SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )},; //11-17
   {||part_v->( SETSCOPE() )},, ;                                //18-19
    ,,,,,,,'cFind$UPPER(NAME)',,))                     //20-29
    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)},      ;
            ,,,bScrInit,,,                           ;
           'RESTOFF') )
    endif
part_t->( DBCLOSEAREA() )
part_v->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil

#60:  Author: nordkLocation: Горбунов Константин PostPosted: 09 Nov 2007 15:35
    —
По всей видимости надо переделывать окно запроса на вариант 2
это без построения станлартной картинки.
Прорисовывать ее самому а поля размещать через указание координ



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


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

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

Powered by phpBB © 2001, 2005 phpBB Group