Может начнем обсуждение написания модуля на Харборе? УРОК1
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: Может начнем обсуждение написания модуля на Харборе? УРОК1 Author: itmanLocation: Ильин Е.Ю. PostPosted: 16 Sep 2005 15:28
    —
Допустим, хочу сделать:
Пункт в меню в модуле Продажи.
По пункту - реестр из одной единственной таблицы, скажем перечень выполненных работ ИТ отдела.(аналог mdocm но без mdoc скажем, для простоты)
Следует обеспечить стандартный набор действий, ввод, поиск, сорт, удалени

#2:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 16 Sep 2005 15:56
    —
Присоединяюсь к просьбе

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 11:26
    —
ОК поехали.
1. Создадим пункт меню
Таблица real\rmenu.dbf
У меня нет записи 0 10 - пишу туда "Реестр работ ИТ"
и простенькую программу work.hrb
Function Main()
SayAndWait("OK")
return NIL
компилируем ее в харбор и пишем в поле функции меню
HFileEval("work.hrb",{})
После чего проиндексируем модуль управление продажами обязательно, зайдем туда и убедимся что программка работает - будете готовы дальше, сообщите

#4:  Author: maestro_ PostPosted: 19 Sep 2005 12:22
    —
Добрый день!
Пункт меню сделал
функцию подцепи

#5:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 12:48
    —
Хорошо - теперь давайте обсудим формат таблицы (перечень и характеристики полей БД) по которой все будем делать.
Разумеется сразу же создадим эту таблицу и заполним кто как сумеет какими-нить значениями - чтобы на экране их увидеть

#6:  Author: maestro_ PostPosted: 19 Sep 2005 13:20
    —
например такая таблица
Формат полей

Дата - TEK_DATA D 8 0
Номер - ТЕК_NOMER C 6 0
Наименование Раб.- NAME C 34 0
Количество по строке - KOL N 19 4
Цена ед. - CENA 19 3
Сумма - SUMMA 19 3
Можно еще и партнера NAME_P C 25 0

#7:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 13:43
    —
Общая щирина экрана на которой можем отразить 78 знаков - общая ширина всех полей 130 плюс пробелы между ними нужны.
Давайте определим цепочку полей отражения на экране в строчку и размер отражения поля на экране (с учетом пробелов)

#8:  Author: itmanLocation: Ильин Е.Ю. PostPosted: 19 Sep 2005 14:04
    —
maestro_ wrote:
например такая таблица
Формат полей

Дата - TEK_DATA D 8 0
Номер - ТЕК_NOMER C 6 0
Наименование Раб.- NAME C 34 0
Количество по строке - KOL N 19 4
Цена ед. - CENA 19 3
Сумма - SUMMA 19 3
Можно еще и партнера NAME_P C 25 0


Может добавим справочник работ?
Вынесем работы в отдельную таблицу с возможностью наполнения при записи в таблицу приведенной структу

#9:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 14:31
    —
Давайте справочник чуть поз

#10:  Author: maestro_ PostPosted: 19 Sep 2005 14:38
    —
Давайте обрежим поля Name, Сеna и Summa что бы уместиться в 78
Для самого реестра можно оставить вот такой набор данных
1 8 1 6 1 16 1 5 1 18 1 18 1 = 78

8 - Tek_data
6 - Tek_Nomer
16 - left(Name,16)
5 - left(str(kol),5)
18 - left(str(Cena),1
18 - left(str(Summa),1

правда не уверен в правильности "обрезания" полей
"обрезанные" поля можно поместиь в подвал
1 - под символ разделитель

#11:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 14:45
    —
Таперя часов в 18 по Москве распишу - переку

#12:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 15:52
    —
@echo off
set HB_INSTALL=D:\B4_PL1103

set HOUT=%HB_INSTALL%\PRO\PLUGINS\EXTENSNS\REAL\

set HFLAGS= -n -a -w -gh -l
если с отладчиком - то надо
set HFLAGS= -n -a -w -gh -b


%HB_INSTALL%\bin\harbour %HFLAGS% work.prg -o%HOUT%

#13:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 17:29
    —
Внутри main стираем SayAndWait("OK")

Пишем в первом приближении

Code:
Local aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc
aSet:=SaveSet()
aSetKey:=SaveSetKey()

NETUSE("WORK",LoadPath()+"\real\work.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:={"  Дата   Номер      НАИМЕНОВАНИЕ                 Кол-во   Цена      Сумма    "}
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}}

WORK->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc) )

WORK->( DBCLOSEAREA() )

RestSetKey(aSetKey)
RestSet(aSet)

RETURN NIL


Дальше играем с изменением значений в параметрах, задаем вопросы
У себя не тестировал - если где допустил синтетические ошибки заранее прошу прощения

