Глава 8. ТИПЫ ДОКУМЕНТОВ
Главные и подчиненные таблицы
Документом в нашей программе называются любые данные, отражающие некоторый
факт, имевший место. Это может быть отдельный платеж
или отгрузка товара, заключенный договор и т.д
. Как правило, такие факты имеют дату или даже
несколько дат (у договора может быть дата подписания и
дата завершения). Например, такая информация, как прайс
-лист тоже может считаться документом, если цены время
от времени меняются или если для разных покупателей используются разные
прайс-листы.
В отличие от содержимого справочников, не все документы переносятся
в новую базу данных, если мы создаем ее «
по остаткам предыдущего периода». Переносятся лишь те документы,
которые нужны для работы в новом периоде.
Для хранения документов используются таблицы базы данных. Каждый тип
документов хранится в своей отдельной таблице. Эта таблица-
хранилище называется главной таблицей документа. Есть документы, для
хранения которых главной таблицы достаточно. Например, для хранения
отдельного платежа нам требуется всего одна строка таблицы и ряд
колонок: «плательщик», «получатель», «дата
платежа», «сумма» и т.д.
Но существуют документы, требующие как минимум одной дополнительной таблицы
-хранилища. Например, документ о продаже должен иметь
одну строку в главной таблице («продавец», «покупатель
», «дата» и т.д.) и
множество строк в подчиненной таблице («товар», «количество
», «цена», «сумма»).
Для некоторых документов может потребоваться более одной подчиненной таблицы,
например, для хранения договора может потребоваться отдельно хранить «
Спецификацию поставки», а отдельно «График поставок и платежей
». Наша программа позволяет создавать несколько подчиненных таблиц первого уровня
у одного документа.
Следует заметить, что под документом мы понимаем нечто большее
, чем простой аналог бумажного документа. Скорее под документом
подразумевается именно определенный факт. Например, при продаже товара
может потребоваться распечатать счет-фактуру и накладную. Однако
это вовсе не означает, что следует заводить два отдельных
типа документов в конфигурации. Достаточно завести тип документов «
Продажа товара», а распечатывать два разных документа на основании
одной и той же информации. Разумеется, атрибуты документа
типа «Продажа товара» (поля главной и подчиненной
таблиц) должны быть подобраны таким образом, чтобы там
умещалась вся необходимая для печати бумажных документов информация.
Все документы в программе имеют уникальный внутренний номер ID,
который поставляется генератором DOC_ID_GEN. Поле
ID является связующим между главной таблицей и подчиненными таблицами документа
. Каждая подчиненная таблица имеет вдобавок уникальное поле N,
значение для которого поставляется генератором с именем <имя_
подчиненной_таблицы>_N_GEN. При создании
подчиненной таблицы, этот генератор создается в базе данных автоматически
. Уникальное поле N позволяет организовать ссылки одних документов на
позиции других документов. Кроме того, главная таблица имеет
поле DIR_ID, в котором хранится уникальный внутренний
номер папки, в которой находится документ в «Проводнике
документов». Каждый документ находится в какой-то конкретной
папке. Если вызвать окно «Проводника документов», то
в нем можно создавать новые папки и перемещать документы между
папками. Это сделано для удобства навигации по документам и
для поддержания определенного порядка в делах. В программе имеется
также окно «Поиска документов», в котором можно искать
документы по некоторым общим признакам. Подробнее навигация по документам
описана в соответствующей главе.
Предположим, мы хотим создать тип документа «Продажа товара
». Для этого нам нужно придумать название для главной таблицы
(пусть это будет SALE) и для подчиненной (
пусть это будет SALE_ITEM). После создания этих
двух объектов метаданных, у нас возникнут две таблицы:
SALE
ID
INTEGER |
DIR_ID
INTEGER |
|
|
|
|
SALE_ITEM
Теперь мы можем добавить атрибуты «Продавец», «Покупатель
», «Дата», «№ накладной», «№счета-
фактуры» в главную таблицу:
SALE
ID
INTEGER |
DIR_ID
INTEGER |
VENDOR
INTEGER |
CUSTOMER
INTEGER |
SALE_DATE
DATE |
NAKL_NO
INTEGER |
FACTURE_NO
INTEGER |
1120 |
10 |
1012 |
2033 |
01.05.2003 |
144 |
144 |
|
|
|
|
|
|
|
А в подчиненную таблицу добавить «Товар», «Количество
», «Цена», «Сумма»:
SALE_ITEM
ID
INTEGER |
N
INTEGER |
GOODS
INTEGER |
QUANTITY
INTEGER |
PRICE
DECIMAL(10,2) |
ITEM_AMOUNT
DECIMAL(18,2) |
1120 |
1 |
3021 |
1 |
120,00 |
120,00 |
1120 |
2 |
3052 |
12 |
100,00 |
1200,00 |
1120 |
3 |
1830 |
10 |
320,50 |
3205,00 |
|
|
|
|
|
|
Разумеется, нам нужно самим придумать названия для всех атрибутов
и полей таблиц. Мы рекомендуем использовать для названий полей
английские атрибутов. Поля VENDOR и CUSTOMER имеют тип ссылки
на справочник «Контрагенты», а поле GOODS подчиненной таблицы
имеет тип ссылки на справочник «Товары». В приведенном
примере показаны таблицы, в которых уже хранится один документ
с ID = 1120. В главной таблице хранится одна
запись с общими данными по документу, а в подчиненной
таблице три записи о проданных товарах.
|