Создание простого справочника

Скачать: 

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

В этой статье мы попробуем создать простой справочник.

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

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

Начнем...

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

Теперь в папке usrSTRU создадим xml-файл з названием CompStru.xml. Содержимое этого файла приведено в Листинге 1.

Листинг 1

 

<?xml version="1.0" encoding="UTF-8"?>
<STRU>
<TABLES>
<table attr="" path="cl_mdb" pattern="CL_COMPUTER" sys="ADM" table=" CL_COMPUTER"></table>
	</TABLES>
	<PATTERNS>
		<CL_COMPUTER>
			<PARENTS>
				<PARENT pattern="FWIDPARENT"/>
			</PARENTS>
			<FIELDS>
				<FNOM  type="longtext"/>
				<FNAME type="longtext"/>
				<FUSER type="long"/>
				<FREM  type="longtext"/>
				<FWID  type="counter"/>
			</FIELDS>
		</CL_COMPUTER>	
	</PATTERNS>
</STRU>	

 

 

Проведем обновление структур БД и проверим создалась ли необходимая таблица. Как это сделать читайте в статье „Создание базы данных и программ ее просмотра”.

Буква 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>

Файл l_computer.js. Этот файл создается на основе формата xml-grid. Давайте создадим файл l_computer.js в папке Scripts и запоним его текстом из Листинга 3.

Листинг 3

var isZaval;

function listLoad()
{
	with(this)
	{
		title = "Довідник комп`ютерів|Справочник компьютеров";	//заголовок списка
		editTask = "e_computer.xml";	//форма редактирования записи
		xmlGridFile = "l_computer.xml";	//описание списка для вывода
		printLabel = "comp";		//метка для печати
	}
}

function listSrc()
{
	this.qrySet(
			"From", "^CL_COMPUTER",
			"Order", "FNOM"					
			);
	
}

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

В функции listLoad() мы передаем title – заголовок нашего списка, xmlGridFile – имя xml-файла, в котором описан формат вывода списка, editTask – имя файла-формы для редактирования списка и printLabel – параметр для печати списка.

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

include ("sys/DpList.js")

В конце ОБЯЗАТЕЛЬНО необходимо подключить файл DpList.js главный скрипт, который запускает список.

Обратите внимание на такую строку в фукнции listLoad():

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

editTask – В этой переменной указывается файл, который отвечает за форму редактирования. В этом файле находится описание формы, а обработка события описана в файле (который „привязывается” к форме) с расширением *.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")); - этой командой ми привязываем созданный объект к справочнику аналитики. Как параметр используется номер справочника. С помощью функции getPar мы получаем значение параметра "CODPERS", где хранится номер справочника „Персонал”.

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 указывается файл или команда, который будет запущен при выборе данного пункта.