Створення простого довідника

Скачать: 

 

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

В цій статті ми попробуємо створити простий довідник.

Для початку нам необхідно поставити конкретну задачу. Наприклад, на кожному підприємстві є комп’ютери. В першому наближенні їхніми характеристиками (для підприємства) є його назва (марка) і користувач, який за ним працює. Наша задача – створити такий реєстр комп’ютерів, який би відображав ці дані.

Для реалізації цієї задачі нам потрібно створити відповідну таблицю в базі даних, організувати алгоритм її перегляду, заповнення і редагування. Після закінчення ми отримаємо повноцінний довідник і зможемо його використовувати в обліку.

Почнемо...

Створення таблиці. Визначимо, які поля нам необхідні. По-перше, це номер комп’ютера. Назвемо це поле FNOM і зробимо його текстовим довжиною 14 символів (на випадок вводу інвентарного номера). По-друге, це назва комп’ютера – поле FNAME, текстове довжиною 20 символів. І по-третє, користувач – поле FUSER. Оскільки існує довідник аналітики „Персонал”, то значення цього поля ми будемо брати з цього довідника. Тому тип цього поля зробимо long.

Тепер в папці usrSTRU створимо xml-файл з назвою CompStru.xml. Зміст цього файлу візьмемо з Лістингу 1.

 

Лістинг 1

 

<?xml version="1.0" encoding="UTF-8"?>

<STRU> 

<TABLES> 

<table attr="" dospath="cdbf" path="cl_mdb" pattern="CL_COMPUTER" sys="ADM" table=" CL_COMPUTER"></table>

</TABLES>

<PATTERNS>

<CL_COMPUTER>

<PARENTS>

<PARENT pattern="FWIDPARENT"/>

</PARENTS>

<FIELDS>

<FNOM attr=" " type="longtext"/> 

<FNAME attr=" " type="longtext"/>

<FUSER attr=" " type="long"/>

<FREM attr=" " type="longtext"/>

<FWID attr=" " type="counter"/>

</FIELDS>

</CL_COMPUTER>

</PATTERNS>

</STRU> 

Проведемо модифікацію структур (після перезапуску системи) і перевіримо чи створилась необхідна таблиця. Як це зробити читайте в статті „Створення бази даних та програми її перегляду”.

Тепер нам необхідно створити файли l_computer.xml (в папці XMLGrid) і l_computer.js (в папці Scripts) для перегляду довідника і e_computer.xml і e_computer.js (обидва в папці Scripts) для редагування та заповнення. До чого тут папка XMLGrid? Прочитайте ще раз статтю Расположение файлов бизнес логики DebetPlus V12 і все стане на свої місця.

Буква l (від list) на початку назви файлу означає те, що файл призначений для ПЕРЕГЛЯДУ таблиці, а e (від edit) – для редагування та заповнення. Тому надалі ми бедумо дотримуватись саме такого порядку назв файлів. Це полегшить роботу ваших колег, які після вас будуть „розгрібати” ваші програми.

Файл l_computer.xml. Цей файл створюється на основі формату xml-grid. Давайте створимо файл l_computer.xml в папці XMLGrid і заповнимо його текстом з Лістингу 2.  

Лістинг 2

<?xml version="1.0" encoding="UTF-8"?>

<grid OnePageMode="true">

<page>

<field text="Номер|Номер" field="FNOM" width="14"/> 

<field text="Назва(марка)|Название(марка)" field="FNAME" width="20"/>

<field text="Користувач|Пользователь" field="FUSER" width="20"/>

<field text="Примітка|Примечание" field="FREM" width="30"/>

</page>

</grid> 

Елемент <field> дозволяє виводити в список конкретні поля відповідної таблиці. Атрибут text задає назву поля, field – ім’я поля з таблиці і width – ширину стовбця в символах при виводі списку.

Файл l_computer.js. Цей файл створюється на основі формату xml-grid. Давайте створимо файл l_computer.js в папці Scripts і заповнимо його текстом з Лістингу 3.

 

Лістинг 3

 

var isZaval;

function listLoad()

{

with(this)

{

title = "Довідник комп`ютерів|Справочник компьютеров"; //заголовок списка

htmEdit = "e_computer.xml"; //форма редактирования записи

xmlGridFile = "l_computer.xml"; //описание списка для вывода

htmPrnList = "comp"; //метка для печати

}

}

function listSrc()

{

this.qrySet(

"From", "^CL_COMPUTER",

"Order", "FNOM"

);

}

include ("sys\\DpList.js"); 

В функції listLoad() ми передаємо title заголовок нашого списку, xmlGridFile імя xml-файлу, в котрому описано формат виводу списку, htmEditім’я файлу-форми для редагування списку и htmPrnListпараметр для друку списку.

В функції listSrc() с допомогою методу this.qrySet описується таблиця, з котрої беруться дані для виводу в список.

Ну і в кінці файлу треба підключити файл DpList.js: include ("sys\\DpList.js");

Зверніть увагу такий рядок в фукнції listLoad():

htmEdit = "e_computer.xml"; //форма редактирования записи

