Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Обсуждение написание модуля на харборе УРОК3
Goto page 1, 2  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: 27 Sep 2005 10:08    Post subject: Обсуждение написание модуля на харборе УРОК3 Reply with quote

Итак судя по вопросам переходим к созданию
справочников и их применению при вводе.....

Как всегда начнем с обсуждения
1. К какому полю будем цеплять справочник
2. Как его назовем
3. Какую информацию будем отражать на
экране справочника

Хочу особо обратить внимание - наша задача
научиться делать простейшее, постепенно его
усложняя
Back to top
View user's profile Send private message Send e-mail
mrs_2005



Joined: 22 Jun 2005
Posts: 105
Location: Михайлов Р.С.
Occupation: ООО "Предприятие "Виктория-Юг"
Interests: г. Краснодар

PostPosted: 27 Sep 2005 15:19    Post subject: Reply with quote

В предыдущих уроках мы забыли про поле получателя услуг Name_p. Может с него и начнем?

1. Включим в экранную форму поле Name_p
2. Прицепим к нему "Справочник Заказчиков"
3. Будем отражать Код и Наименован
Back to top
View user's profile Send private message Send e-mail Visit poster's website
garik



Joined: 25 Jul 2005
Posts: 40
Location: Ruslan
Occupation: it
Interests: moscow

PostPosted: 27 Sep 2005 16:56    Post subject: Reply with quote

Доброго времени суток.Не подскажите в чём ошибка?
Навесил справочник на одиночный Get-объект.Всё работает кроме одного.При вводе в поле вылазит справочник, хотя вводимое значение соответствует информации в справочнике и тип справочника=2.Ниже код:

netuse('uslugi','uslugi')
index on NN to uslugi.cdx

Uslugi->(MakeRefer("S_V","Услуги",2, ;
{"Код","Наименование"},{3,23,7},'n/w,w+/n',{'NN'},{'cVar'},,;
{FieldBlock("NN"),FieldBlock("Nam")},,,,,,,,,,,,,,,,,;
'cFind$UPPER(NN)', ,,,,,,,, ,'',,,,,,,,,,1))

И второй вопрос.Как вернуть второе выбранное значение справочника?В моём случае значение "Наименования"?
Back to top
View user's profile Send private message
nordk



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

PostPosted: 27 Sep 2005 20:01    Post subject: Reply with quote

mrs_2005 wrote:
В предыдущих уроках мы забыли про поле получателя услуг Name_p. Может с него и начнем?

1. Включим в экранную форму поле Name_p
2. Прицепим к нему "Справочник Заказчиков"
3. Будем отражать Код и Наименование


Какой хитрый человек
Да собственно я не возражаю - тока это будет немного безграмотно.
Разумно справочник подключать с возможностью поиска при наборе первых симоволов в окне ввода - делать поиск по наименованию можно, но правильнее делать по коду партнера.
Вобщем тады будем подключать справочник пока без поиска, по ходу разбере
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 27 Sep 2005 20:05    Post subject: Reply with quote

garik wrote:
Доброго времени суток.Не подскажите в чём ошибка?
Навесил справочник на одиночный Get-объект.Всё работает кроме одного.При вводе в поле вылазит справочник, хотя вводимое значение соответствует информации в справочнике и тип справочника=2.Ниже код:

netuse('uslugi','uslugi')
index on NN to uslugi.cdx

Uslugi->(MakeRefer("S_V","Услуги",2, ;
{"Код","Наименование"},{3,23,7},'n/w,w+/n',{'NN'},{'cVar'},,;
{FieldBlock("NN"),FieldBlock("Nam")},,,,,,,,,,,,,,,,,;
'cFind$UPPER(NN)', ,,,,,,,, ,'',,,,,,,,,,1))

И второй вопрос.Как вернуть второе выбранное значение справочника?В моём случае значение "Наименования"?


На первый вопрос отвечаю - у вас нет строки поиска в описании справочника, раз строка не найдена и не идентифицирована то в соответствии с типом 2 открытие справочника происходит обязательно
На второй вопрос в массив где возвращаете код добавить второй элемент - наименование и соответственно второй элемент в массив переменных куда наименование возвращать
Back to top
View user's profile Send private message Send e-mail
nordk



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