#14:  Author: WildCatLocation: Андрей Забабонин PostPosted: 19 Sep 2005 18:22
    —
Пишу простенькую программу hello.prg (текст есть в хелпе),
компилирую ее в харбор, кладу в PRO\PLUGINS\EXTENSNS\MAIN и пишу в поле функции меню

HFileEval("hello.hrb",{}).

При попытке вызова спец функции получаю

"Нет файла или пустой файл HFileEval("hello.hrb",{})"

Аналогичный результат при использовании FileEval("hello.prg",{}).
В чем может быть проблема?

#15:  Author: maestro_ PostPosted: 19 Sep 2005 18:25
    —
маленький вопросик
в данном реестре возможно удалять записи(по F! это можно как-то контролировать?
Хотелось еще рассмотреть возможность сортировки и поиска по этому реестру.


Last edited by maestro_ on 19 Sep 2005 18:28; edited 1 time in total

#16: Function Main() SayAndWait("OK") return NIL Author: GVALocation: Gaponenko PostPosted: 19 Sep 2005 18:26
    —
На выходе имеем Err Base/1004 class "Nil" has no exported method:

#17:  Author: maestro_ PostPosted: 19 Sep 2005 18:28
    —
WildCat wrote:


Нет файла или пустой файл HFileEval("hello.hrb",{})

В чем может быть проблема?


Попробуйте положить в корень беста файл test.prg

#18:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 18:57
    —
WildCat wrote:
Пишу простенькую программу hello.prg (текст есть в хелпе),
компилирую ее в харбор, кладу в PRO\PLUGINS\EXTENSNS\MAIN и пишу в поле функции меню

HFileEval("hello.hrb",{}).

При попытке вызова спец функции получаю

"Нет файла или пустой файл HFileEval("hello.hrb",{})"

Аналогичный результат при использовании FileEval("hello.prg",{}).
В чем может быть проблема?


Откуда вызываете функцию - из какого модуля ?

#19:  Author: mrs_2005Location: Михайлов Р.С. PostPosted: 19 Sep 2005 18:58
    —
в. 1201сп1
1. что-то у меня рамка состоит из шестерок, решеток, пятерок, т.е. не из линий?
2. После попытки выйти из окна через Esc, либо нажать Enter, появляется ошибка Error/1004 Class: 'Nil' has no exported metod:Eval Arguments: (). Чего не так?

#20:  Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 18:59
    —
maestro_ wrote:
маленький вопросик
в данном реестре возможно удалять записи(по F! это можно как-то контролировать?
Хотелось еще рассмотреть возможность сортировки и поиска по этому реестру.



Мы к этому еще только подходим. У Вас получился данный пример ?

#21: Re: Function Main() SayAndWait("OK") return NI Author: nordkLocation: Горбунов Константин PostPosted: 19 Sep 2005 19:01
    —
GVA wrote:
На выходе имеем Err Base/1004 class "Nil" has no exported method:


Проверьте правильно ли написали aBlockCols - похоже где-то букву пропустили либо формат базы данных по какому-то полю не

#22: Error/1004 Author: GVALocation: Gaponenko PostPosted: 19 Sep 2005 21:47
    —
Как аналогично отмечено в

mrs_2005 wrote:
в. 1201сп1
2. После попытки выйти из окна через Esc, либо нажать Enter, появляется ошибка Error/1004 Class: 'Nil' has no exported metod:Eval Arguments: (). Чего не так?


Ситуация не связана aBlockCols даже в первом простом двухстрочном варианте выскакивет именно при завершении модуля и возврате в меню.

А так Browser прорисовывается нормально , только пришлось поправить кодировку. И в Базе и в текстовом редакторе надо работать с CP866.

#23:  Author: itmanLocation: Ильин Е.Ю. PostPosted: 20 Sep 2005 08:15
    —
Quote:
1. Создадим пункт меню
Таблица real\rmenu.dbf
У меня нет записи 0 10 - пишу туда "Реестр работ ИТ"
и простенькую программу work.hrb
После чего проиндексируем модуль управление продажами обязательно, зайдем туда и убедимся что программка работает


На мой взгляд, следует прокомментировать действия при включенной авторизации и наличии более одной базы данных.

#24:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 08:34
    —
При включенной авторизации если вы используете свое меню - вам его надо обновить и появится этот пункт меню, что касается нескольких БД - не понял сути вопроса, обычно с несколькими БД я работаю из одной..............
Нет, все понятно, но что конкретно ?

#25:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 09:32
    —
Вот специально сделал все у себя на компе - работает - ошибок нет.
Правда пробовал в 11.03

#26:  Author: itmanLocation: Ильин Е.Ю. PostPosted: 20 Sep 2005 09:54
    —
При входе в режим настройки меню, и пользователей, никакой определенной базы не вызывается.
в Меню после обновления новая запись не появляется.
В связи с чем вопрос, при обновлении, какое меню берется за этало

#27:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 10:15
    —
А как Вы обновляетет меню ?

#28:  Author: itmanLocation: Ильин Е.Ю. PostPosted: 20 Sep 2005 10:22
    —
ALT-M
Все же из какой базы берется шаблон?
Чисто организационный вопрос.

#29: Error Base 1004 Author: GVALocation: Gaponenko PostPosted: 20 Sep 2005 10:33
    —
Попробовал на 11.01, 11.03, 12.01 все с последними SP.
Ситуация одинакова. При выходе из вновь созданного пункта меню -ошибка. От того что написано внутри модуля Main не зависит. Причем четко коррелирует с переменной, которая возвращается через Return. И ругается соответственно тип Nil, Character .........

#30:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 11:17
    —
Попробуйте мой вариант
http://webfile.ru/528621

#31:  Author: WildCatLocation: Андрей Забабонин PostPosted: 20 Sep 2005 12:44
    —
nordk wrote:
Откуда вызываете функцию - из какого модуля ?

Пробовал из "Арм.Гав.бух-а", как собственно и сказано в хелпе. Пробовал указывать полный маршрут к файлу hello.hrb (.prg). Результат один и тот же.

#32: Работает Author: GVALocation: Gaponenko PostPosted: 20 Sep 2005 12:44
    —
nordk wrote:
Попробуйте мой вариант
http://webfile.ru/528621


Ваш вариант работает Ппопробую найти 10 отличи

#33: Блок kod Author: GVALocation: Gaponenko PostPosted: 20 Sep 2005 12:54
    —
У меня нет записи 0 10 - пишу туда "Реестр работ ИТ"
и простенькую программу work.hrb
Function Main()
SayAndWait("OK")
return NIL
компилируем ее в харбор и пишем в поле функции меню
HFileEval("work.hrb",{})


Все понятно! Надо было просто не копировать а грамотно записывать по синтаксису блок кода как у Вас в примере {|| HFileEval('work.hrb',{}) }

#34:  Author: Лариса Т.Location: Тюрикова Л.А. PostPosted: 20 Sep 2005 13:12
    —
Весь пример получился, работает. Поясните пожалуйста эти строки:
cCurProc:={||"2"} - сопроцедура для QBrowse() - это означает обновить все записи?

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}} - массив блоков кода для QBrowse() - массив описания полей вывода. Это ясно. Как Харбор "понимает", что field - это наша база Work?

