Глава 4. СОЗДАНИЕ МЕТАДАННЫХ ДОКУМЕНТА «ПОСТУПЛЕНИЕ НА СКЛАД»
Создаем тип документа «Поступление на склад»
Для упрощения системы все виды поступлений на склад мы объединим
в один тип документа. Для того чтобы отличать между
собой простые приобретения товара за наличные, ввод начальных остатков
товара и поступления от поставщиков, мы добавим в документ
признак вида документа и ссылку на кредитуемый счет.
В беседах с заказчиком выяснилось, что счета обязательств перед
разными поставщиками ведутся в разных валютах, в зависимости от
имеющихся договоренностей. Поэтому мы будем также использовать поле валюта
документа, подразумевая под нею валюту самой сделки. Именно
в этой валюте будет производиться начисление обязательств, возникающих перед
поставщиком в связи с поступлением товара на склад компании TechnoTrade
.
Обязательным условием заказчика было также хранение в документе рублевой информации
для официальной отчетности. В частности, каждая позиция должна
иметь, помимо цены сделки, также рублевую цену,
сумму без НДС и сумму с НДС, связанную с
валютой поставки по курсу, который в каждом документе может
быть свой. Следовательно, нам еще понадобится поле курса
валюты документа.
В части ведения учета стоимости товаров на складе наш заказчик
склоняется к тому, чтобы стоимость всех товарных запасов измерять
в долларах США, так как это удобно для оперативного
учета. Это означает, что нам потребуется в каждом
документе хранить еще и курс доллара США.
Еще наш заказчик утверждает, что иногда счет-фактура
от поставщика присылается на фирму по электронной почте до того
, как поступит товар и должна вводиться в систему заранее
. То есть нужно иметь признак того, поступил ли
товар на склад физически или еще нет. И только
когда товар реально поступит, устанавливать «некую птичку»
для проведения документа в балансе.
Поразмышляв, мы пришли к выводу, что хорошо бы
еще обеспечить на всякий случай возможность при вводе документов рассчитывать
сумму разными способами, отталкиваясь либо от цены товара в
рублях без НДС, либо от цены с НДС.
Дело в том, что при вводе данных персонал компании
наверняка будет использовать сумму всего документа для контроля правильности ввода
цифр. И если одни поставщики вели расчеты от цены
без НДС, а другие от цены с НДС,
то, в связи с ошибками округления, сумма введенного
в базу данных документа может не совпасть с суммой исходного
, что может вызовет осложнения в работе менеджеров. Разумеется
, признак того, как рассчитывалась сумма, придется хранить
в каждом документе. К тому же потребуется хранить в
каждом документе и ставку НДС. Для простоты будем исходить
из того, что она одинаковая для всех товаров внутри
одного конкретного документа. На практике обычно так и бывает
.
Последнее обстоятельство, которое мы должны учесть, это ограничение
, накладываемое системой автоматических бухгалтерских операций в Allegro. Это
ограничение состоит в том, что в документе проводимые суммы
должны храниться в полях таблицы документа в явном виде.
Следовательно, нам, понадобится для каждой позиции товара завести
, как минимум, два поля суммы: в валюте
документа (для начисления обязательств перед поставщиком) и в
долларах США (для начисления стоимости товарных запасов).
Для создания нового типа документа вызовем окно «Метаданные»
и, используя контекстное меню или кнопку на панели инструментов
на закладке «Документы», создадим новый тип документа:
Поступление на склад, таблица STOCK_IN. Нажмем
кнопку OK.
При создании нового типа документа автоматически создаются два целочисленных
поля: ID и DIR_ID, которые отображаются
в списке полей, если включен режим Отображать поля ID
. Таблица STOCK_IN, которую мы создали,
предназначена для хранения «шапки» документа, то есть
сведений, относящихся к каждому конкретному документу целиком, и
которые можно разместить в таблице одной строкой. Такая таблица
называется главной таблицей.
Для добавления остальных полей используем пункт Добавить поле контекстного меню
или кнопку с плюсиком на закладке «Поля». Все
эти поля будут содержать атрибуты, относящиеся к документу в
целом. Для хранения курсов валют будем использовать 5 дробных
десятичных знаков, без форматирования чисел, а для хранения
номера документа используем строковое поле типа VARCHAR(20),
так как нам в принципе неизвестны те замысловатые способы,
какими могут нумеровать свои документы будущие поставщики:
Атрибут |
Поле |
Тип |
Класс объектов |
Обязатель-ный атрибут |
Склад |
STOCK_ACC |
TACCOUNT |
|
да |
Дата поступления на склад |
ENTRY_DATE |
DATE |
|
да |
Вид документа |
DOC_KIND |
INTEGER |
|
да |
Кредитуемый счет |
ACC_ID |
TACCOUNT |
|
да |
Контрагент |
CONTRAGENT |
TREFERENCE |
CONTRAGENT |
да |
Валюта документа |
LAYER_ID |
TLAYER |
|
да |
Способ расчета сумм |
CALC_MODE |
INTEGER |
|
да |
Товар поступил |
HAS_ENTRY |
TBOOLEAN |
|
да |
Дата документа |
DOC_DATE |
DATE |
|
да |
Номер документа |
DOC_NO |
VARCHAR(20) |
|
да |
Ставка НДС |
VAT_RATE |
DECIMAL(4,2) |
|
да |
Курс валюты документа |
EXCH_RATE_L |
DECIMAL(18,5) |
|
да |
Курс доллара США |
EXCH_RATE_S |
DECIMAL(18,5) |
|
да |
Всего, в валюте документа |
TATAL_L |
DECIMAL(18,2) |
|
да |
Всего, в долларах США |
TOTAL_S |
DECIMAL(18,2) |
|
да |
Всего, в рублях |
TOTAL_R |
DECIMAL(18,2) |
|
да |
Итак, главная таблица для типа документа «Поступление на
склад» готова. Имеет смысл добавить в нее ограничение
на уникальность номера документа. Для предотвращения повторного ввода одного
и того же документа мы потребуем уникальности сочетания 3 полей
: Контрагент, Дата документа, Номер документа.
Чтобы создать ограничение на уникальность воспользуемся окном ISQL (мы
это уже делали раньше), которое вызывается с помощью пункта
Инструменты/Интерактивный SQL Главного меню.
В окне ISQL наберем команду:
alter table stock_in
add constraint ux_stock_in
unique(contragent, doc_date, doc_no)
и нажмем Ctrl+Enter.
|