PostPosted: 28 Sep 2005 10:58    Post subject: Reply with quote

Итак делаем справочник

1. Используем для этого базу partner.dbf

Значит в код надо добавить

Code:
NETUSE("_Partner",LoadPath()+"partner.dbf",,.F.)


и разумеется в конец программы

Code:
_partner->( DBCLOSEAREA() )


2. Создадим справочник

Code:
_PARTNER->( MAKEREFER("PARTNERS","Справочник поставщиков",2  ;
,{" Код  ","Наименование поставщика","    И Н Н    "},                        ;
{3,5,16}, "n/w,w+/n",{"SHORTNAME"},{"aIn[7]"},,                              ;{{||FIELD->CODE},{||FIELD->SHORTNAME},                                      ;{||FIELD->CODE_PR}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)') )


3.Изменим наш массив с переменными ввода на

Code:
_aHeads:={{"Введите дату работ.................:","TEK_DATA"}, ; {"Введите номер документа............:","TEK_NOMER"}, ;
{"Наименование работ.................:","NAME"}, ;{"Количество.........................:","KOL",,,"0"}, ;{"Цена...............................:","СENA",,,"0"}, ;
{"Сумма (руб.).......................:","SUMMA"},  ;
{"Наименование контрагента...........:","Name_p"}}


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

Code:
aRef:={,,,,,,"partners"}


5.Осталось переписать наш InitList следующим образом

Code:
WORK->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,))
Back to top
View user's profile Send private message Send e-mail
mrs_2005



Joined: 22 Jun 2005
Posts: 105
Location: Михайлов Р.С.
Occupation: ООО "Предприятие "Виктория-Юг"
Interests: г. Краснодар

PostPosted: 28 Sep 2005 16:06    Post subject: Reply with quote

Экран строится, но при попытке зайти по Enter либо добавить запись по F4 у меня выдает ошибку "Неверный аргумент".

Code:


Function Main()
Local aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc ,aRef,aWhen,aValid
aSet:=SaveSet()
aSetKey:=SaveSetKey()

altd()

NETUSE("WORK",LoadPath()+"\real\work.dbf",,.F.)
NETUSE("_PARTNER",LoadPath()+"\PARTNER.dbf",,.F.)

DISPBOX(2,0,23,79,( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ),"W+/B")
nTop:=3
nBot:=22
cColHead:={"  Дата   Номер      НАИМЕНОВАНИЕ                 Кол-во   Цена      Сумма    "}

// Параметр - сопроцедура для QBrowse  - обновить все записи
cCurProc:={||"2"}
// заголовки колонок
aBlockCols:={{{||field->tek_data},0},{{||field->tek_nomer},9},{{||LEFT(field->name,16)},16},{{||STR(field->kol,5)},33},{{||STR(field->cena,12,2)},39},{{||STR(field->summa,12,2)},52}}
// запрет удаления
bDel:={||.F.}
// переменная для ввода записи
aHeads:={{"Введите дату работ................:","TEK_DATA"},;
          {"        номер документа...........:","TEK_NOMER"},;
          {"        наименование работ........:","NAME"},;
          {"        количество................:","KOL","1","1","0"},;
          {"        цену......................:","CENA","1","1","0"},;
          {"        сумму (руб.)..............:","SUMMA"},;
          {"        наименование контрагента..:","Name_p"}}
// переменная для поля подсчета поля суммы. Последний элемент должен быть можно/нельзя
aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},.T.}
aValid:={||nApp=2}
// определим формат поля суммы
aPic:={,,,,,"99999999.99"}
// Определяем уникальность по индексу (=2)
nUniMode:=2

// Создаем справочник на основе справочника партнеров
_partner->(MakeRefer("Partners","Справочник поставщиков",2,{"  Код  ","Наименование","  ИНН "},;
     {3,5,16},"n/w,w+/n",{"SHORTNAME"},{"aIn[7]"},,;
     {{||Field->Code},{||Field->ShortName},{||Field->Code_pr}};
     ,,,,,,,,,;
     ,,,,,,,,'cFind$UPPER(ShortName)'))

