17.4. 日期、時間、時區

Important

務必把PostERP的時日欄位的資料型態設計為TIMESTAMP WITH TIME ZONE,不要設計成TIMESTAMP WITHOUT TIME ZONE資料型態。

Tip

請參考用戶手冊的Chapter 8日期、時間、時區。

PostERP支援單一資料庫、多公司、多時區

用戶可以使用單一部資料庫主機,置於台灣,上面運行PostgreSQL。用戶僅開設一個資料庫posterp,這個單一資料庫posterp就自動支援多家公司。例如:

資料庫posterp同時支援公司和公司。公司的總公司所在地是台灣,其所在時區為UTC+8公司的總公司所在地是日本,其所在時區為UTC+9

假設你要設計一份報表供全球各公司、各終端用戶使用,這份報表要接受終端用戶指定的年、月,而SQL就調出交易時日發生於該年、月期間的分錄#。則你可以善用PostERP提供的兩對PostgreSQL function

  1. MonthBegin(year INTEGER,month INTEGER,company TEXT)MonthBegin(PresentTime TIMESTAMPTZ,company TEXT)

  2. MonthEnd(year INTEGER,month INTEGER,company TEXT)MonthEnd(PresentTime TIMESTAMPTZ,company TEXT)

這樣設計SQL:

SELECT f1 FROM t52 WHERE f0=:com AND f2 BETWEEN MonthBegin(:year,:month,:com) AND MonthEnd(:year,:month,:com)
		

然後分別指定各參數的用途:

我們再假設標的公司位於日本,終端用戶於輸入年度2012與月份7後並執行此報表,則SQL會過濾2012-7-1 00:00:00+92012-7-31 23:59:59.99+9之間的分錄資料,無論執行此報表的終端用戶位於哪個時區。同理,這份報表也適用於任何時區的標的公司。

至於MonthBegin(PresentTime TIMESTAMPTZ,company TEXT)MonthBegin(PresentTime TIMESTAMPTZ,company TEXT),也有類似功能。假設你現在位於日本,當地時間為2012-07-08 15:20:40+09,正在操作位於台灣公司的資料,則:

PostERP實現一份設計,供位於多時區的多公司、多使用人使用的理念。而且,