Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 02 Nov 2007 21:13 Post subject:
Ааа пропустил
Тогда по первой таблице создайте индекс UPPER(CODE)
А по второй таблице UPPER(CODE+TYPE)
Сами справочники в общем виде создавать умеете ?
Если да то сделайте справочник по первой и второй таблице через
MAKEREFER() и тогда уже приводим окончательный текст программы-заготовки
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
Posted: 02 Nov 2007 21:46 Post subject:
ОК, продолжаем. Расширенный вариант заготовки:
Code:
//корректировка доп.информации о партнере
//к уроку 202 (QINPUT)
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(01)) //индекс UPPER(CODE)
PART__V->(OrdSetFocus(01)) //индекс UPPER(CODE+TYPE)
p_typ:=val(token(partner->adress2,,1)) //подтянули текущее значение типа
p_vid:=val(token(partner->adress2,,2)) //подтянули текущее значение вида
p_post:=alltrim(token(partner->adress2,,3)) //подтянули текущее значение емэйла
//определим справочник типов
part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код "," Тип "},;
{3,5,16}, "n/w,w+/n",{"CODE"},{"xVar[1]"},,;
{{||str(FIELD->CODE,6,0)},{||FIELD->NAME}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
//определим справочник видов
part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код ","Населенный пункт "},;
{3,5,16}, "n/w,w+/n",{"TYPE"},{"xVar[1]"},,;
{{||str(FIELD->TYPE,6,0)},{||FIELD->NAME}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
//
//
if NoOrYes("Изменять информацию о партнере",2,{" Да "," Нет "})=1
partner->(RECLOCK())
partner->adress2:=str(p_typ,6,0)+';'+str(p_vid,6,0)+';'+ltrim(p_post)
partner->(F_DBUNLOCK())
endif
part_t->( DBCLOSEAREA() )
part_v->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 03 Nov 2007 14:55 Post subject:
Теперь переделаем справочники
было
//определим справочник типов
Code:
part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код "," Тип "},;
{3,5,16}, "n/w,w+/n",{"CODE"},{"xVar[1]"},,;
{{||str(FIELD->CODE,6,0)},{||FIELD->NAME}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
Поскольку мы делаем через QINPUT то массив будет aIn[]
И еще необходимо добавить строку поиска с тем чтобы
не обращаться к справочнику при корректировке, если
значение какое-то уже было выставлено и менять не обязательно
Поэтому стало
Code:
part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код "," Тип "},;
{3,5,16}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',;
{{||str(FIELD->CODE,6,0)},{||FIELD->NAME}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 03 Nov 2007 15:07 Post subject:
Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0
Для централизованной поддержки не забываем информацию о них
в базу fields в соответствие с описанием в help
Исправляем в заготовке с учетом смена типа переменных и изменения
справочников. Выкладываем что получилось и если непонятно
задаем вопросы
Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0
QINPUT сам пишет в базу? Получится сделать запись информации не в добавленные поля P_CODE и P_TYPE, а в поле adress2 (я не нашел где в БЭСТ-е это поле задействовано), как это хочет Владимир? Вот код, который он написан выше:
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
Posted: 06 Nov 2007 11:22 Post subject:
Пользовательские справочники part_t и part_v изменил, индексы к ним создал.
Изменения в определения справочника типов и видов внес.
Пришлось уточнить соответственно str(FIELD->CODE,6,0) на FIELD->CODE.
Что получилось - непонятно, ибо созданные справочники нигде не используются.
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 06 Nov 2007 11:23 Post subject:
Дениска wrote:
nordk wrote:
Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0
QINPUT сам пишет в базу? Получится сделать запись информации не в добавленные поля P_CODE и P_TYPE, а в поле adress2 (я не нашел где в БЭСТ-е это поле задействовано), как это хочет Владимир? Вот код, который он написан выше:
QINPUT пишет как в базу так и в переменные.
Собственно InitList для ввода использует QINPUT
Да это можно сделать, только мы в примере сделаем в поля а в адрес
это уже для самостоятельного развлечения...
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 06 Nov 2007 11:24 Post subject:
vla wrote:
Пользовательские справочники part_t и part_v изменил, индексы к ним создал.
Изменения в определения справочника типов и видов внес.
Пришлось уточнить соответственно str(FIELD->CODE,6,0) на FIELD->CODE.
Что получилось - непонятно, ибо созданные справочники нигде не используются.
Пожалуйста опубликуйте что получилось.
Я посмотрю на весь текст и мы сразу сделаем вво
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
Posted: 06 Nov 2007 11:34 Post subject:
Попробовал заменить aIn[x] на xVar[x] и проверить через Dialog():
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.) //справочник типов партнеров
PART_T->(OrdSetFocus("PART_T"))
part_t->(dbgotop())
p_typ:=token(partner->adress2,,1) //подтянули текущее значение типа
//определим справочник типов
part_t->( MAKEREFER("s_t","Тип партнера",2,{" Код "," Тип "},;
{3,5,16}, "n/w,w+/n",{"CODE"},{"xVar[1]"},'UPPER(xVar[1])',;
{{||FIELD->CODE},{||FIELD->NAME}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(NAME)'))
//а дальше временное, для проверки работы справочников
aRef:="s_t"
p_typ:=Dialog('Вид партнера:', 'XXXXXX',p_typ,,,,,aRef)
if lastkey()<>27
if NoOrYes("Изменять информацию о партнере",2,{" Да "," Нет "})=1
partner->(RECLOCK())
partner->adress2:=p_typ+';'
partner->(F_DBUNLOCK())
endif
endif
part_t->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil
- работает, вот только текущее значение в справочнике не находится, т.к. CODE хранится выровненным вправо, а в Dialog() показывается выровненным влев
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
Posted: 06 Nov 2007 11:39 Post subject:
Текущее состояние:
Code:
//корректировка доп.информации о партнере
//к уроку 202 (QINPUT)
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:=token(partner->adress2,,1) //подтянули текущее значение типа
p_vid:=token(partner->adress2,,2) //подтянули текущее значение вида
p_post:=alltrim(token(partner->adress2,,3)) //подтянули текущее значение емэйла
//определим справочник типов
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->(RECLOCK())
partner->adress2:=p_typ+';'+p_vid+';'+ltrim(p_post)
partner->(F_DBUNLOCK())
endif
part_t->( DBCLOSEAREA() )
part_v->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 06 Nov 2007 13:12 Post subject:
Владимир мы с Вами делаем пример от простого к сложному.
А значит мы делаем на своих полях в справочнике партнеров.
Добейтесь сначала результатов в этом а уж потом притягивайте
составные текстовые поля в качестве самостоятельной программы - ок ?
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
Posted: 06 Nov 2007 16:29 Post subject:
С учетом замечаний Константина текущий вариант выглядит так:
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->(RECLOCK())
partner->p_typ:=p_typ
partner->p_vid:=p_vid
partner->p_post:=p_post
partner->(F_DBUNLOCK())
endif
part_t->( DBCLOSEAREA() )
part_v->( DBCLOSEAREA() )
RestSetKey(aSetKey)
RestSet(aSet)
return nil
Соответственно, в таблицу partner предварительно добавил 3 текстовых поля (согласно правилам, до поля CRC):
P_TYP Char len=6
P_VID Char len=6
P_POST Char len=30
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