// Создаем массив справочников для InitList
aRef:={,,,,,,"Partners"}

work->(Initlist(nTop,nBot,cColHead,aBlockCols,cCurProc,;
aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,))


_PARTNER->( DBCLOSEAREA() )

WORK->( DBCLOSEAREA() )

RestSetKey(aSetKey)
RestSet(aSet)

RETURN NIL



Что сделал не правильно?[/quote]
Back to top
View user's profile Send private message Send e-mail Visit poster's website
nordk



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

PostPosted: 28 Sep 2005 18:54    Post subject: Reply with quote

mrs_2005 wrote:
Экран строится, но при попытке зайти по Enter либо добавить запись по F4 у меня выдает ошибку "Неверный аргумент".

Code:


aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},.T.}
aValid:={||nApp=2}


Что сделал не правильно?


aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5],.T.}}
aValid:={||nApp=2} ???? Он правда и не используется, но как минимум
aValid:={{||nApp=2}}
Back to top
View user's profile Send private message Send e-mail
Сергей В. Чурбанов



Joined: 27 Jun 2003
Posts: 35
Location: Чурбанов Сергей Вячеславович
Occupation: ООО "Интеллект-сервис-НСК"
Interests: Новосибирск

PostPosted: 30 Sep 2005 13:31    Post subject: Reply with quote

nordk wrote:
Итак делаем справочник
3.Изменим наш массив с переменными ввода на
Code:
_aHeads:={{"Введите дату работ.................:","TEK_DATA"}, ; {"Введите номер документа............:","TEK_NOMER"}, ;
{"Наименование работ.................:","NAME"}, ;{"Количество.........................:","KOL",,,"0"}, ;{"Цена...............................:","СENA",,,"0"}, ;
{"Сумма (руб.).......................:","SUMMA"},  ;
{"Наименование контрагента...........:","Name_p"}}



Добрый день!
Code:

_aHeads:={;
{"Введите дату работ.................:","TEK_DATA"}, ;
{"Введите номер документа............:","TEK_NOMER"}, ;
{"Наименование работ.................:","NAME"}, ;
{"Количество.........................:","KOL","1","1","0"}, ;
{"Цена...............................:","CENA","1","1","0"}, ;
{"Сумма (руб)........................:","SUMMA"};
{"Наименование контрагента...........:","Name_p"};
}

После добавления строки с партнером сообщение компилятора об ошибке: Error E0030 syntax error: "parse error at" '{' "
без этой строки (наименование партнера) все нормально. (если ее убрать то компилируется без ошибок)
Back to top
View user's profile Send private message
nordk



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

PostPosted: 30 Sep 2005 14:11    Post subject: Reply with quote

nordk wrote:

Code:
{"Сумма (руб.).......................:","SUMMA"}, ;



Сергей В. Чурбанов wrote:

Добрый день!
Code:

{"Сумма (руб)........................:","SUMMA"};



Посмотрите внимательно на разницу строк п
Back to top
View user's profile Send private message Send e-mail
mrs_2005



Joined: 22 Jun 2005
Posts: 105
Location: Михайлов Р.С.
Occupation: ООО "Предприятие "Виктория-Юг"
Interests: г. Краснодар

PostPosted: 30 Sep 2005 15:23    Post subject: Reply with quote

Ура, заработало!

В выражении
Code:

aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},.T.}

не учел добавление еще одного поля ввода. Т.е.
должно быть так
Code:

aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},,.T.}


Теперь несколько вопросов:
1. Что означает .F. в
Code:

NETUSE("_Partner",LoadPath()+"partner.dbf",,.F.)

2. В приведенном коде с исправлением работает все, кроме фильтра. Если стоим в реестре, жмем F6, и доходим до суммы, то говорит, что неверный аргумент, где можно поискать ошибку?

3.
Quote:

Разумно справочник подключать с возможностью поиска при наборе первых симоволов в окне ввода - делать поиск по наименованию можно, но правильнее делать по коду партнера.
Вобщем тады будем подключать справочник пока без поиска, по ходу разберем.

