На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Следующий параграф
Поиск по книге

Глава 8. ТИПЫ ДОКУМЕНТОВ

Главные и подчиненные таблицы

Документом в нашей программе называются любые данные, отражающие некоторый факт, имевший место. Это может быть отдельный платеж или отгрузка товара, заключенный договор и т.д . Как правило, такие факты имеют дату или даже несколько дат (у договора может быть дата подписания и дата завершения). Например, такая информация, как прайс -лист тоже может считаться документом, если цены время от времени меняются или если для разных покупателей используются разные прайс-листы.

В отличие от содержимого справочников, не все документы переносятся в новую базу данных, если мы создаем ее « по остаткам предыдущего периода». Переносятся лишь те документы, которые нужны для работы в новом периоде.

Для хранения документов используются таблицы базы данных. Каждый тип документов хранится в своей отдельной таблице. Эта таблица- хранилище называется главной таблицей документа. Есть документы, для хранения которых главной таблицы достаточно. Например, для хранения отдельного платежа нам требуется всего одна строка таблицы и ряд колонок: «плательщик», «получатель», «дата платежа», «сумма» и т.д.

Но существуют документы, требующие как минимум одной дополнительной таблицы -хранилища. Например, документ о продаже должен иметь одну строку в главной таблице («продавец», «покупатель », «дата» и т.д.) и множество строк в подчиненной таблице («товар», «количество », «цена», «сумма»).

Для некоторых документов может потребоваться более одной подчиненной таблицы, например, для хранения договора может потребоваться отдельно хранить « Спецификацию поставки», а отдельно «График поставок и платежей ». Наша программа позволяет создавать несколько подчиненных таблиц первого уровня у одного документа.

Следует заметить, что под документом мы понимаем нечто большее , чем простой аналог бумажного документа. Скорее под документом подразумевается именно определенный факт. Например, при продаже товара может потребоваться распечатать счет-фактуру и накладную. Однако это вовсе не означает, что следует заводить два отдельных типа документов в конфигурации. Достаточно завести тип документов « Продажа товара», а распечатывать два разных документа на основании одной и той же информации. Разумеется, атрибуты документа типа «Продажа товара» (поля главной и подчиненной таблиц) должны быть подобраны таким образом, чтобы там умещалась вся необходимая для печати бумажных документов информация.

Все документы в программе имеют уникальный внутренний номер ID, который поставляется генератором DOC_ID_GEN. Поле ID является связующим между главной таблицей и подчиненными таблицами документа . Каждая подчиненная таблица имеет вдобавок уникальное поле N, значение для которого поставляется генератором с именем <имя_ подчиненной_таблицы>_N_GEN. При создании подчиненной таблицы, этот генератор создается в базе данных автоматически . Уникальное поле N позволяет организовать ссылки одних документов на позиции других документов. Кроме того, главная таблица имеет поле DIR_ID, в котором хранится уникальный внутренний номер папки, в которой находится документ в «Проводнике документов». Каждый документ находится в какой-то конкретной папке. Если вызвать окно «Проводника документов», то в нем можно создавать новые папки и перемещать документы между папками. Это сделано для удобства навигации по документам и для поддержания определенного порядка в делах. В программе имеется также окно «Поиска документов», в котором можно искать документы по некоторым общим признакам. Подробнее навигация по документам описана в соответствующей главе.

Предположим, мы хотим создать тип документа «Продажа товара ». Для этого нам нужно придумать название для главной таблицы (пусть это будет SALE) и для подчиненной ( пусть это будет SALE_ITEM). После создания этих двух объектов метаданных, у нас возникнут две таблицы:

SALE


ID INTEGER DIR_ID INTEGER
   
   

SALE_ITEM


ID INTEGER N INTEGER
   
   

Теперь мы можем добавить атрибуты «Продавец», «Покупатель », «Дата», «№ накладной», «№счета- фактуры» в главную таблицу:

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



Система Allegro. Руководство разработчика Наверх