View previous topic :: View next topic |
Author |
Message |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 07 Nov 2007 11:21 Post subject: |
|
|
Дениска wrote: | vla wrote: |
Не-а... Не работает такая конструкция. Параметр вроде семнадцатый - пересчитал раз 5 ... |
В чем выражается "не работает"? Сообщение не выдается или не компилируется или ...? |
Плохо запятые считал Конструкция работает Разберусь вот пока с bScrInit-ом и скопом ... |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 07 Nov 2007 12:28 Post subject: |
|
|
Что получилось в результате многократного подсчета запятых и экспериментов с 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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 07 Nov 2007 12:46 Post subject: |
|
|
Нуу какие молодцы
Всего достигли
Итак осталось разобраться с bScrInit и пополнение справочников.
Начнем с bScrInit
Сценарий должен быть такой:
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа. Если не нашли заносим число пробелов равное длине имени.
Дальше в bScrInit мы выводим на экран значение именно этой переменной.
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.
А вот последнее я не пробовал.
Там где мы отменяем скоп, после запятой также надо опять
прорисовать на экране новое значение переменной после выбора из справочника. Вообще этот блок кода работает после выхода из справочника и стало быть должен прописывать. |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 07 Nov 2007 12:53 Post subject: |
|
|
nordk wrote: | Нуу какие молодцы
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа. |
Вот про имя типа можно еще, как для прапорщиков (или даже как для генералов)
И вообще, я его правильно - в MakeRefer - определяю? А то в QInput, похоже, тоже такой параметр есть.
nordk wrote: | Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени. |
И вот про исправление справочника - это где? |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 07 Nov 2007 14:37 Post subject: |
|
|
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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 07 Nov 2007 19:48 Post subject: |
|
|
Что-то притихли.
Не получается ? |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 07 Nov 2007 22:06 Post subject: |
|
|
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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 07 Nov 2007 22:09 Post subject: |
|
|
Выкладывайте что у Вас получилось буду анализировать |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 07 Nov 2007 22:30 Post subject: |
|
|
Выкладываю:
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 |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 08 Nov 2007 08:31 Post subject: |
|
|
В очередной раз пересчитав запятые, нашел 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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 08 Nov 2007 12:22 Post subject: |
|
|
Владимир сегодня к сожалению только вечеро |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 08 Nov 2007 12:25 Post subject: |
|
|
nordk wrote: | Владимир сегодня к сожалению только вечером | Понял. Жду. У меня пока тупик, идей нет, только тыком наугад.  |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 08 Nov 2007 21:26 Post subject: |
|
|
Владимир или я чего-то не понимаю или Вы явно запутались
Мы хотим прописывать в окне ввода - так ?
Окно ввода строится в 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 |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 08 Nov 2007 22:00 Post subject: |
|
|
ОК, пробую.
Вот такая конструкция - работает: 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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 09 Nov 2007 15:35 Post subject: |
|
|
По всей видимости надо переделывать окно запроса на вариант 2
это без построения станлартной картинки.
Прорисовывать ее самому а поля размещать через указание координ |
|
Back to top |
|
 |
|
|
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
|