#35:  Author: Лариса Т.Location: Тюрикова Л.А. PostPosted: 20 Sep 2005 13:40
    —
Можно ли развить пример дальше на предмет ввода данных и применения различных справочников?

#36:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 20 Sep 2005 13:58
    —
maestro_ wrote:
Хотелось еще рассмотреть возможность сортировки и поиска по этому реестру.


Кроме этого, не забудьте пожалуйста объяснить, что делать, когда не все столбцы уместились на экране (требуется листание вправо)

#37: Re: Блок kod Author: mrs_2005Location: Михайлов Р.С. PostPosted: 20 Sep 2005 14:32
    —
GVA wrote:
У меня нет записи 0 10 - пишу туда "Реестр работ ИТ"
и простенькую программу work.hrb
Function Main()
SayAndWait("OK")
return NIL
компилируем ее в харбор и пишем в поле функции меню
HFileEval("work.hrb",{})


Все понятно! Надо было просто не копировать а грамотно записывать по синтаксису блок кода как у Вас в примере {|| HFileEval('work.hrb',{}) }


Да, наступил на те же грабли

#38:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 19:23
    —
WildCat wrote:
nordk wrote:
Откуда вызываете функцию - из какого модуля ?

Пробовал из "Арм.Гав.бух-а", как собственно и сказано в хелпе. Пробовал указывать полный маршрут к файлу hello.hrb (.prg). Результат один и тот же.


Есть каталог PRO\PLUGINS\EXTENSNS от точки запуска best.bat
Если хотите стартовать из АРМа - то надо положить в корень этого каталога если из другого модуля - в папку соответствующую выбранному мод

#39: Re: Блок kod Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 19:25
    —
GVA wrote:

Все понятно! Надо было просто не копировать а грамотно записывать по синтаксису блок кода как у Вас в примере {|| HFileEval('work.hrb',{}) }


Ну что Вам сказать ?.....
Добро пожаловать в раздел программирования !!!
А значит синтаксические ошибки всякие и другого рода недоглядки возможны - теперь Вы начинаете понимать что значит плохая отладка

Уж извиняйте - не исключено что до каких-то истин вместе будем добираться

#40:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 19:30
    —