Ув. Константин! Наверное, пора подключать поиск по первым символам и по коду
4. Да и номер можно попробовать формировать автоматически
Back to top
View user's profile Send private message Send e-mail Visit poster's website
nordk



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

PostPosted: 30 Sep 2005 16:16    Post subject: Reply with quote

mrs_2005 wrote:
Ура, заработало!

Code:

aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},,.T.}




Честно говоря мне непонятно почему заработало
Но с учетом фильтра давайте напишем так
Code:
aWhen:={,,,,,{||IF(nApp>0,aIn[6]:=aIn[4]*aIn[5],),.T.}}


Quote:

Теперь несколько вопросов:
1. Что означает .F. в
Code:
NETUSE("_Partner",LoadPath()+"partner.dbf",,.F.)



Монопольный режим (в данном случае - нет)

Quote:

Ув. Константин! Наверное, пора подключать поиск по первым символам и по коду
4. Да и номер можно попробовать формировать автоматически


Насчет автоматического номера не совсем понял, насчет поиска - отпишу в понедельник
Back to top
View user's profile Send private message Send e-mail
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 30 Sep 2005 17:12    Post subject: Еще не все Reply with quote

Формирую новую запись, выбираю поставщика. Нажимаю Enter вываливаюсь из real с сообщением:
Error base/1002 Алиас не существует: Feval
Back to top
View user's profile Send private message
nordk



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

PostPosted: 30 Sep 2005 17:14    Post subject: Reply with quote

Если нетрудно - приведите плз код программы - может где что упустил...
Заодно хоть увижу что по результату всех наших разговоров у Вас должно было получит
Back to top
View user's profile Send private message Send e-mail
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 30 Sep 2005 17:30    Post subject: Крайний вариант Reply with quote

Function Main()
Local aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc ,aRef,aWhen,aValid
Local _aheads, bDel, Napp, aPic, nUnimode
altd()
dbpush()
aSet:=SaveSet()
aSetKey:=SaveSetKey()

NETUSE("WORK",LoadPath()+"\real\work.dbf",,.F.)
NETUSE("_PARTNER",LoadPath()+"\PARTNER.dbf",,.F.)

DISPBOX(2,0,23,79,( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ),"W+/B")
nTop:=3
nBot:=22
cColHead:={" Дата Номер НАИМЕНОВАНИЕ Кол-во Цена Сумма "}

// заголовки колонок
aBlockCols:={{{||field->tek_data},0},;
{{||field->tek_nomer},9},;
{{||LEFT(field->name,16)},16},;
{{||STR(field->kol,5)},33},;
{{||STR(field->cena,12,2)},39},;
{{||STR(field->summa,12,2)},52}}

// запрет удаления
bDel:={||.F.}
cCurProc:={||"2"}

// переменная для ввода записи
_aHeads:={{"Введите дату работ................:","TEK_DATA"},;
{" номер документа...........:","TEK_NOMER"},;
{" наименование работ........:","NAME"},;
{" количество................:","KOL","1","1","0"},;
{" цену......................:","CENA","1","1","0"},;
{" сумму (руб.)..............:","SUMMA"},;
{" наименование контрагента..:","Name_p"}}

// переменная для поля подсчета поля суммы.
aValid:={{||nApp=2}}
aWhen:={,,,,,{||IF(nApp>0,aIn[6]:=aIn[4]*aIn[5],),.T.}}

// определим формат поля суммы
aPic:={,,,,,"99999999.99"}
// Определяем уникальность по индексу (=2)
nUniMode:=2

// Создаем справочник на основе справочника партнеров
_PARTNER->( MAKEREFER("PARTNERS","Справочник поставщиков",2 ;
,{" Код ","Наименование поставщика"," И Н Н "},;
{3,5,16}, "n/w,w+/n",{"SHORTNAME"},{"aIn[7]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->CODE_PR}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)') )

// Создаем массив справочников для InitList
aRef:={,,,,,,"Partners"}

work->(Initlist(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,))

_PARTNER->( DBCLOSEAREA() )
WORK->( DBCLOSEAREA() )

RestSetKey(aSetKey)
RestSet(aSet)
dbpop()
RETURN NIL
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 1, 2  Next
Page 1 of 2

 
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