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
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 07 Nov 2007 12:46 Post subject:
Нуу какие молодцы
Всего достигли
Итак осталось разобраться с bScrInit и пополнение справочников.
Начнем с bScrInit
Сценарий должен быть такой:
Объявим для начала некую переменную допустим tname
До QINPUT на основании поиска в базе заносим туда имя
типа. Если не нашли заносим число пробелов равное длине имени.
Дальше в bScrInit мы выводим на экран значение именно этой переменной.
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.
А вот последнее я не пробовал.
Там где мы отменяем скоп, после запятой также надо опять
прорисовать на экране новое значение переменной после выбора из справочника. Вообще этот блок кода работает после выхода из справочника и стало быть должен прописывать.
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:
Дальше исправляем справочник так чтобы эта переменная заполнялась
значением имени.
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 как не работал вовсе, так и не начал.
А в какой момент он вообще отрабатывает - только при открытии справочника или должен сработать уже при выводе текущего значания поля?
Как должено выглядеть определение? Я нашел единственный пример его использования и по нему что-то нарисовал (путем научного тыка):
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
то получаю ошибку при выходе из справочника "Переменная не определена"
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
Последним параметром блока кода должно быть значение в соответствии с правилами bScrInit описанными в документации к Инитлист
Далее вставляем это в QINPUT
И в окне ввода при входе уже наименование имеющееся пишется по
типу. Аналогично в этот же bScrInit_t добавляем прорисовку для вида
И останется решить задачу прорисовку после изменения значения через справочник.
Сначала добейтесь тут результата
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
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 09 Nov 2007 15:35 Post subject:
По всей видимости надо переделывать окно запроса на вариант 2
это без построения станлартной картинки.
Прорисовывать ее самому а поля размещать через указание координ
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