View previous topic :: View next topic |
Author |
Message |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Sep 2005 10:08 Post subject: Обсуждение написание модуля на харборе УРОК3 |
|
|
Итак судя по вопросам переходим к созданию
справочников и их применению при вводе.....
Как всегда начнем с обсуждения
1. К какому полю будем цеплять справочник
2. Как его назовем
3. Какую информацию будем отражать на
экране справочника
Хочу особо обратить внимание - наша задача
научиться делать простейшее, постепенно его
усложняя |
|
Back to top |
|
 |
mrs_2005
Joined: 22 Jun 2005 Posts: 105 Location: Михайлов Р.С. Occupation: ООО "Предприятие "Виктория-Юг" Interests: г. Краснодар
|
Posted: 27 Sep 2005 15:19 Post subject: |
|
|
В предыдущих уроках мы забыли про поле получателя услуг Name_p. Может с него и начнем?
1. Включим в экранную форму поле Name_p
2. Прицепим к нему "Справочник Заказчиков"
3. Будем отражать Код и Наименован |
|
Back to top |
|
 |
garik
Joined: 25 Jul 2005 Posts: 40 Location: Ruslan Occupation: it Interests: moscow
|
Posted: 27 Sep 2005 16:56 Post subject: |
|
|
Доброго времени суток.Не подскажите в чём ошибка?
Навесил справочник на одиночный 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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Sep 2005 20:01 Post subject: |
|
|
mrs_2005 wrote: | В предыдущих уроках мы забыли про поле получателя услуг Name_p. Может с него и начнем?
1. Включим в экранную форму поле Name_p
2. Прицепим к нему "Справочник Заказчиков"
3. Будем отражать Код и Наименование |
Какой хитрый человек
Да собственно я не возражаю - тока это будет немного безграмотно.
Разумно справочник подключать с возможностью поиска при наборе первых симоволов в окне ввода - делать поиск по наименованию можно, но правильнее делать по коду партнера.
Вобщем тады будем подключать справочник пока без поиска, по ходу разбере |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 27 Sep 2005 20:05 Post subject: |
|
|
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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 28 Sep 2005 10:58 Post subject: |
|
|
Итак делаем справочник
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 |
|
 |
mrs_2005
Joined: 22 Jun 2005 Posts: 105 Location: Михайлов Р.С. Occupation: ООО "Предприятие "Виктория-Юг" Interests: г. Краснодар
|
Posted: 28 Sep 2005 16:06 Post subject: |
|
|
Экран строится, но при попытке зайти по 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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 28 Sep 2005 18:54 Post subject: |
|
|
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 |
|
 |
Сергей В. Чурбанов
Joined: 27 Jun 2003 Posts: 35 Location: Чурбанов Сергей Вячеславович Occupation: ООО "Интеллект-сервис-НСК" Interests: Новосибирск
|
Posted: 30 Sep 2005 13:31 Post subject: |
|
|
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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 30 Sep 2005 14:11 Post subject: |
|
|
nordk wrote: |
Code: | {"Сумма (руб.).......................:","SUMMA"}, ; |
|
Сергей В. Чурбанов wrote: |
Добрый день!
Code: |
{"Сумма (руб)........................:","SUMMA"};
|
|
Посмотрите внимательно на разницу строк п |
|
Back to top |
|
 |
mrs_2005
Joined: 22 Jun 2005 Posts: 105 Location: Михайлов Р.С. Occupation: ООО "Предприятие "Виктория-Юг" Interests: г. Краснодар
|
Posted: 30 Sep 2005 15:23 Post subject: |
|
|
Ура, заработало!
В выражении
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 |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 30 Sep 2005 16:16 Post subject: |
|
|
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 |
|
 |
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 30 Sep 2005 17:12 Post subject: Еще не все |
|
|
Формирую новую запись, выбираю поставщика. Нажимаю Enter вываливаюсь из real с сообщением:
Error base/1002 Алиас не существует: Feval |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 30 Sep 2005 17:14 Post subject: |
|
|
Если нетрудно - приведите плз код программы - может где что упустил...
Заодно хоть увижу что по результату всех наших разговоров у Вас должно было получит |
|
Back to top |
|
 |
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 30 Sep 2005 17:30 Post subject: Крайний вариант |
|
|
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 |
|
 |
|
|
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
|