Лариса Т. wrote:
Весь пример получился, работает. Поясните пожалуйста эти строки:
cCurProc:={||"2"} - сопроцедура для QBrowse() - это означает обновить все записи?

Совершенно верно - циферки необходимые и доступные смотрите в описании QBROWSE

Quote:
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}} - массив блоков кода для QBrowse() - массив описания полей вывода. Это ясно. Как Харбор "понимает", что field - это наша база Work?

field-> это применительно к текущей БД а поскольку мы пишем WORK->( InitList() ) то значит к WORK

#41:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 19:32
    —
Лариса Т. wrote:
Можно ли развить пример дальше на предмет ввода данных и применения различных справочников?

И можно и нужно - тока это в следующей теме УРОК2 - чтобы эти темки были как уроки - потом из них возьмем инфу и сделаем общее описание для других и в поставк

#42:  Author: nordkLocation: Горбунов Константин PostPosted: 20 Sep 2005 19:36
    —
Марина wrote:

Кроме этого, не забудьте пожалуйста объяснить, что делать, когда не все столбцы уместились на экране (требуется листание вправо)


Извините Марина, но как в известном анекдоте
"бананьев нема..."
В описании Initlist четко написано что скролинг вправо не предусмотрен а стало быть у вас тока 80 символов и возможность открывать другие экраны, а также искользовать область на экране над или под столбцами. У Вас разве есть где-то в БЭСТе скролинг вправо - а как нетрудно догадаться он весь на инитлисте и построен, поэтому когда в свое время я Вас консультировал по поводу Торгового Зала - я Вам говорил что любые экраны под Ваши желания...

#43:  Author: WildCatLocation: Андрей Забабонин PostPosted: 21 Sep 2005 10:39
    —
nordk wrote:
WildCat wrote:
nordk wrote:
Откуда вызываете функцию - из какого модуля ?

Пробовал из "Арм.Гав.бух-а", как собственно и сказано в хелпе. Пробовал указывать полный маршрут к файлу hello.hrb (.prg). Результат один и тот же.


Есть каталог PRO\PLUGINS\EXTENSNS от точки запуска best.bat
Если хотите стартовать из АРМа - то надо положить в корень этого каталога если из другого модуля - в папку соответствующую выбранному модулю

Прошу прощения! Сморозил глупость. Надо было не FileEval("hello.prg",{}), а просто имя файл

#44:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 21 Sep 2005 14:02
    —
nordk wrote:
У Вас разве есть где-то в БЭСТе скролинг вправо

Просто я думала, мы изучаем программирование на Harbour а не в БЭСТ
Наверное клипперовские функции просмотра таблиц будут работать в любом случае, в т ч листание вправо
Но я -то надеялась что нам еще порекомендуют какие-то удобные функции или объекты харбора для просмотра и редактирования таблиц, присоветуют, как к ним лучше привязать функциональные клавиш

#45:  Author: nordkLocation: Горбунов Константин PostPosted: 21 Sep 2005 15:14
    —
Да мы предлагаем инструмент под названием InitList
В нем все есть - что касается скролинга вправо - Вы можете заняться изучением клиппера и непосредственно класса TBROWSE - там Вы все сможете сделать в харборе.
Если же Вы хотите пользоваться программированием в БЭСТе и использовать более быстрые инструменты для решения, то ни в каком описании Вы этого не найдете, кроме нашего хелпа, вот я в данный момент помогаю это осваивать.
Просто не вижу большого смысла в скролинге - разумнее максимум на экране размещать и делать вспомогательные.

#46:  Author: BehemothLocation: Новиков Алексей Юрьевич PostPosted: 21 Sep 2005 17:56
    —
Добрый день.

При выполнении процедуры upgrade, все наши настройки в базе help пойдут под нож? Или нет?

#47:  Author: nordkLocation: Горбунов Константин PostPosted: 21 Sep 2005 18:31
    —
При выполнении процедуры апгрейд как Вы знаете системные фалы не переносятся....
Значит необходима некая утилита -которая после переноса запукается и тянет за собой недостающее, например пункты меню...
Поддержка всех Ваших решений централизованно в данный момент в стадии продумывания проекта решения (как собственно это сделать корректнее)

#48:  Author: Сергей В. ЧурбановLocation: Чурбанов Сергей Вячеславович PostPosted: 22 Sep 2005 14:43
    —
Добрый день!
заголовки столбцов получились в неправильной кодировке. что делать?
Как добавлять в данную таблицу записи?

Извините все поня


Last edited by Сергей В. Чурбанов on 22 Sep 2005 14:59; edited 1 time in total

#49:  Author: itmanLocation: Ильин Е.Ю. PostPosted: 22 Sep 2005 14:47
    —
А вы что используете для редактирования код



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group