Главная
Новый форум
 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
vla



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

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

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

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


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

Плохо запятые считал Конструкция работает Разберусь вот пока с bScrInit-ом и скопом ...
Back to top
View user's profile Send private message
vla



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

PostPosted: 07 Nov 2007 12:28    Post subject: Reply with quote

Что получилось в результате многократного подсчета запятых и экспериментов с 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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 07 Nov 2007 12:46    Post subject: Reply with quote

Нуу какие молодцы
Всего достигли
Итак осталось разобраться с bScrInit и пополнение справочников.
Начнем с bScrInit

Сценарий должен быть такой:
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа. Если не нашли заносим число пробелов равное длине имени.
Дальше в bScrInit мы выводим на экран значение именно этой переменной.
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.
А вот последнее я не пробовал.
Там где мы отменяем скоп, после запятой также надо опять
прорисовать на экране новое значение переменной после выбора из справочника. Вообще этот блок кода работает после выхода из справочника и стало быть должен прописывать.
Back to top
View user's profile Send private message Send e-mail
vla



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

PostPosted: 07 Nov 2007 12:53    Post subject: Reply with quote

nordk wrote:
Нуу какие молодцы
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа.

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

И вот про исправление справочника - это где?
Back to top
View user's profile Send private message
nordk



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

PostPosted: 07 Nov 2007 14:37    Post subject: Reply with quote

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"},
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 07 Nov 2007 19:48    Post subject: Reply with 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: 07 Nov 2007 22:06    Post subject: Reply with quote

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') }

Пока с запятыми не разобрался - как то это работало (но не работал скоп )
Караул ...
Back to top
View user's profile Send private message
nordk



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

PostPosted: 07 Nov 2007 22:09    Post subject: Reply with 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: 07 Nov 2007 22:30    Post subject: Reply with quote

Выкладываю:
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

то получаю ошибку при выходе из справочника "Переменная не определена"
Back to top
View user's profile Send private message
vla



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

PostPosted: 08 Nov 2007 08:31    Post subject: Reply with quote

В очередной раз пересчитав запятые, нашел 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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 08 Nov 2007 12:22    Post subject: Reply with 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: 08 Nov 2007 12:25    Post subject: Reply with quote

nordk wrote:
Владимир сегодня к сожалению только вечером
Понял. Жду. У меня пока тупик, идей нет, только тыком наугад.
Back to top
View user's profile Send private message
nordk



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

PostPosted: 08 Nov 2007 21:26    Post subject: Reply with quote

Владимир или я чего-то не понимаю или Вы явно запутались
Мы хотим прописывать в окне ввода - так ?
Окно ввода строится в 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 добавляем прорисовку для вида
И останется решить задачу прорисовку после изменения значения через справочник.
Сначала добейтесь тут результата
Back to top
View user's profile Send private message Send e-mail
vla



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

PostPosted: 08 Nov 2007 22:00    Post subject: Reply with quote

ОК, пробую.
Вот такая конструкция - работает:
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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 09 Nov 2007 15:35    Post subject: Reply with quote

По всей видимости надо переделывать окно запроса на вариант 2
это без построения станлартной картинки.
Прорисовывать ее самому а поля размещать через указание координ
Back to top
View user's profile Send private message Send e-mail
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 4 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