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



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

PostPosted: 02 Nov 2007 21:13    Post subject: Reply with quote

Ааа пропустил
Тогда по первой таблице создайте индекс UPPER(CODE)
А по второй таблице UPPER(CODE+TYPE)
Сами справочники в общем виде создавать умеете ?
Если да то сделайте справочник по первой и второй таблице через
MAKEREFER() и тогда уже приводим окончательный текст программы-заготовки
Back to top
View user's profile Send private message Send e-mail
vla



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

PostPosted: 02 Nov 2007 21:46    Post subject: Reply with quote

ОК, продолжаем. Расширенный вариант заготовки:
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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 03 Nov 2007 14:50    Post subject: Reply with quote

Пропустил
В структурах баз давайте CODE сделаем C 6 0
И type тоже сделаем C 6 0
Я ведь даже индексы написал что эти поля символьные
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 03 Nov 2007 14:55    Post subject: Reply with quote

Теперь переделаем справочники

было
//определим справочник типов
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)'))
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 03 Nov 2007 15:04    Post subject: Reply with quote

Теперь второй справочник
было
Code:
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)'))

Теже изменения что и в предыдущем плюс увязка с предыдущим
по индексу
Code:
part_v->( MAKEREFER("s_v","Вид партнера",2,{" Код  ","Населенный пункт "},;
  {3,5,16}, "n/w,w+/n",{"TYPE"},{"aIn[2]"},'UPPER(aIn[1]+aIn[2])',;
  {{||str(FIELD->TYPE,6,0)},{||FIELD->NAME}};
  ,,,,,,;
  {||part_v->( SETSCOPE('UPPER(CODE)',UPPER(aIn[1])) )},;
  {||part_v->( SETSCOPE() )},;
   ,,,,,,,,,'cFind$UPPER(NAME)'))
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 03 Nov 2007 15:07    Post subject: Reply with quote

Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0
Для централизованной поддержки не забываем информацию о них
в базу fields в соответствие с описанием в help
Исправляем в заготовке с учетом смена типа переменных и изменения
справочников. Выкладываем что получилось и если непонятно
задаем вопросы
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 03 Nov 2007 17:37    Post subject: Reply with quote

nordk wrote:
Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0


QINPUT сам пишет в базу? Получится сделать запись информации не в добавленные поля P_CODE и P_TYPE, а в поле adress2 (я не нашел где в БЭСТ-е это поле задействовано), как это хочет Владимир? Вот код, который он написан выше:
Code:

      partner->(RECLOCK())
        partner->adress2:=str(p_typ,6,0)+';'+str(p_vid,6,0)+';'+ltrim(p_post)
      partner->(F_DBUNLOCK())
Back to top
View user's profile Send private message
vla



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

PostPosted: 06 Nov 2007 11:22    Post subject: Reply with quote

Пользовательские справочники part_t и part_v изменил, индексы к ним создал.
Изменения в определения справочника типов и видов внес.
Пришлось уточнить соответственно str(FIELD->CODE,6,0) на FIELD->CODE.
Что получилось - непонятно, ибо созданные справочники нигде не используются.
Back to top
View user's profile Send private message
nordk



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

PostPosted: 06 Nov 2007 11:23    Post subject: Reply with quote

Дениска wrote:
nordk wrote:
Теперь добавляем в таблицу partner поля P_CODE C 6 0 и P_TYPE C 6 0


QINPUT сам пишет в базу? Получится сделать запись информации не в добавленные поля P_CODE и P_TYPE, а в поле adress2 (я не нашел где в БЭСТ-е это поле задействовано), как это хочет Владимир? Вот код, который он написан выше:
Code:

      partner->(RECLOCK())
        partner->adress2:=str(p_typ,6,0)+';'+str(p_vid,6,0)+';'+ltrim(p_post)
      partner->(F_DBUNLOCK())


QINPUT пишет как в базу так и в переменные.
Собственно InitList для ввода использует QINPUT
Да это можно сделать, только мы в примере сделаем в поля а в адрес
это уже для самостоятельного развлечения...
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 06 Nov 2007 11:24    Post subject: Reply with quote

vla wrote:
Пользовательские справочники part_t и part_v изменил, индексы к ним создал.
Изменения в определения справочника типов и видов внес.
Пришлось уточнить соответственно str(FIELD->CODE,6,0) на FIELD->CODE.
Что получилось - непонятно, ибо созданные справочники нигде не используются.


Пожалуйста опубликуйте что получилось.
Я посмотрю на весь текст и мы сразу сделаем вво
Back to top
View user's profile Send private message Send e-mail
vla



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

PostPosted: 06 Nov 2007 11:34    Post subject: Reply with quote

Попробовал заменить 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() показывается выровненным влев
Back to top
View user's profile Send private message
vla



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

PostPosted: 06 Nov 2007 11:39    Post subject: Reply with quote

Текущее состояние:
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
Back to top
View user's profile Send private message
nordk



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

PostPosted: 06 Nov 2007 13:12    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: 06 Nov 2007 13:59    Post subject: Reply with quote

nordk wrote:
Владимир мы с Вами делаем пример от простого к сложному.

Написал в личк
Back to top
View user's profile Send private message
vla



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

PostPosted: 06 Nov 2007 16:29    Post subject: Reply with quote

С учетом замечаний Константина текущий вариант выглядит так:
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
Back to top
View user's profile Send private message
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 2 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