htmEdit – це глобальна змінна. Коли компілятор зустрічає її в коді, то атомамично для редагування таблиці викликає той файл, ім’я якого є значенням цієї змінної. В цьому файлі знаходиться описання форми, а обробка події описана в файлі (якай „прив’язується” до форми) з розширенням *.js. Файл форми описується на основі XMLForm.

Для нашого випадку цей вміст цього файлу описано в Лістингу 4.

 

Лістинг 4

<?xml version="1.0" encoding="UTF-8"?>

<Form>

<Controls col="3">

<Label text="Номер компютера|Номер компьютера" />

<TextField ID="FNOM" width="80" colspan=”2”/>

<Label text="Марка компютера|Марка компьютера" />

<TextField ID="FNAME" width="80" colspan=”2”/>

<Label text="Користувач|Пользователь" />

<TextField ID="FUSER" width="25" />

<TextField ID="FUSER_TXT" width="100" />

<Label text="Примітка|Примечание" />

<TextField ID="FREM" width="200" colspan=”2”/>

</Controls>

<script language="JavaScript" src="e_computer.js" />

<script language="JavaScript" src="sys\DpBaseDlg.js"/> 

</Form>

Розглянемо позиції в наведеному коді.

<Controls col="3"> - вказує на те, на формі буде створена таблиця шириною три стовбці (значення змінної col). Таких груп може бути декілька. При цьому значення змінної col може відрізнятись. Те, що знаходиться в тілі цього тега, розміщується на формі за наступним правилом: один об’єкт – одна комірка. Якщо задіяна змінна colspan, то даний об’єкт займе кількість комірок, яка рівна значенню параметру colspan. Коли кількість комірок досягне значення col, то буде створено новий рядок, і т.д.

<Label text="Номер компютера|Номер компьютера" /> - заповнює комірку текстом.

<TextField ID="FNOM" width="80" colspan=”2”/> - додає в комірку текстове поле. Параметр ID – назва цього поля.

Про інші способи заповнення ми поговоримо пізніше в наступних статтях.

<script language="JavaScript" src="e_computer.js" /> - підключає до файлу форми файл обробки подій на формі. Про нього і поговоримо.

Вміст цього файлу наведено в Лістингу 5.  

Лістинг 5

 

include("sys\\mask.js");

include("Objects\\DpCl.js");

function Load()

{

Caption(ru("Довідник компютерів","Справочник компьютеров")+":"+ modeName(extPar.mode));

this.tbl=extPar.tblSrc; //инициализация таблицы, которую мы редактируем

//описание масок ввода/вывода:

FNOM.mask='&&&&&&&&&&&&&&&&&&';

FNAME.mask='&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&';

FREM.mask='&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'

scl = new DpCl("0"); // користувач

scl.setClcl(getPar("CODPERS"));

scl.linkCtrl(FUSER, FUSER_TXT);

//extPar – входящие параметры,

//extPar.mode – режим редактирования (добавление, копирование, правка)

if (extPar.mode == "EDIT" || extPar.mode == "COPY")

{

FNOM.value=this.tbl.getValue("FNOM");

FNAME.value=this.tbl.getValue("FNAME");

scl.setCod(this.tbl.getValue("FUSER"));

FREM.value=this.tbl.getValue("FREM");

}

}

function fillObject(m)

{

m.FNOM = FNOM.value;

m.FNAME = FNAME.value;

m.FUSER = FUSER.value;

m.FREM = FREM.value;

}

Перші два рядки підключають файли mask.js і DpCl.js. Ми будемо використовувати їх для створення масок для полів (перший) і зв’язку полів форми з довідниками аналітики (другий). Я рекомендую переглянути їхній вміст.

Функція Load() викликається, коли форма стає видимою. Я свідомо пропускаю опис деяких функцій. Зупинюсь тільки на використанні об’єкту DpCl().

scl = new DpCl("0"); - цією командою ми створюємо сам об’єкт.

scl.setClcl(getPar("CODPERS")); - цією командою ми прив’язуємо створений об’єкт до довідника аналітики. В нашому випадку це довідник аналітики „Персонал”. Його код – 2. Використання функції getPar не обов’язкове, але бажанне. Замість getPar("CODPERS") можна написати 2.

 

scl.linkCtrl(FUSER, FUSER_TXT); - після виконання цієї команди два поля (FUSER, FUSER_TXT) стануть „зв’язаними”, тобто, коли в поле FUSER внести код з довідника аналітики, іншу поле автоматично заповниться текстом, який відповідає цьому коду.

 

Функція fillObject(m) відповідає за збереження документу. Думаю, нескладно зрозуміти її вміст...

Залишилось додати пункт меню. Відкриваємо файл DpMenu.xml.

 

Знаходимо рядок:

 

<menu ua="Довідники" ru="Справочники">

 

Цей рядок описує початок пункту меню «Довідники».

Вибираемо пункт меню, після котрого хочемо додати новий пункт, и описуємо його:

<item ru="Справочник компьютеров" ua="Довідник компютерів" filter="uos" type="l" command="l_computer.js" />

Атрибут filter описує підсистему, в котрій буде доступним даний пункт, атрибут type вказує на тип виводимою інформації (l – список, d – діалог, s – системна команда), в атрибуті command вказується файл чи команда, котрий буде запущений при виборі даного пункту.