Я использую основную таблицу ДАТЫ для поиска дат и других значений, чтобы контролировать несколько событий, интервалов и расчетов в моем приложении. В нем есть строки для каждого дня, начиная с 01.01.1990 по 31.12.2041.
Один из примеров того, как я использую эту справочную таблицу:
- Клиент заложил товар на: ЯНВ-31-2010
- Клиент возвращается в период с 3 мая по 10 мая, чтобы сделать ставку на интерес, чтобы избежать потери товара.
- Если он выплачивает проценты за 1 месяц, работник вводит «1» и приложение ищет пешку
дата (JAN-31-2010) в основной таблице даты и помещает FEB-28-2010 в соответствующие проценты
дата pymt. FEB-28 возвращается, потому что FEB-31 не существует! Если 2010 год был високосным, это
возвратил бы 29 февраля.
- Если клиент платит 2 месяца, возвращается МАР-31-2010. 3 месяца, 30 апреля ... Если клиент
выплачивает более 3 месяцев или другой период, не охватываемый таблицей поиска дат,
Сотрудник вручную вводит соответствующую дату.
Вот как выглядит таблица поиска даты:
{ Copyright 1990:2010, Frank Computer, Inc. }
{ DBDATE=YMD4- (correctly sorted for faster lookup) }
CREATE TABLE datemast
(
dm_lookup DATE, {lookup col used for obtaining values below}
dm_workday CHAR(2), {NULL=Normal Working Date,}
{NW=National Holiday(Working Date),}
{NN=National Holiday(Non-Working Date),}
{NH=National Holiday(Half-Day Working Date),}
{CN=Company Proclamated(Non-Working Date),}
{CH=Company Proclamated(Half-Day Working Date)}
{several other columns omitted}
dm_description CHAR(30), {NULL, holiday description or any comments}
dm_day_num SMALLINT, {number of elapsed days since begining of year}
dm_days_left SMALLINT, (number of remaining days until end of year}
dm_plus1_mth DATE, {plus 1 month from lookup date}
dm_plus2_mth DATE, {plus 2 months from lookup date}
dm_plus3_mth DATE, {plus 3 months from lookup date}
dm_fy_begins DATE, {fiscal year begins on for lookup date}
dm_fy_ends DATE, {fiscal year ends on for lookup date}
dm_qtr_begins DATE, {quarter begins on for lookup date}
dm_qtr_ends DATE, {quarter ends on for lookup date}
dm_mth_begins DATE, {month begins on for lookup date}
dm_mth_ends DATE, {month ends on for lookup date}
dm_wk_begins DATE, {week begins on for lookup date}
dm_wk_ends DATE, {week ends on for lookup date}
{several other columns omitted}
)
IN "S:\PAWNSHOP.DBS\DATEMAST";
Есть ли лучший способ сделать это или это крутой метод?