Вы здесь

Главная » Программирование в БЭСТ-4+

Сообщение об ошибке

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls в функции book_prev() (строка 775 в файле /home/o/oeugeny/spb4plus.ru/public_html/modules/book/book.module).

Урок 1. Создаем экран со списком в отдельном пункте меню

Перечень изучаемых функций InitList()

Задача урока:

- Пункт в меню в модуле Продажи.

· По пункту - реестр из одной единственной таблицы с перечнем выполненных работ ИТ отдела.
· Управление удалением в таблице
· Регулирование положения столбцов на экране

+ Формат таблицы

Дата - 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

 
Выполнение:

1. Создадим пункт меню

- Таблица real\rmenu.dbf

- У меня нет записи 0 10 - пишу туда "Реестр работ ИТ"

и блок кода с простенькой программой work.hrb

+Пример программы

FUNCTION Main()
SAYANDWAIT("OK")
RETURN NIL
· В 12-й версии БЭСТ 4+ в любом реестре нажимаем CTRL+F5
· Нажимаем F11
· Создаем новый файл work.prg
· F2 компилируем информацию для отладчик не включать
· пишем в поле функции меню {||HFileEval("work.hrb",{}) }
· проиндексируем модуль управление продажами обязательно, зайдем туда и убедимся что программка работает

2. Создаем программу с отображением таблицы на экране

· Общая щирина экрана на которой можем отразить 78 знаков - общая ширина всех полей 130 плюс пробелы между ними нужны.
· определим цепочку полей отражения на экране в строчку и размер отражения поля на экране (с учетом пробелов) : обрежем поля 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),18)

18 - left(str(Summa),18)

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

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

· для закрепления материала меняем значения в параметрах и смотрим изменения на экране
Примечание
o При включенной авторизации если вы используете свое меню - вам его надо обновить и появится этот пункт меню
o cCurProc:={||"2"} - сопроцедура для QBrowse(), значения параметров смотрите в описании QBROWSE
o field-> это обозначение что использовать поле применительно к текущей БД а поскольку мы пишем WORK->( InitList() ) то значит к WORK
o В описании Initlist четко написано что скролинг вправо не предусмотрен а стало быть у вас тока 80 символов и возможность открывать другие экраны, а также искользовать область на экране над или под столбцами

3. Для запрета на удаление строк в таблице

· добавим bDel:={||.F.} удаление будет запрещено и наоборот соответственно разрешено
· меняем строку в программе:

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

4. Регулирование положения столбцов на экране

· Если переменная заголовка меньше 78 символов – то расположение на экране будет отцентровано, если в конец ее добавить нужное число пробелов, то столбик сместится влево.
· Создадим nLeft:=1 и поместим его в InitList 21 параметром - столбики тоже прижмутся влево

 

Тэги: 

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.