![]() | 務必把PostERP的時日欄位的資料型態設計為TIMESTAMP WITH TIME ZONE,不要設計成TIMESTAMP WITHOUT TIME ZONE資料型態。 |
![]() | 請參考用戶手冊的Chapter 8日期、時間、時區。 |
PostERP支援單一資料庫、多公司、多時區。
用戶可以使用單一部資料庫主機,置於台灣,上面運行PostgreSQL。用戶僅開設一個資料庫posterp,這個單一資料庫posterp就自動支援多家公司。例如:
資料庫posterp同時支援甲公司和乙公司。甲公司的總公司所在地是台灣,其所在時區為UTC+8;乙公司的總公司所在地是日本,其所在時區為UTC+9。
假設你要設計一份報表供全球各公司、各終端用戶使用,這份報表要接受終端用戶指定的年、月,而SQL就調出交易時日發生於該年、月期間的分錄#。則你可以善用PostERP提供的兩對PostgreSQL function:
MonthBegin(year INTEGER,month INTEGER,company TEXT)、MonthBegin(PresentTime TIMESTAMPTZ,company TEXT)
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) |
然後分別指定各參數的用途:
com是公司#
year是年
month是月
我們再假設標的公司位於日本,終端用戶於輸入年度2012與月份7後並執行此報表,則SQL會過濾2012-7-1 00:00:00+9與2012-7-31 23:59:59.99+9之間的分錄資料,無論執行此報表的終端用戶位於哪個時區。同理,這份報表也適用於任何時區的標的公司。
至於MonthBegin(PresentTime TIMESTAMPTZ,company TEXT)和MonthBegin(PresentTime TIMESTAMPTZ,company TEXT),也有類似功能。假設你現在位於日本,當地時間為2012-07-08 15:20:40+09,正在操作位於台灣公司的資料,則:
MonthBegin(NOW(),:com)傳回2012-07-01 00:00:00+08
MonthEnd(NOW(),:com)傳回2012-07-31 23:59:59.99+08
PostERP實現一份設計,供位於多時區的多公司、多使用人使用的理念。而且,
方便終端用戶:時日資料以終端用戶所在時區顯示。
PostERP的開發人員簡單易懂:提供方便的PostgreSQL function,開發人員不需要擔心複雜的時區轉換處理。